D3D支持的图元类型

设备支持的图元类型


Microsoft® Direct3D®设备可以创建并管理以下类型的图元。

可以在C++应用程序中用IDirect3DDevice9接口提供的任何渲染方法渲染各种类型的图元。


点表


点表是一个顶点的集合,被渲染为孤立的点。应用程序可以将它们用于星空,或多边形表面的虚线。

下图描绘了一个渲染得到的点表。

点表

应用程序可以将材质和纹理应用于点表。材质和纹理的颜色只影响绘制得到的那些点,不会影响各点之间的任何其它地方。

以下示例代码显示了如何为这个点表创建顶点。

struct CUSTOMVERTEX

{

    float x,y,z;

};

CUSTOMVERTEX Vertices[] =

{

    {-5.0, -5.0, 0.0},

    { 0.0,  5.0, 0.0},

    { 5.0, -5.0, 0.0},

    {10.0,  5.0, 0.0},

    {15.0, -5.0, 0.0},

    {20.0,  5.0, 0.0}

};

以下示例代码显示了如何使用IDirect3DDevice9::DrawPrimitive渲染这个点表。

//

// 这里假定d3dDevice是指向IDirect3DDevice9接口的有效指针

//

d3dDevice->DrawPrimitive( D3DPT_POINTLIST, 0, 6 );


线表


线表是一个孤立线段的集合。线表对诸如给三维场景加入雨雪或大雨这样的任务很有用。

下图描绘了一个渲染得到的线表。

线表

可以将材质和纹理用于线表。材质和纹理的颜色只会影响绘制得到的那些线段,而不会影响各线段之间的任何其它地方。

以下示例代码显示了如何为这个线表创建顶点。

struct CUSTOMVERTEX

{

    float x,y,z;

};

CUSTOMVERTEX Vertices[] =

{

    {-5.0, -5.0, 0.0},

    { 0.0,  5.0, 0.0},

    { 5.0, -5.0, 0.0},

    {10.0,  5.0, 0.0},

    {15.0, -5.0, 0.0},

    {20.0,  5.0, 0.0}

};

以下示例代码显示了如何使用IDirect3DDevice9::DrawPrimitive渲染这个线表。

//

// 这里假定d3dDevice是指向IDirect3DDevice9接口的有效指针

//

d3dDevice->DrawPrimitive( D3DPT_LINELIST, 0, 3 );


线带


线带

线带是由相互连接的线段组成的图元。应用程序可以将线段带用于创建不封闭的多边形,封闭多边形是最后一个顶点与第一个顶点通过一条线段相连的多边形。如果应用程序使用基于线段带的多边形,那么不能保证顶点是共面的。

下图描绘了一个渲染得到的线段带。

以下示例代码显示了如何为这个线段带创建顶点。

struct CUSTOMVERTEX

{

    float x,y,z;

};

CUSTOMVERTEX Vertices[] =

{

    {-5.0, -5.0, 0.0},

    { 0.0,  5.0, 0.0},

    { 5.0, -5.0, 0.0},

    {10.0,  5.0, 0.0},

    {15.0, -5.0, 0.0},

    {20.0,  5.0, 0.0}

};

以下示例代码显示了如何使用IDirect3DDevice9::DrawPrimitive渲染这个线段带。

//

// 这里假定d3dDevice是指向IDirect3DDevice9接口的有效指针

//

d3dDevice->DrawPrimitive( D3DPT_LINESTRIP, 0, 5 );


三角形表


三角形表

三角形表是一个孤立三角形的集合。它们可能也可能不彼此相邻。三角形表必须至少有三个顶点,全部顶点的数量必须是三的倍数。

可以将三角形表用于创建由不相连的部分组成的物体。例如,在三维游戏中创建一个能量场的一种方法就是指定一个很大的三角形表,它由许多小且不相连的三角形组成的。然后将看起来发光的材质和纹理应用于三角形表。墙上的每个三角形看起来都发光。穿过三角形之间的缝隙,可以看到墙后面的一部分,这就和玩家看一个能量场时所应该看到的一样。

三角形表在创建具有锋利边缘并使用高洛德着色算法进行着色的物体时同样有用。请参阅面和顶点法向量

下图描绘了一个渲染得到的三角形表。

以下示例代码显示了如何为这个三角形表创建顶点。

struct CUSTOMVERTEX

{

    float x,y,z;

};

CUSTOMVERTEX Vertices[] =

{

    {-5.0, -5.0, 0.0},

    { 0.0,  5.0, 0.0},

    { 5.0, -5.0, 0.0},

    {10.0,  5.0, 0.0},

    {15.0, -5.0, 0.0},

    {20.0,  5.0, 0.0}

};

以下示例代码显示了如何使用IDirect3DDevice9::DrawPrimitive渲染这个三角形表。

//

// 这里假定d3dDevice是指向IDirect3DDevice9接口的有效指针

//

d3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2 );


三角形带


三角形带是一系列相连的三角形。因为三角形是相连的,所以应用程序无需为每个三角形重复指定所有三个顶点。例如,定义以下三角形带只需七个顶点。

 三角形带

系统用顶点v1,v2和v3画第一个三角形,v2,v4和v3画第二个三角形,v3,v4和v5画第三个,v4,v6和v5画第四个,依次类推。注意第二和第四个三角形的顶点顺序是颠倒的,为了确保所有三角形都按顺时针的顺序绘制,这是必需的。

三维场景中的大多数物体都由三角形带组成,这是因为用三角形带指定复杂的物体,可以有效地节省内存和处理时间。

下图描绘了一个渲染得到的三角形带。

 

以下示例代码显示了如何为这个三角形带创建顶点。

struct CUSTOMVERTEX

{

    float x,y,z;

};

CUSTOMVERTEX Vertices[] =

{

    {-5.0, -5.0, 0.0},

    { 0.0,  5.0, 0.0},

    { 5.0, -5.0, 0.0},

    {10.0,  5.0, 0.0},

    {15.0, -5.0, 0.0},

    {20.0,  5.0, 0.0}

};

以下示例代码显示了如何使用IDirect3DDevice9::DrawPrimitive渲染这个三角形带。

//

// 这里假定d3dDevice是指向IDirect3DDevice9接口的有效指针

//

d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 4);


三角形扇


除了所有三角形共享同一个顶点以外,三角形扇与三角形带相似。如下图所示。

 三角形扇

系统使用顶点v2,v3和v1画第一个三角形,v3,v4和v1画第二个三角形,v4,v5和v1画第三个三角形,依次类推。当启用平面着色时,系统使用第一个顶点的颜色对三角形进行着色。

下图描绘了一个渲染得到的三角形扇。

 

以下示例代码显示了如何为这个三角形扇创建顶点。

struct CUSTOMVERTEX

{

    float x,y,z;

};

CUSTOMVERTEX Vertices[] =

{

    { 0.0, 0.0, 0.0},

    {-5.0, 5.0, 0.0},

    {-3.0,  7.0, 0.0},

    { 0.0, 10.0, 0.0},

    { 3.0,  7.0, 0.0},

    { 5.0,  5.0, 0.0},

};

以下示例代码显示了如何使用IDirect3DDevice9::DrawPrimitive渲染这个三角形扇。

//

// 这里假定d3dDevice是指向IDirect3DDevice9接口的有效指针

//

d3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, 4 );

原文地址:https://www.cnblogs.com/StudipBird/p/3242030.html