请教下D3D的坐标范围是用什么语句设置的?(还有40分在VC区,一起给)

srxumin 2010-01-14 04:46:09
原贴见:http://topic.csdn.net/u/20100111/23/4c00a02b-871d-4098-9980-c72d8fdac759.html
希望能回答的朋友也帮我这个贴顶一下,我好一起给分

CUSTOMVERTEX g_Vertices[] =
{
{ -1.0f,-1.0f, 0.0f, 1.0f, 0xffff0000, },
{ 1.0f,-1.0f, 0.0f, 1.0f, 0xff0000ff, },
{ 0.0f, 1.0f, 0.0f, 1.0f, 0xffffffff, },
};

CUSTOMVERTEX vertices[] =
{
{ 100.0f, 400.0f, 0.5f, 1.0f, 0xffff0000, },
{ 300.0f, 50.0f, 0.5f, 1.0f, 0xff00ff00, },
{ 500.0f, 400.0f, 0.5f, 1.0f, 0xff0000ff, },
};

刚学D3d入门,上面分别是两个项目中的顶点缓冲,它们最终都在屏幕上画出了正确的并且是差不多大的三角形。但是这坐标的差距也太大了吧?
我现在想知道这屏幕坐标的范围是在哪行语句中设置的?对比了两个项目中的其它代码,好像差别都不大。
...全文
120 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
srxumin 2010-01-17
  • 打赏
  • 举报
回复
up
bcstar 2010-01-15
  • 打赏
  • 举报
回复
没仔细想过。
但是一看行者发的图 我就明白了。
张赐 2010-01-15
  • 打赏
  • 举报
回复
并没有设置坐标范围的东西
你只能设置投影矩阵
xingzhe2001 2010-01-15
  • 打赏
  • 举报
回复


看一下这个图就明白为什么不同的三角形看起来一样,C是摄像机,只要一个三角形的三个点在那三条射线除了出发点外的任何地方,投影的屏幕上的形状都一样,看起来都是一样大
xingzhe2001 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bcstar 的回复:]
如果是默认的view矩阵 那应该是一样的吧?
为什么他看的三角形看起来不一样大?
难道楼主自己设置了相机?
[/Quote]

如果是默认的摄像机,那么你可以想象是在同一个位置看三角形,两个三角形的顶点坐标不一样,自然大小就不一样了
aaaa3105563 2010-01-14
  • 打赏
  • 举报
回复
up
srxumin 2010-01-14
  • 打赏
  • 举报
回复
这是两个三角绘图的部分代码,一个是用d3d8的,一个是d3d9的,不过跟这个没关系:

第一个:
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw;
DWORD color;
};

// Our custom FVF, which describes our custom vertex structure
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

//-----------------------------------------------------------------------------
// Name: InitD3D()
// Desc: Initializes Direct3D
//-----------------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{

if( NULL == ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) )
return E_FAIL;


D3DDISPLAYMODE d3ddm;
if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
return E_FAIL;


D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;


if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}


g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );


g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );

return S_OK;
}

HRESULT InitGeometry()
{

CUSTOMVERTEX g_Vertices[] =
{
{ -1.0f,-1.0f, 0.0f, 1.0f, 0xffff0000, },
{ 1.0f,-1.0f, 0.0f, 1.0f, 0xff0000ff, },
{ 0.0f, 1.0f, 0.0f, 1.0f, 0xffffffff, },
};


if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB ) ) )
{
return E_FAIL;
}
//后面代码省略
}


第二个:
struct CUSTOMVERTEX 
{
FLOAT x, y, z, rhw;
DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE) //顶点格式

//-----------------------------------------------------------------------------
// Desc: 初始化Direct3D
//-----------------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{
//创建Direct3D对象, 该对象用于创建Direct3D设备对象
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
//设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
//创建Direct3D设备对象
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}
return S_OK;
}

//-----------------------------------------------------------------------------
// Desc: 创建并填充顶点缓冲区
//-----------------------------------------------------------------------------
HRESULT InitVB()
{
//顶点数据
CUSTOMVERTEX vertices[] =
{
{ 100.0f, 400.0f, 0.5f, 1.0f, 0xffff0000, },
{ 300.0f, 50.0f, 0.5f, 1.0f, 0xff00ff00, },
{ 500.0f, 400.0f, 0.5f, 1.0f, 0xff0000ff, },
};
//创建顶点缓冲区
if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
{
return E_FAIL;
}
//后面省略.......
}



不知道这样能否把问题说清楚了?
bcstar 2010-01-14
  • 打赏
  • 举报
回复
如果是默认的view矩阵 那应该是一样的吧?
为什么他看的三角形看起来不一样大?
难道楼主自己设置了相机?
xingzhe2001 2010-01-14
  • 打赏
  • 举报
回复
如果没有摄像机也会有默认的view矩阵,其实就是默认的摄像机。
bcstar 2010-01-14
  • 打赏
  • 举报
回复
如果是画个3D 的话, 可能看起来的大小跟摄像机的位置有关系啊

但是楼主说他只是画个三角形吧
貌似没用到摄像机列?
xingzhe2001 2010-01-14
  • 打赏
  • 举报
回复
坐标范围没有限制,在屏幕上看起来一样是可能的,大小根摄像机的位置有关。
张赐 2010-01-14
  • 打赏
  • 举报
回复
你看起来像差不多大,有可能是因为2次设定的投影矩阵不一样

大的东西在远处看起来就很小嘛
bcstar 2010-01-14
  • 打赏
  • 举报
回复
是看你的世界坐标系吧?
咦 你画的三角形? 这个。我也不清楚

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧