浅墨大神CSDN博客专栏:http://blog.csdn.net/column/details/vc-game-programming.html
分为:固定功能渲染流水线、可编程渲染流水线
固定功能渲染流水线:
第一阶段:坐标变换和光照处理(每个对象的顶点从一个抽象的,浮点坐标变换到基于像素的屏幕空间当中)
第二阶段:光栅化处理阶段(将已经完成变换的光照阶段的顶点组织为以点、线、面为基础的图元,应用纹理贴图、颜色属性、设置渲染状态)
注意:渲染流水线中的步骤并不一定都要有,可以省略。
第一阶段可分为:世界变换,取景变换,光照处理,投影变幻,视口变换
世界变换
// 世界变换
D3DXMATRIX matWorld, Rx, Ry, Rz;
D3DXMatrixIdentity(&matWorld);
D3DXMatrixRotationX(&Rx, D3DX_PI * (::timeGetTime() / 1000.0f));
D3DXMatrixRotationY(&Ry, D3DX_PI * (::timeGetTime() / 1000.0f/2));
D3DXMatrixRotationZ(&Rz, D3DX_PI * (::timeGetTime() / 1000.0f/3));
matWorld = Rx * Ry * Rz * matWorld;
g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);
取景变换
// 取景变换
D3DXMATRIX matView;
D3DXVECTOR3 vEye(0.0f, 0.0f, -200.0f);
D3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);
D3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp);
g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);
投影变换
// 投影变换
D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f, 1.0f, 1.0f, 1000.0f);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);
视口变换
// 视口变换
D3DVIEWPORT9 vp;
vp.X = 0;
vp.Y = 0;
vp.Width = SCREEN_WIDTH;
vp.Height = SCREEN_HEIGHT;
vp.MinZ = 0.0f;
vp.MaxZ = 1.0f;
g_pd3dDevice->SetViewport(&vp);
注意:
struct CUSTOMVERTEX
{
FLOAT x, y, z;
DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE) // FVF灵活顶点格式