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