VS2022+DirectX9坐标系与基本图元之基本图元(BasePrimitive)_0302
图元类型是DirectX9绘制中所需要的最重要的类型,不同的类型,决定了是如何绘制顶点数据的(点,线,三角形),通过几个例子来说明类型之间的不同。
D3DPRIMITIVETYPE 图元类型
typedef enum D3DPRIMITIVETYPE {D3DPT_POINTLIST = 1, // 点列表D3DPT_LINELIST = 2, // 线列表D3DPT_LINESTRIP = 3, // 线带D3DPT_TRIANGLELIST = 4, // 三角形列表D3DPT_TRIANGLESTRIP = 5, // 三角形带D3DPT_TRIANGLEFAN = 6 // 三角形扇
} D3DPRIMITIVETYPE;
D3DPT_POINTLIST 点列表
每个订单单独作为一个点(不连接),适用场景(粒子效果、星点、标点)
D3DPT_LINELIST 线列表
每 2 个顶点组成一条独立的直线(不共享顶点),适用场景,离散的线段(如坐标轴、网格线)
D3DPT_LINESTRIP 线带
顶点按顺序连接成连续的折线(每个新顶点与前一个顶点组成新线段,共享顶点)。适用场景(连续曲线,如轨迹线、轮廓线)
D3DPT_TRIANGLELIST 三角形列表
每 3 个顶点组成一个独立的三角形(不共享顶点)。 场景:独立的三角形(如不规则碎片、离散多边形)
D3DPT_TRIANGLESTRIP 三角形带
从第 3 个顶点开始,每个新顶点与前两个顶点组成新三角形(共享两条边)。场景:连续的三角形带(如地形网格、曲面)
D3DPT_TRIANGLEFAN 三角形扇
第一个顶点为中心,每个新顶点与中心点和前一个顶点组成新三角形(共享中心点)。场景:扇形、圆形、多边形填充(如圆盘、圆锥底面)
示例
同样的顶点,渲染不同的图元类型会渲染出不同的图形。
//顶点数据
CUSTOMVERTEX vertices[] =
{{ 50.0f, 250.0f, 0.5f, 1.0f, 0xffff0000, },{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, },{ 250.0f, 250.0f, 0.5f, 1.0f, 0xffff0000, },{ 350.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, },{ 450.0f, 250.0f, 0.5f, 1.0f, 0xffff0000, },{ 550.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }
};
可以通过图来看到这些顶点数据绘制出来的是什么样的基本内容,可以看到一共是6个顶点,刚好能绘制出两个三角形,有序列号0-5。
以上是顶点数据,下面是六种不同类型的图元渲染
switch (g_iType) //选择绘制图元的类型
{
case 1: //点列表g_pd3dDevice->DrawPrimitive(D3DPT_POINTLIST, 0, 6);break;case 2: //线段列表g_pd3dDevice->DrawPrimitive(D3DPT_LINELIST, 0, 3);break;case 3: //线段条带g_pd3dDevice->DrawPrimitive(D3DPT_LINESTRIP, 0, 5);break;case 4: //三角形列表g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);break;case 5: //三角形条带g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 4);break;case 6: //三角形扇g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 0, 4);break;
}
D3DPT_POINTLIST 点列表
通过点击数字按键1可以看到如下的图:
是可以看到有六个顶点被显示的,所以,这个图元类型就是显示各个顶点。
D3DPT_LINELIST 线段列表
通过点击数字按键2可以看到如下的图:
可以看到有三个斜着的红色的线条。
它把顶点数据分成了三部分(01,23,45)这三段,也印证了它们不共享顶点。
D3DPT_LINESTRIP 线段条带
通过点击数字按键3可以看到如下的图:
可以看到一条折线。
它把顶点数据分成了一条折线,实际上就是把D3DPT_LINELIST 线段列表连接了起来。
(01,12,23,34,45)
D3DPT_TRIANGLELIST 三角形列表
通过点击数字按键4可以看到如下的图:
这个跟提供的基础顶点数据结构示例图差不多一样,就是两个三角形的六个顶点。
D3DPT_TRIANGLESTRIP 三角形条带
通过点击数字按键5可以看到如下的图:
可以看到它自己根据顶点又生成了两个三角形,构成了三角形带状形状。
D3DPT_TRIANGLEFAN 三角形扇
通过点击数字按键6可以看到如下的图:
只能看个示例,具体应该有内部连接导致。
总结
对图元类型有了一个较为深层次的理解了。
git仓库
https://github.com/kesshei/direct9Demo/tree/main/03_%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%9D%90%E6%A0%87%E7%B3%BB%E4%B8%8E%E5%9F%BA%E6%9C%AC%E5%9B%BE%E5%85%83/02_BasicPrimitive
https://gitee.com/kesshei/direct9Demo/tree/main/03_%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%9D%90%E6%A0%87%E7%B3%BB%E4%B8%8E%E5%9F%BA%E6%9C%AC%E5%9B%BE%E5%85%83/02_BasicPrimitive