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
posted @ 2025-10-20 19:36  蓝创精英团队  阅读(12)  评论(0)    收藏  举报  来源