您的位置:首页 > 编程语言 > C语言/C++

【CSDN浅墨】读书笔记4

2013-09-03 12:50 260 查看
浅墨大神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灵活顶点格式

设置成未经过第一阶段处理的顶点,也就是消除之前编写的xyzchw改成xyz
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DirectX9 C++ C