绘制流水线——模型表示:顶点格式、三角单元、索引

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DY_1024/article/details/84144947

场景是物体挥着模型的集合,任何的物体我们都可以使用三角网格来逼近的表示,三角网格是构成物体的模型的基本单元。我们通常使用下面的术语来描述网格中的三角形:多边形、图元、网格几何元。

一个多边形中相邻两边的交汇点称之为顶点,描述三角形单元的时候,我们需要指定三角单元的顶点,描述物体的时候,我们应该指定三角单元的列表。

顶点格式

刚才对于顶点的描述是几何学的,但是在Direct3D中,刚才的描述可能不是很完整,因为在Direct3D中,顶点出了位置信息之外可能还包括颜色属性,法线属性等,Direct3D中允许我们自定义各顶点的分量。

struct ColorVertex{
    float  _x,_y,_z;    //位置
    DWORD _clolor;      //颜色
}

struct NormalTexVertex{
    float _x,_y,_z;    //坐标
    float _nx,_ny,_nz;    //法线
    float _u,_v;        //纹理
}

顶点的结构体定义好之后,我们使用“灵活顶点格式”标记的组合来描述顶点的组织结构,以前面两种定义的顶点格式为例:

//该宏定义的含义就是对应该顶点格式顶点结构,包含了位置属性和颜色属性
#define FVF_COLOR (D3DFVF_XYZ | D3DFVF_DIFFUSE)

//该宏定义的含义就是其对应的顶点格式的结构,包含了:位置,法线,纹理属性等信息
#define FVF_NORMAL_TEX (D3DFVF_XTZ | D3DFVF_NORMAL | D3DFVF_TEX1)

三角单元

三角单元是3D图形的基本组成部分,为了构建一个物体,需要创建一个描述物体的形状和轮廓的三角形单元列表,三角形丹玉列表包含了我们所希望绘制的所有的三角单元的信息。

例如:构建一个矩形,我们将其分为两个三角单元,并制定了两个三角单元的顶点

那么此时,我们制定这个矩形的三角单元列表就是 :
 

Vertex rect[6]{
    v0,v1,v3,    //第一个三角单元
    v0,v2,v3    //第二个三角单元
};

索引

通常构成一个3D物体的众多顶点之间有很多的共享顶点,上面这个矩形的绘制只有两个顶点重合,但是尤其是当模型的细节以及复杂度的增加,重合的顶点数会急剧的增加。下面这个图就是:

上面这个图有8个独立的顶点,但是如果要建立该立方体的三角单元列表,许多的顶点就会重合。为了解决这种问题,我们引入了索引的概念。

索引的原理如下:我们创建一个顶点列表,里面存放了目前为止所有的顶点,然后我们再创建一个索引列表,索引列表里面的存放的就是指向顶点列表的索引,这些索引规定了构建三角形的规则,以及如何将这些三角形组织起来。

那么对于刚才矩形的例子,我们就可以建立一个顶点列表以及索引列表:

顶点列表:

Vertex vertexLists[4] = {v0,v1,v2,v3};

索引列表:

WORD indexList[6] = {

    0,1,2,    //第一个三角形

    0,2,3    //第二个三角形

}

猜你喜欢

转载自blog.csdn.net/DY_1024/article/details/84144947