本文主要是介绍双三次Bezier曲面算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
双三次Bezier曲面
定义
- 双三次Bezier曲面由u,v方向的两组三次Bezier曲线交织而成,控制网格由16和控制点构成。
\[p(u,v)=
\left[\begin{matrix}
u^3 & u^2 & u & 1
\end{matrix}\right]
\left[\begin{matrix}
-1 & 3 & -3 & 1 \\
3 & -6 & 3 & 0 \\
-3 & 3 & 0 & 0 \\
1 & 0 & 0 & 0
\end{matrix}\right]
\left[\begin{matrix}
P_{0,0} &P_{0,1} & P_{0,2} & P_{0,3}\\
P_{1,0} & P_{1,1} & P_{1,2} & P_{1,3} \\
P_{2,0} & P_{2,1} & P_{2,2} & P_{2,3} \\
P_{3,0} & P_{3,1} &P_{3,2} & P_{3,3}
\end{matrix}\right]
\left[\begin{matrix}
-1 & 3 & -3 & 1 \\
3 & -6 & 3 & 0 \\
-3 & 3 & 0 & 0 \\
1 & 0 & 0 & 0
\end{matrix}\right]
\left[\begin{matrix}
u^3\\
u^2 \\
u \\
1
\end{matrix}\right]
\]
\[P(u,v)=UMPM^TV^T
\]
递归细分
曲面片的法向量
- 曲面上一个细分点的\(u\)方向切向量为\(p_u\),\(v\)方向上的切向量为\(p_v\):
\[p_u=\frac{\partial p(u,v)}{\partial u}, p_v=\frac{\partial p(u,v)}{\partial v}
\]
细分点在面上的法向量为:
\[N=\frac{\partial p(u,v)}{\partial v}\times \frac{\partial p(u,v)}{\partial v}
\]
\[ p^`_u(u,v)=
\left[\begin{matrix}
3u^2 & 2u & 1 &0
\end{matrix}\right]MPM^TV^T
\]
\[ p^`_v(u,v)=UMPM^T
\left[\begin{matrix}
3u^2 & 2u & 1 &0
\end{matrix}\right]^T
\]
\[N=p^`_u(u,v)\times p^`_v(u,v)
\]
这篇关于双三次Bezier曲面算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!