0

シンプルな 3D フレームワークを構築していますが、射影行列をベクトルに適用するときに問題が発生しました。

これは、私のパースペクティブプロジェクトを計算するために使用しているコードです:

var t = near * Math.tan(fov * Math.PI / 180);
var n = far - near;

//  width   height      near                         far
this.setValues( near / (t * aspect),    0,             0,                  0,
                        0,           near / t,         0,                  0,
                        0,              0,      -(far + near) / n, -(2 * far * near) / n,
                        0,              0,            -1,                  1 );

そして、次のように投影をベクトルに適用します。

var w = 1 / ( x * e[3] ) + ( y * e[7] ) + ( z * e[11] ) + e[15];

this.x  = (x * e[0] + y * e[4] + z * e[8] + e[12]) * w;
this.y  = (x * e[1] + y * e[5] + z * e[9] + e[13]) * w;
this.z  = (x * e[2] + y * e[6] + z * e[10] + e[14]) * w;

問題は、ベクトルが常に [ X: NaN Y: NaN Z: -Infinity ] になることです。

なぜ数値を返さないのか理解できませんか? これは、計算された射影行列が以下のように見えるものです。

 -----------------
 | 0.5570236439499305, 0, 0, 0 |  
 | 0, 1.0000000000000002, 0, 0 | 
 | 0, 0, -1.0618556701030928, -61.855670103092784 |
 | 0, 0, -1, 1 | 
 ----------------- 
4

2 に答える 2

0

NaNs とs を取得していInfinityます -- すべての変数をチェックし、そこに非数値が取得されていないことを確認してください。0 で割ると (負の数で) が返さ-Infinityれるため、一部の値はその結果になります。

于 2013-08-13T16:53:29.263 に答える