绘制流水线
顶点格式。
、顶点格式(定义结构体)可以有多种,关键就在于结构定义好后,要用灵活顶点格式(Flexible Vertex Format,FVF)标记的组合来描述顶点的结构
#define FVF_COLOR (D3DFVF_XYZ | D3DFVF_DIFFUSE.。。。)
标记与结构体内数据顺序一致
世界坐标系
让一个立方体中心位于世界坐标系中的点(x,y,z)上
创建用来让立方体变换的矩阵
D3DXMATRIX cubeWorldMatrix;
D3DMatrixTranslation(&cubeWorldMatrix, x , y , z );
设置立方体的变换, 立方体应该还是画在世界坐标系的中心。只不过在此之前把世界坐标系中心进行了位置变换
Device->SetTransform(D3DTS_WORLD , & cubeWorldMatrix);
drawCube();
观察坐标系
世界空间中的所有几何体随着摄像机一同进行变换。。变换后的几何体位于观察坐标系中(view space)
摄像机位于(5,3,-10),其观察点位世界坐标系原点
创建取景变换矩阵:
定义各个位置
D3DXVECTOR3 position( 5.0f, 3.0f, -10.0f);摄像机在世界坐标系中的位置
D3DXVRCTOR3 targetPont(0.0f, 0.0f, 0.0f);世界坐标系中的被观察点
D3DXVECTOR3 worldUp( 0.0f, 1.0f, 0.0f);世界坐标系中向上的方向向量
定义取景变换矩阵
D3DXMATRIX V;
D3DXMatrixLookAtLH(&V, &position, &targetPoint,, &worldUp);
设定取景变换
Device->SetTransform(D3DT_VIEW, &V);
背面消隐
默认在观察坐标系中,顶点排列顺序为顺时针的三角形单元式正面朝向
更改绘制状态(消隐)
Device->SetRenderState(D3DRS_CULLMODE, Value);
Value可取以下值
D3DCULL_NONE 禁用背面消隐
D3DCULL_CW 顺时针消隐
D3DCULL_CCW 逆时针消隐(默认)
透视投影(perspective projection)
D3DXMATRIX proj;
D3DMatrixPerspectiveFovLH
(
&proj,
PI*0.5f,视域角
(float)width/(float)height, 纵横比(屏幕)
1.0f,近裁剪面到坐标原点距离
1000.0f远裁剪面到坐标原点距离
);
Device->SetTransform(D3DTS_PROJECTION, &proj);
视口变换(viewport transform)
将顶点坐标从投影窗口转换到屏幕的一个矩形区域中(视口)
设置视口
D3DVIEWPORT9 vp=
{
0 父窗口位置,
0,
640, 父窗口大小
480,
0, 深度缓冲中的最小深度值
1 深度缓冲中的最大深度值
}
光栅化
几何图元变为二维图像
2013.11.20 昨晚本来想把几何体绘制也给看完的。。没想到朋友叫我去欧服和他玩LOL。。最终还是玩不了。延迟略高。。今天把绘制部分看完。顺便结合浅墨的文章实践下