将具有退化三角形的索引三角形条带索引数组转换为原始重启

时间:2014-07-22 02:31:11

标签: arrays opengl direct3d gl-triangle-strip

这是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++;
   }
}

但我失去了蜿蜒的信息。

根据这段代码,您的建议是什么,似乎无法正常运行。

0 个答案:

没有答案