0

我很好奇 NURBS 是如何在 GPU / OpenGL 图形管道中渲染的。我知道 OpenGL 和 GLUT 中有各种调用可以使用 glMap 和 glMapGrid 从编码角度轻松渲染 NURBS 对象,但我没有得到的是 OpenGL 执行此操作的过程。NURBS 背后的想法是使用曲线来定义曲面,而图形管道似乎是围绕三角形光栅化和三角形网格构建的,而 NURBS 是基于弯曲的贝塞尔曲线。

那么,从(高级)管道的角度来看,NURBS 是如何实际渲染的?

4

1 回答 1

5

简单的答案是,它们不在OpenGL 管道中处理,但必须转换为 GL 管道可以处理的东西。一般的方法可能是首先转换为更实时友好的基元,例如贝塞尔补丁,然后在运行时将它们细分为三角形。

镶嵌可以是规则的,将网格映射到补丁上,或者可以基于曲率,在方差较高的地方进一步细分补丁。无论哪种方式,表面仅在某些顶点处被真正评估,并渲染为平面多边形(尽管着色器可用于创建适当平滑变化的法线等)

glMap()et-al(以前用于帮助渲染贝塞尔补丁等)已被弃用,并且不再存在于现代 OpenGL API 中。如今,您将使用着色器来处理曲面细分。

于 2013-02-16T09:38:32.100 回答