Opengl:我们还能使用 GL_QUADS 吗?

Opengl : Can we still use GL_QUADS?

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

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

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

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

但是 gl_quads 一切正常,但是 docs 说 quads 在 3.1 中被弃用 [尽管我仍然可以使用它 gl 4.0] 所以我的问题是

我是否可以继续使用 gl_quads 从文件中加载网格,而不会 运行 将来出现问题,或者我如何将其替换为三角形条而不会出现整个连接问题?

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

有什么建议吗?

Can we still use GL_QUADS?

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

Can I continue using gl_quads for loading meshes from files without running into problems in the future...?

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

...or how can I replace it with triangle strips without the whole connectivity issue?

渲染断开的四边形(或一般的三角形带)的一种方法是在同一点绘制两个顶点,然后移动到下一个带应该继续的地方,参见 this question

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