0

我正在从 obj、colladae 文件加载模型,如果在导出时所有面都是完美的四边形,则网格的各个面不会三角化以节省内存。

现在我知道这对大多数模型都不起作用,但对于某些网格来说,说一个立方体,我想让它工作的每个面都可以避免一些重复。

我有 2 个使用三角形带或 gl_quads 的选项。

三角形条带的问题是相邻面是连接的,因此它们之间不可能有一些间隙,即使对于一个简单的立方体,输出在外面看起来也是正确的,但是当我进入立方体时,即使启用了背面剔除,我也会看到一些连接立方体正面和背面的杂散三角形基本上是一团乱麻。

但是使用 gl_quads 一切正常,但文档说 quads 在 3.1 中已弃用 [即使我仍然可以使用它 gl 4.0] 所以我的问题是

我是否可以继续使用 gl_quads 从文件中加载网格而不会在将来遇到问题,或者如何在没有整个连接问题的情况下用三角形条替换它?

我发现的一个解决方案是在 for 循环中为每 4 个顶点发出一次绘制调用,但这对于大型网格的性能来说是很糟糕的。

有什么建议么?

4

1 回答 1

1

我们还能使用 GL_QUADS 吗?

是的,如果使用兼容性配置文件 OpenGL 上下文。

我可以继续使用 gl_quads 从文件中加载网格而不会在未来遇到问题吗?

平台可以选择不实施兼容性配置文件。大多数桌面平台一直这样做并且一直这样做。如果现有的实现决定放弃它,我会感到惊讶。

...或者如何在没有整个连接问题的情况下用三角条替换它?

渲染断开的四边形(或一般的三角形条带)的一种方法是在同一点绘制两个顶点,然后移动到下一个条带应该继续的位置,请参阅此问题

更简单的方法是生成一系列索引,如 [1 2 3, 1 3 4, 5 6 7, 5 7 8, ...] 并使用这些索引渲染四边形网格。

于 2021-01-02T11:53:38.530 回答