Mathematics for 3D Game Programming and Computer Graphics (6)
Eric Lengyel, Mathematics for 3D Game Programming and Computer Graphics, Third Edition, 2011.
Chapter 8 'Visibility Determination'、8.2 'Bounding Volume Tests'の、楕円体のテスト方法(8.2.2 Bounding Ellipsoid Test)に、感銘を受けました。要は、視野円錐台と(view frustum)、境界楕円体(bounding ellipsoid)との干渉テストですが、この計算、この本でしか見たことない。だいたい、境界に楕円体をサポートしているツールって、ありましたっけ?
ここで紹介されている方法は、数学的にもさまざまな練習になります。流れをざっと書くと、まず楕円体の表面上の点Pを、楕円体の軸ベクトル(三つで既知、R、S、Tとする)、およびふたつの角度(これは未知)で表します(極座標の楕円体拡張)。そして、法線ベクトルNを持つ面と接するという条件(点PのNへの射影の長さ(reff)が最大となる)で、定式化してやります。すなわち、
reff = (P, N)の最大値 --- (1)
ここからは最大値を求める話です。(P, N)を、ふたつの角度で偏微分してやって、角度を求めます。三角関数が出てくるので、計算は結構ややこしい。理解はできますが、自力ではめげそう...
そうすると、
reff = √((R, N)2 + (S, N)2 + (T, N)2) --- (2)
と計算されます(同書では、式(8.40))。結果は簡単でめでたしです。
これはよいのですが、式(2)は恐ろしく簡単です。なので、楕円体がきちんと理解されていれば、同書で説明されているようなややこしい計算は必要なく、<洞察>により式(2)が閃くのではないか、と思われました。
それで、ちょっと<洞察>してみたのですが、残念ながら私の<洞察力>では、式(2)が出てきません。もう少し<洞察>してみます。
Chapter 8 'Visibility Determination'、8.2 'Bounding Volume Tests'の、楕円体のテスト方法(8.2.2 Bounding Ellipsoid Test)に、感銘を受けました。要は、視野円錐台と(view frustum)、境界楕円体(bounding ellipsoid)との干渉テストですが、この計算、この本でしか見たことない。だいたい、境界に楕円体をサポートしているツールって、ありましたっけ?
ここで紹介されている方法は、数学的にもさまざまな練習になります。流れをざっと書くと、まず楕円体の表面上の点Pを、楕円体の軸ベクトル(三つで既知、R、S、Tとする)、およびふたつの角度(これは未知)で表します(極座標の楕円体拡張)。そして、法線ベクトルNを持つ面と接するという条件(点PのNへの射影の長さ(reff)が最大となる)で、定式化してやります。すなわち、
reff = (P, N)の最大値 --- (1)
ここからは最大値を求める話です。(P, N)を、ふたつの角度で偏微分してやって、角度を求めます。三角関数が出てくるので、計算は結構ややこしい。理解はできますが、自力ではめげそう...
そうすると、
reff = √((R, N)2 + (S, N)2 + (T, N)2) --- (2)
と計算されます(同書では、式(8.40))。結果は簡単でめでたしです。
これはよいのですが、式(2)は恐ろしく簡単です。なので、楕円体がきちんと理解されていれば、同書で説明されているようなややこしい計算は必要なく、<洞察>により式(2)が閃くのではないか、と思われました。
それで、ちょっと<洞察>してみたのですが、残念ながら私の<洞察力>では、式(2)が出てきません。もう少し<洞察>してみます。
スポンサーサイト