Javascript 将投影应用于向量
我正在构建一个简单的3d框架,在将投影矩阵应用于向量时遇到了一个问题 这是我正在使用的“计算我的透视图”项目的代码:Javascript 将投影应用于向量,javascript,math,3d,webgl,Javascript,Math,3d,Webgl,我正在构建一个简单的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,
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:nany:nanz:-无穷大]
我不明白为什么它不返回一个数值?这是计算出的投影矩阵如下所示
-----------------
| 0.5570236439499305, 0, 0, 0 |
| 0, 1.0000000000000002, 0, 0 |
| 0, 0, -1.0618556701030928, -61.855670103092784 |
| 0, 0, -1, 1 |
-----------------
你得到的是
NaN
s和Infinity
s——检查所有变量,确保没有得到任何非数字。除以0(带负数)将返回-无穷大
,因此您的一些值会导致该结果。我通过将向量投影代码更改为以下内容来解决此问题:
var w = ( 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;
从w计算中删除/1似乎解决了这个问题 您输入的值是什么?你的数组应该是一个矩阵。