在Direct3D中指定索引的正确方法

时间:2013-12-21 05:56:42

标签: c++ 3d directx

假设我想在Direct3D中渲染金字塔。我的顶点缓冲区中有以下顶点:

Vertex vertices[] = {
    {XMFLOAT3(+1.0f,0.0f,+1.0f),(const float*)&Colors::Green},
    {XMFLOAT3(+1.0f,0.0f,-1.0f),(const float*)&Colors::Green},
    {XMFLOAT3(-1.0f,0.0f,-1.0f),(const float*)&Colors::Green},
    {XMFLOAT3(-1.0f,0.0f,+1.0f),(const float*)&Colors::Green},
    {XMFLOAT3(0.0f,1.5f,0.0f),(const float*)&Colors::Blue}
 }

其中Vertex是一个具有位置和颜色值的简单struct

现在在我的索引缓冲区中,指定这些顶点以绘制金字塔的正确顺序是什么,所以它的所有三角形都是正面的?每当我尝试对我来说似乎合乎逻辑的东西时,我最终都会遇到一些面向错误方向的三角形。

1 个答案:

答案 0 :(得分:1)

这就是我通常这样做的方式:

  • 在一张纸上,在3d网格编辑器中绘制您的模型,或只是Google up an image
  • 将非三角形(例如金字塔底部的正方形)划分为三角形
  • 分配连续数字并在每个顶点附近写下
  • 按顺序开始从正面可见三角形开始索引,具体取决于渲染器所需的内容(例如,按顺时针顺序)
  • 然后索引相反顺序的背面三角形(在我们的示例中逆时针方向) - 或 - 精神上将网格旋转到180度(或在它周围精神旋转),“看看它的背面”和索引三角形按顺序(顺时针)。

作为替代方案:

  • 获取3d网格编辑器,绘制模型,以任何文本格式保存(例如.obj),使用文本编辑器打开它并查找索引数据
  • Google for it

当然,您的渲染器,尤其是输入汇编程序的原始类型(如三角形列表或三角形条)和剔除必须正确设置,以正确的方式绘制模型。

希望它有所帮助!