gpt4 book ai didi

java - 三角带三角剖分

转载 作者:行者123 更新时间:2023-12-01 18:38:23 25 4
gpt4 key购买 nike

我想将三角形​​带的顶点转换为独立的三角形,以便我可以使用 OpenGL 的 GL_TRIANGLES 图元类型来绘制它们。

但是,以下两个代码都不起作用,我不明白为什么:

for(int i = 0; i < triangleStripVertices.size() - 2; i++) {
triangleVertices.add(triangleStripVertices.get(i));
triangleVertices.add(triangleStripVertices.get(i + 1));
triangleVertices.add(triangleStripVertices.get(i + 2));
}

这个也不起作用:

for(int i = 0; i < triangleStripVertices.size() - 2; i++) {
if(i % 2 == 1) {
triangleVertices.add(triangleStripVertices.get(i));
triangleVertices.add(triangleStripVertices.get(i + 2));
triangleVertices.add(triangleStripVertices.get(i + 1));
} else {
triangleVertices.add(triangleStripVertices.get(i));
triangleVertices.add(triangleStripVertices.get(i + 1));
triangleVertices.add(triangleStripVertices.get(i + 2));
}
}

我在这里做错了什么?

损坏的输出如下所示:

broken output

最佳答案

您的尝试已经非常接近了,但您还缺少一点。三角形带具有“最旧的顶点”的概念,即处理三角形后将被删除的顶点。由于需要保持带中三角形的面度(有时称为顶点缠绕)相同,最旧的顶点不是列表中的下一个顶点;它在列表中最旧的和第二旧的之间翻转。

例如,假设您有一个顶点索引列表

GLuint indices = { 0, 1, 2, 3, 4, 5 };

然后您使用该列表调用glDrawElements()。将使用上面列表中的顶点索引渲染以下三角形:(0, 1, 2), (2, 1, 3), (2, 3, 4), (4, 3, 5)。

因此,要将三角形带展开为一组三角形,您需要考虑到这一点。这是一个可以完成您想要的操作的代码 fragment :

for (int i = 0; i < triangleStripVertices.size() - 2; i++) {
if (i % 2) {
triangleVertices.add(triangleStripVertices.get(i + 1));
triangleVertices.add(triangleStripVertices.get(i));
triangleVertices.add(triangleStripVertices.get(i + 2));
}
else {
triangleVertices.add(triangleStripVertices.get(i));
triangleVertices.add(triangleStripVertices.get(i + 1));
triangleVertices.add(triangleStripVertices.get(i + 2));
}
}

关于java - 三角带三角剖分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com