前言:一个场景可能是多个物体或模型的组合。一个物体可能可以由一个三角形物体来表示。
由三角形网格建立一个物体,我们称之为建模。
顶点格式:创建一种自定义的顶点结构:
struct ColorVertex
{
float _x,_y,_z;
DWORD _color;
}
#define FVF_COLOR (D3DFVF_XYZ|D3DFVF_DIFFUSE)
位置,颜色。
Struct NormalVertex
{
float _x,_y,_z;
float _nx,_ny,_nz; //法线向量
float _u,_v; //纹理坐标
}
#define FVF_NORMAL_TEX (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1)
三角形:三角形是构建3D物体的基本图形。 Vertex vertexList
索引: 创建一个顶点列表和一个索引列表。顶点列表包括所有不重复的列表,索引列表则用顶点列表定义的值来表示每个
三角形的构造方式。 DWORD IndexList[]
虚拟摄像机:将3D世界转换为2D的世界。在3D世界里面摄像机被放置和定向并定义其可视体。
可视体:由可视角度 Vertical Field of View Angle. 前裁面 Near Plane. 后裁面 Far Plane. 定义一个平截头
投影窗口 Projection Window 3D表示的投影平面一般为Z = 1 的平面。
渲染管线:
Local Space -> World Space -> View Space -> BaceFace culling - > Lighting -> Clipping -> projection
-> viewport space ->Rasterization
IDirect3DDevice9:SetTransform 方法来提供变幻矩阵。如:IDirect3DDevice->SetTransform(D3DDTS_WORD,&wordMatrix);
本地空间:又称建模空间,它是我们定义物体三角行列的坐标系。
世界空间:把我们所建模的物体放到世界空间里面去。
视图空间:将摄像机平移到世界坐标系的原点并且把它的方向朝向Z轴的的正方向。
D3DXMATRIX *D3DXMatrixLookAtLH(
D3DXMATRIX* pOut,
const D3DXVECTOR3* pEye, //摄像机在世界坐标系的位置
const D3DXVECTOR3* pAt, //摄像机的观察点
const D3DXVECTOR3* pUp //3D世界的上方向。通常Y轴的正向方向。
);
IDirect3DDevice->SetTransform(D3DDTS_VIEW,&V);
背面挑选:D3D通过挑选背面多边形来提高效率。
IDirect3DDevice->SetRanderState(D3DRS_CULLMODE,value)
value:D3DCULL_NONE,D3DCULL_CW顺时针三角形,D3DCULL_CCW你是真三角形。
Lighting:调节光照效果。
Clippling: 完全包含,部分在外,完全在外。
投影Projection:3D场景转换为2D场景表示。
D3DXMATRIX* D3DXMatrixPerspectiveFovAtLH(
D3DXMATRIX* pOut,
FLOAT* fovY, //垂直区域可视角度
FLOAT* Aspect, //Aspect=screanWidth/screanHeight
FLOAT* zn, //近面
FLOAT* zf //远面
);
最后IDirect3DDevice->SetTransform(D3DTS_PROJECTION,&Proj);
视口变幻:变幻可见窗口。
struct _D3DVIEWPORT9{
DWORD X,
DWORD Y,
DWORD Width,
DWORD Height,
DWORD MinZ, //最小深度缓冲值
DWORD MaxZ, //最大深度缓冲值
}D3DVIEWPORT9
光栅化:显示每个三角形的颜色值。