有谁知道如何光线追踪2级的NURBS?

时间:2017-01-04 14:46:18

标签: math glsl raytracing nurbs

我正在编程GLSL光线跟踪一段时间后我做了一些改进,但是从观点来看,我认为光线跟踪曲面而不是很多三角形要快得多,所以我遇到了NURBS。如果我写下等式(扩展 - >只有+, - ,*,/,sqrt和square),我看不到任何方法来获得与光线的交点。

你们中是否有人知道如何对2级NURBS进行光线追踪?

This is my equation (no real NURBS equation):

given :
(A to I are 3d vectors)
A
B
C
D
E
F
G
H
I

a = 2(B-A)
b = 2B-A-C
c = 2(E-D)
d = 2E-D-F
e = 2(H-G)
f =  2H-G-I

(a to f are defined to have the equation a bit shorter later)

o
r
(o and r are 3d vectors again)

searched :
u, v (, t)

to solve :

(A+au-bu²) + ((D+cu-du²)-(A+au+bu²))2v - (2(D+cu-bu²)-(A+au-bu²)-(G+eu-fu²))v² = o+rt
(NURB) = (LINE)

1 个答案:

答案 0 :(得分:1)

有很多关于这个主题的文献,例如https://www.researchgate.net/publication/232644373_Direct_and_fast_ray_tracing_of_NURBS_surfaces。这是一般的NURBS。不确定你是否可以简化二次NURBS的事情。

基本思想是将您的光线视为两个平面 N 的交点。 r = a, M r = b。对于 N M 法向量到平面,a,b常数。如果 r = R (u,v),则为NURB函数。这为您提供了两个要求解决的变量的方程式。

这是我有点不确定的地方。我认为对于二次方NURBS,你可以将函数表示为两个二次多项式的商 R (u,v)= P (u,v)/ Q(u,v ),其中 P 是矢量值,Q只是1D多项式。如果是这样,你要解决的等式是

N P (u,v)= a Q (u,v) M P (u,v)= b Q (u,v)

这是两个变量中的两个样方。您可以使用各种数值方法,如牛顿方法或梯度下降,因为方程是二次方的,它应该相对快速地收敛。

您需要分别考虑每个补丁(0