求教:Direct几何流水线疑惑
bool CreateTriangle()
{
Device->CreateVertexBuffer(3*sizeof(Vertex),D3DUSAGE_WRITEONLY,D3DFVF_XYZ,
D3DPOOL_MANAGED,&Triangle,0);
Vertex* vertex;
Triangle->Lock(0,0,(void**)&vertex,0);
vertex[0] = Vertex(-1.0f, 0.0f, 2.0f);
vertex[1] = Vertex( 0.0f, 1.0f, 2.0f);
vertex[2] = Vertex( 1.0f, 0.0f, 2.0f);
Triangle->Unlock();
D3DXMATRIX proj;
D3DXMatrixPerspectiveFovLH(
&proj, // result
D3DX_PI * 0.5f, // 90 - degrees
(float)Width / (float)Height, // aspect ratio
1.0f, // near plane
1000.0f); // far plane
Device->SetTransform(D3DTS_PROJECTION, &proj);
//
// Set wireframe mode render state.
//
Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
return true;
}
以上代码是DirectX龙书上的一个小例子,按照龙书所说的流水线应该是世界变换-观察变换-投影变换-视口变换,从左到右,
执行完Triangle->Unlock();应该要调用D3DXMatrixLookAtLH进行观察变换的设置,为什么可以跳过观察变换直接进行投影变换
[解决办法]
相当于视点在原点,使用默认的观察矩阵。