gluTess* 函数是不是已弃用?

Posted

技术标签:

【中文标题】gluTess* 函数是不是已弃用?【英文标题】:Are gluTess* functions deprecated?gluTess* 函数是否已弃用? 【发布时间】:2017-01-10 23:32:26 【问题描述】:

我正在开发一个 OpenGL 项目,并且正在寻找三角测量/细分功能。我看到很多对GLUtessellator 和相关gluTess* 函数的引用(例如here)。

我也在使用 GLFW,它在its guides 中一遍又一遍地重复:

GLU 已被弃用,不应在新代码中使用,但一些旧代码需要它。

这是否包括细分功能?研究一个不同的库来在 OpenGL 中创建复杂的多边形是否明智?

【问题讨论】:

【参考方案1】:

GLU 是一个库。虽然它进行 OpenGL 调用,但它实际上并不是 OpenGL 的一部分。它不是由 OpenGL 规范定义的。因此该规范不能“弃用”或删除它。

不过,GLU 的大部分工作都是通过从核心 OpenGL 中移除的 OpenGL 函数完成的。如果您尝试使用核心 OpenGL 内容,则不应使用 GLU。

【讨论】:

你没有真正回答我的问题。根据您所写的内容,我认为 GLUtessellator 不被视为核心 OpenGL,因此,为此目的使用 GLU 会很好吗? GLFW 声明似乎更广泛:整个 GLU 库已被弃用。因此我很困惑。 @NealKruis:我认为“如果您尝试使用核心 OpenGL 内容,则不应使用 GLU。”非常清楚。 GLUtessellator 不是也从来不是核心OpenGL;像所有 GLU 的东西一样,它来自一个 调用 OpenGL 的 external 库。但它调用的是从核心 OpenGL 中删除的函数。所以你不能在核心 OpenGL 中使用 GLU 的东西。我不明白这里的混乱来自哪里。 对不起,我的意思是“我想 GLUtessellator 不使用核心 OpenGL。”我认识到 OpenGL 和 GLU 库之间的区别。因此,在我看来,您对我的问题的回答是:“是的,GLUtesselation 功能应与 GLU 库的其余部分一起被视为已弃用。您应该在其他地方寻找曲面细分/三角剖分库。” @NealKruis:人们总是把“弃用”这个词的定义弄错,显然包括 GLFW 的人。 “已弃用”的意思是“仍然完全合法,但可能很快就会消失,所以停止使用它”。但这里不是这样。 GLU 所依赖的 OpenGL 函数并未“弃用”;它们已从核心 OpenGL 中移除。它们不再是合法的核心 OpenGL 函数。所以称其为“已弃用”是错误的。它在核心 OpenGL 环境中根本不起作用。【参考方案2】:

这里有一点补充。这里应该注意的是,对于原始的gluTess* 实现,还有更现代的替代方案,它们在简单性和通用性方面遵循原始概念。

一个值得注意的替代方案是Libtess2,它是原始 libtess 的重构版本。

https://github.com/memononen/libtess2

它使用了一个与 OpenGL 顶点数组 API 大致相似的不同 API。但是,libtess2 似乎“按数量级”优于原始 GLU 参考实现。 ;-)

当前官方的 OpenGL 4.0 Tessellation 原理需要明确兼容的 GPU 硬件。 (这很可能适用于所有 DirectX 11 和更新的兼容硬件。)有关当前 OpenGL Tessellation 概念的更多信息,请参见此处:

https://www.khronos.org/opengl/wiki/Tessellation

【讨论】:

【参考方案3】:

这种新算法在需要网格质量、鲁棒性、Delauney 和其他优化时会更好。

对于 gluTess 需要多个的情况,它会在一个循环中生成网格和轮廓。 它支持更多模式,但与 gluModies 100% 兼容。 它针对 C++ x86/x64 进行了编程和优化,具有可安装的 COM 接口。 它也可以在没有 COM 注册的情况下从 C# 中使用。 相同的实现也可用作 C# 版本,其速度大约是其一半(最先进的 NET Framwork 4.7.2)。

它使用支持不同格式的 Variant 类型进行计算:float、double 和 Rational,以实现无限的精度和稳健性。在这种模式下,机器 Epsilon = 0,不会出现错误。绝对精度。

如果您想使用 gluTess 算法获得类似的质量,则需要 3 倍的时间,包括去除 T 形接头和优化网格的复杂校正。

代码免费在:

https://github.com/c-ohle/CSG-Project

【讨论】:

以上是关于gluTess* 函数是不是已弃用?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 已弃用:each() 函数已弃用 [重复]

window.requestFileSystem 方法是不是已弃用?

更新 Swift 中已弃用的 Firebase 函数

getresuid 在 c99 中是不是已弃用?

已弃用:each() 函数已弃用。 C:\xampp\htdocs\phprojekt\library\Zend\Cache\Backend.php 在第 66 行 [重复]

即使已弃用,在 Display 上使用 .getWidth 是不是安全