1

这是 Direct3D 10 或 OpenGL 3.2 / GLES 3.0 和原始重启的问题。

我正在尝试寻找一种将包含退化三角形带的索引数组转换为另一个索引数组的方法,其中退化索引被 0xFFFF 替换(索引三角形带由 nvTriStrip 转换)。

例如我有

索引列表 0, 1, 2, 2, 3, 3 , 4, 5, 6

0、1、2、0xFFFF、3、4、5、6

但我想保持“缠绕顺序”,因为仅删除一个索引是不够的。

我试过这样的方式

bool isRestarting = true;
vector<GLushort> newindices; // Optimized with primitive restart
vector<GLushort> indices; // The original indices
int i = 0;
for (; i < indices.size();)
{
   if (i < indices.size() - 4 && indices[i+0] == indices[i+1] && indices[i+2] == indices[i+3])
   {
      // Looks degenerated
      newindices.push_back(indices[i+0]);
      newindices.push_back(0xFFFF);
      newindices.push_back(indices[i+2]); // Winding changes!
      isRestarting = true;
      i+=4;

   }
   else if (isRestarting)
   {
      // Restarting the primitive.
      newindices.push_back(indices[i+2]);
      newindices.push_back(indices[i+1]);
      newindices.push_back(indices[i+0]);
      isRestarting = false;
      i+=3;
   }
   else
   {
      newindices.push_back(indices[i]); 
      i++;
   }
}

但我正在失去蜿蜒的信息。

根据这段代码,您有什么建议,这似乎无法正常工作。

4

0 回答 0