ここで述べるパラメトリック曲面は、3次元空間上の4つの点と その点での法線を指定する事で定義された曲面である。 この曲面上の点は2つのパラメータ u, v により指定される。 つまり、パラメトリック曲面上の点は PC(u,v), 0 <= u <= 1, 0 <= v <= 1 として表すことができる。 また、ここで用いる曲面関数は u, v それぞれに対して3次のもの(ベゼェ曲面) を使用する。 一般には、オブジェクトをメッシュで表すと複数の四角形ができるが、その 四角に対して、このパラメトリック曲面を使用し、全体として滑らかなオブ ジェクトを生成したい時に用いられる。 この四角形をパッチと言う。 例えば、球面は8個のパッチで近似できる。この場合のパッチは3点で指定 するものが8個になるが、上記の4点でのパッチで、2点を同じものにする 事で実現する。 注意: レンダリング段階で、このパラメトリック曲面を扱うのは稀で、普通はモデリング 段階で用いる。 モデリング段階で、メッシュの各点の位置や法線(あるいは接線)を操作し、 なるべく均等に曲面を分割する為に再帰的手法を用い、最終段階では細かな 三角形ポリゴンにしてからレンダリングするのが通常の方法である。 |
* : 内積 x : 外積 |A| : Aのサイズ、すなわちsqrt(A*A) |
vr(A,B) = B - (A * B) / (|A|^2) * A VR(A,B) = vr(A,B) / |vr(A,B)| |
位置 | 法線 | |
点1 | P1 | N1 |
点2 | P2 | N2 |
点3 | P3 | N3 |
点4 | P4 | N4 |
R1 = P1 + VR(N1, P2 - P1) * |N1| T1 = P1 + VR(N1, P4 - P1) * |N1| Q2 = P2 + VR(N2, P1 - P2) * |N2| T2 = P2 + VR(N2, P3 - P2) * |N2| Q3 = P3 + VR(N3, P4 - P3) * |N3| S3 = P3 + VR(N3, P2 - P3) * |N3| R4 = P4 + VR(N4, P3 - P4) * |N4| S4 = P4 + VR(N4, P1 - P4) * |N4| U1 = R1 + T1 - P1 U2 = Q2 + T2 - P2 U3 = Q3 + S3 - P3 U4 = R4 + S4 - P4 |
P1 | R1 | Q2 | P2 |
T1 | U1 | U2 | T2 |
S4 | U4 | U3 | S3 |
P4 | R4 | Q3 | P3 |
(1-v)^3 | 3 * (1-v)^2 * v | 3 * (1-v) * v^2 | v^3 |
-3 * (1-v)^2 | 3 * (1 - 3 * v) * (1 - v) | 3 * (2 - 3 * v) * v | 3 * v ^ 2 |
(1 - u)^3 |
3 * (1 - u)^2 * u |
3 * (1 - u) * u^2 |
u^3 |
-3 * (1 - u)^2 |
3 * (1 - 3 * u) * (1 - u) |
3 * (2 - 3 * u) * u |
3 * u^2 |
位置の関数は以下のとおり PC(u,v) = A(v) * M * B(u) 法線の関数は以下のとおり PC'(u,v) = (A'(v) * M * B(u)) x (A(v) * M * B'(u)) 御覧のように、この法線は外積で求めているので結果の大きさを 正規化する必要がある。 両関数とも u, v の範囲は 0 <= u <= 1, 0 <= v <= 1 |