MFC架构下的DirectX8
2010-05-25 20:36:05 来源:WEB开发网第六章 帖图立方体
(DX8MFC5)
现在样我们来进入三维的世界吧!这里你要启用Z缓冲(z-buffer),设置立方体的材质,世界坐标系和投影坐标系。
启用Z缓冲(z-buffer),你要在D3DPRESENT_PARAMETERS结构中加入:
present.EnableAutoDepthStencil = TRUE;
present.AutoDepthStencilFormat = D3DFMT_D16;
这里告诉DirectX8使用16位的Z缓冲,下一步:
pID3DDevice->SetRenderState(D3DRS_ZENABLE, TRUE);
到这里Z缓冲已经设置完成。最后你还要在DrawScene()中调用清除Z缓冲内容的代码:
pID3DDevice->Clear(0,
NULL,
D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_RGBA(0,63,0,0),
1.0,
0);
MYVERTEX结构改成:
struct MYVERTEX
{
FLOAT x, y, z; // The transformed position
DWORD color; // The vertex color
FLOAT tu, tv; // Texture coordinates
};
在InitDirect3D()也作了相应改动,具体可见源代码。
Direct3D中有多种矩阵,在这里只使用其中的三个:世界、视图和投影矩阵。世界矩阵变换会把正方体放在世界坐标系中,视图矩阵变换把正方体放在可视空间内,投影矩阵使正方体看起来有深度感。
BuildMatrices()函数将建立这三个矩阵:
void CFrameWin::BuildMatrices()
{
D3DXMATRIX matrix;
D3DXMatrixRotationY(&matrix, timeGetTime() / 1000.0f);
pID3DDevice->SetTransform(D3DTS_WORLD, &matrix);
D3DXMatrixLookAtLH(&matrix, &D3DXVECTOR3(0.0f, 3.0f, -5.0f), // 摄像机的空间位置
&D3DXVECTOR3(0.0f, 0.0f, 0.0f), // 摄象机观察点
&D3DXVECTOR3(0.0f, 1.0f, 0.0f)); // 摄象机向上方向矢量
pID3DDevice->SetTransform(D3DTS_VIEW, &matrix);
// 设置我们的平截面为45度角
D3DXMatrixPerspectiveFovLH(&matrix, D3DX_PI / 4, 4.0f / 3.0f, 1.0f, 100.0f);
pID3DDevice->SetTransform(D3DTS_PROJECTION, &matrix);
}
运行本章的例子你将看到一个旋转的正方体。
更多精彩
赞助商链接