RedBook 中的 NURBS 章节表示已弃用,包括实用程序库:“尽管其中一些功能是 GLU 库的一部分,但它依赖于已从核心 OpenGL 库中删除的功能。”
这是否意味着 OpenGL 4.2 实际上缺少用于操作 NURBS 曲线和曲面的 C++ 工具包?有一些商业 3rd 方工具包,但它们不是跨平台的(主要是 windows)
...?
在 OpenGL-3 和更高版本中,您可以使用几何图形和顶点着色器,OpenGL-4 甚至提供了镶嵌着色器。它们提供了实现 GPU 加速 NURBS 和 Bezier 样条曲线和曲面的一切。OpenGL-1.1 的评估器从未在大多数硬件上进行 GPU 加速。所以实际上没有它们你会过得更好。
只需在着色器中实现 NURBS 或 Bezier 求值器并将顶点作为表面采样点发送。
关于您关于红皮书的问题,OpenGL ARB 并未正式弃用 GLU 库,而只是忽略了它。但是,GLU 使用了 OpenGL 3.0 中已弃用并在 OpenGL 3.1 中删除的功能:立即模式渲染、显示列表、矩阵堆栈等等。具体到 NURBS,他们使用了其中的几个功能(假设与您的 OpenGL 实现相关的 GLU 库是基于 GLU 的 SGI 版本,大多数都是),因此这些功能在核心上下文中不起作用。这并不是缺少基于 C++ 的 GLU 库,而是 GLU 使用了从现代 OpenGL 中删除的功能。
@datenwolf - 不完全是。GLU NURBS 库支持修剪曲线,在所有情况下使用 OpenGL 顶点着色器管道(即,仅顶点、曲面细分和几何着色)都很难实现。具体来说,在尊重修剪曲线交叉点的同时支持缠绕规则和正确修剪非常困难(可能结合计算着色器和片段着色器中的花哨工作)。您可以使用 alpha 纹理来破解修剪,但您会遇到锯齿结果,但这是一个快速修复。