双三次Bezier曲面算法

Posted 帅气无敌朋子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双三次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曲面算法的主要内容,如果未能解决你的问题,请参考以下文章

bezier曲线的一个计算问题

08 图形学——Bezier曲线与曲面

de Casteljau算法编写N次bezier曲线的VC程序?

绘制Bezier三角面片

构造一条三次Bezier曲线

bezier曲线的应用