2010-10-04 88 views
3

你能用DirectX 11在GPU上渲染NURBS吗?我一直在阅读当前趋势来渲染这些表面,但我在NURBS上看不到任何内容。DirectX 11上的NURBS?

我找到了一些相关的参考资料,但没有什么可靠的......比如Charles Loop和Scott Schaefer编着的“用双三次补丁逼近Catmull-Clark细分曲面”。

    -

回答

2

有2个演示在DirectX SDK; SubD10,SubD11分别用于本文中描述的技术的DirectX 10/11实现。

0

快速回答是否定的。 NURBS非常复杂,编写高效的着色器很难在GPU上渲染它们。我认为这是可能的,但通常不会这样做,因为有更好的方法。

更好的方法是直接在GPU上渲染Bézier补丁,因为任何NURBS都可以转换为一组相连的Bézier补丁。要生成贴片,您需要在每个结上执行结插入,直到达到与度数相同的多重性;例如在立方NURBS上,你会在每个结上执行结插入,直到每个结都是三结。然后可以将NURBS的控制点视为连接的Bézier网格。

这是一个特定于着色器的问题:当您对Bézier贴片进行三角测量时,共享边界的贴片也共享完全相同的曲面细分设置,否则由于曲面细分会在NURBS曲面出现裂缝不匹配。如果使用固定镶嵌设置,这不是问题,但如果使用视图相关镶嵌,则需要确保每个镶边边界具有独立计算的“视图相关”镶嵌细分,以便相邻的镶边匹配。