【问题标题】:Opengl : Can we still use GL_QUADS?Opengl:我们还能使用 GL_QUADS 吗?
【发布时间】:2021-01-02 07:07:58
【问题描述】:

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

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

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

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

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

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

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

有什么建议吗?

【问题讨论】:

  • 如果您使用的是兼容性配置文件OpenGL Context,您可以像任何其他已弃用的功能(例如立即模式)一样继续使用 QUADS
  • 但这是一个好的做法/对性能有好处吗?我应该尝试用 gl_triangle 条替换它作为一个好的衡量标准还是没有性能影响?
  • 由于它已被弃用,这不是一个好习惯。关于表演,我无话可说。性能与硬件和驱动程序有关。你必须测量它。
  • 你不能。使用三角形和索引。我问过类似的问题:How to convert large arrays of quad primitives to triangle primitives?

标签: opengl quad gl-triangle-strip


【解决方案1】:

我们还能使用 GL_QUADS 吗?

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

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

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

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

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

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

【讨论】:

  • 实际工作还不错。从链接的答案中,我所要做的就是复制我从文件中读取的每个面的第一个和最后一个顶点[或者在索引几何的情况下,它们的索引],这就是用三角形条带绘制的单独的非连接四边形。我不知道我是否应该将此标记为已接受的答案,因为退化的条带在线框模式下显示为线条,因此它可以 50/50 工作?。
  • 不知道社区的其他人是怎么想的?
  • @Syncit 线框模式问题更大。即使使用索引三角形来消除退化的条带,您最终也会在每个四边形上形成一条对角线,这对于线框 GL_QUADS 不应该存在。将带有索引的 GL_LINES 分开会看起来很重要,但是您不能依赖 glPolygonMode() 来为您完成这项工作。
  • 好吧,我想这也无济于事,除了一个人只会将线框模式用于建模而不是用于现实世界的应用程序,即使我这样做了,我也会坚持使用三角形。结案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多