【CSDN浅墨】读书笔记4

浅墨大神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


你可能感兴趣的:(DirectX)