Arrays 将带有退化三角形的索引三角形带索引数组转换为基元重新启动
这是Direct3D 10或OpenGL 3.2/3.0和原语重新启动的问题 我试图寻找一种方法,将包含退化三角形条带的索引数组转换为另一个索引数组,其中退化索引被NVTrip转换的0xFFFF索引三角形条带替换 比如我有 索引列表 0,1,2,2,3,3,4,5,6 到 0,1,2,0xFFFF,3,4,5,6 但我想保持“缠绕顺序”,因为仅仅删除一个索引是不够的 我试过这样的方法Arrays 将带有退化三角形的索引三角形带索引数组转换为基元重新启动,arrays,opengl,direct3d,gl-triangle-strip,Arrays,Opengl,Direct3d,Gl Triangle Strip,这是Direct3D 10或OpenGL 3.2/3.0和原语重新启动的问题 我试图寻找一种方法,将包含退化三角形条带的索引数组转换为另一个索引数组,其中退化索引被NVTrip转换的0xFFFF索引三角形条带替换 比如我有 索引列表 0,1,2,2,3,3,4,5,6 到 0,1,2,0xFFFF,3,4,5,6 但我想保持“缠绕顺序”,因为仅仅删除一个索引是不够的 我试过这样的方法 bool isRestarting = true; vector<GLushort> newindi
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++;
}
}
但我正在丢失这些信息
根据这段代码,您的建议是什么?这段代码似乎不能正常工作。什么让您认为删除顶点是不够的?乍一看,的确如此。如果更改顶点顺序,则会打断条带。如果删除一个索引,则缠绕顺序会反转。但如果删除两个索引,它会反转两次,因此不会更改。开始的部分对我来说没有意义。