Direct3D学习笔记二:渲染管线

来源:互联网 发布:携程幼儿园 知乎 编辑:程序博客网 时间:2024/05/11 20:37

 前言:一个场景可能是多个物体或模型的组合。一个物体可能可以由一个三角形物体来表示。

由三角形网格建立一个物体,我们称之为建模。

 

顶点格式:创建一种自定义的顶点结构:

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

光栅化:显示每个三角形的颜色值。

 

 

 

 

原创粉丝点击