我很好奇NURBS是如何在图形处理器/ OpenGL图形管道中渲染的。我知道在OpenGL和GLUT中有各种调用,可以使用glMap和glMapGrid从编码的角度轻松渲染NURBS对象,但我不了解的是OpenGL执行此操作的过程。NURBS背后的思想是使用曲线来定义曲面,而图形管道似乎是围绕三角形光栅化和三角形网格构建的,而NURBS基于弯曲的Bezier曲线。
那么,从(高级)管道的角度来看,NURBS实际上是如何呈现的呢?
发布于 2013-02-16 17:38:32
简单的答案是,它们不是在OpenGL管道中处理的,而是必须转换为GL管道可以处理的内容。一般的方法可能是首先转换为更实时友好的基本体,如bezier面片,然后在运行时将这些面片细分为三角形。
细分可以是规则的,将栅格映射到面片上,也可以基于曲率,在方差较高的地方细分面片。无论哪种方式,仅在某些顶点对曲面进行真实求值,并将其渲染为平面多边形(尽管着色器可用于创建适当平滑变化的法线,等等)。
glMap()等人(以前用于帮助渲染贝塞尔面片等)已被弃用,并且不再存在于现代OpenGL应用程序接口中。现在,您可以使用着色器来处理镶嵌。
https://stackoverflow.com/questions/14907454
复制相似问题