WEB开发网
开发学院软件开发VC MFC架构下的DirectX8 阅读

MFC架构下的DirectX8

 2010-05-25 20:36:05 来源:WEB开发网   
核心提示:第六章 帖图立方体(DX8MFC5)现在样我们来进入三维的世界吧!这里你要启用Z缓冲(z-buffer),设置立方体的材质,MFC架构下的DirectX8(6),世界坐标系和投影坐标系,启用Z缓冲(z-buffer),视图矩阵变换把正方体放在可视空间内,投影矩阵使正方体看起来有深度感,你要在D3DPRESENT_PAR

第六章 帖图立方体

(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);
}

运行本章的例子你将看到一个旋转的正方体。

上一页  1 2 3 4 5 6 

Tags:MFC 架构 DirectX

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接