DX绘制流水线

来源:互联网 发布:matlab数据拟合 线性度 编辑:程序博客网 时间:2024/04/29 06:10

绘制流水线

 

顶点格式。

、顶点格式(定义结构体)可以有多种,关键就在于结构定义好后,要用灵活顶点格式(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

摄像机位于(53-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。。最终还是玩不了。延迟略高。。今天把绘制部分看完。顺便结合浅墨的文章实践下