【问题标题】:Proper way to specify indices in Direct3D在 Direct3D 中指定索引的正确方法
【发布时间】:2013-12-21 05:56:42
【问题描述】:

假设我想在 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,带有位置和颜色值。

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

【问题讨论】:

  • 如果所有三角形都朝前,那它就不是金字塔了 ;-)

标签: c++ 3d directx


【解决方案1】:

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

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

作为替代方案:

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

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

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2012-10-29
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2012-01-21
    • 2011-11-06
    • 2018-06-05
    相关资源
    最近更新 更多