由于
的异常,我有baisc问题,我正在努力使用ThreeJs api解决未捕获的TypeError:无法读取未定义的属性“元素”
从本质上讲,这是一个非常基本的问题,很可能归因于对Threejs api的某些不当使用(也许我对网格物体.matrix表示了错误的假设/理解)。
我要解决的问题完全是基本的。
我有一些偏移坐标(x,y,z),其中(x,y,z)是vluae 在世界坐标系中。 让我们称此x,y,z偏移坐标为“方法”的概念。
这种方法表示与任意物体的偏移距离,我们可以称其为“ SomeObject”。
最终目标是,最好将此距离表示为空中球体,并将其作为SomeObject的子对象添加到场景中。
很明显,我不能简单地将这些(x,y,z)表示为现实世界坐标中的偏移量,而只能将我的球体添加为:
Approach.x = x;
Approach.y = y;
Approach.z = z;
SomeObject.add(appraoch)
上面的伪代码是完全错误的。 上面的代码没有意义,仅当SomeObject面向世界的角度为0度时才有效。在所有其他情况下,SomeObject的X,Y,Z轴不会与世界坐标系的位置重合,并且Sphere会出现在我对象的错误一侧。 简而言之,必须将此偏移量从世界坐标转换为SomeObject坐标。
从数学上来说,我的意思是微不足道的。 要解决的问题只不过是下面的同构变换矩阵乘法。
meshApproachTo2SomecObject = wolrd2SomeObjectMatrix X meshApproach2World.matrix;
就这样,游戏结束了。
我尝试运行的代码如下:
var whitekMaterial = new THREE.MeshBasicMaterial( {color: 0xFFFFF} );
var dummyGeometry = new THREE.SphereGeometry( 50);
var meshApproach2World = new THREE.Mesh( dummyGeometry, whitekMaterial );
meshApproach2World.position.x = 560;
meshApproach2World.position.y = -760;
meshApproach2World.position.z = 381;
meshApproach2World.updateMatrix();
// meshApproach2World.matrix.getPosition()
var someOject2World = new THREE.Mesh( dummyGeometry, whitekMaterial );
someOject2World.position.x = 0;
someOject2World.position.y = 0;
someOject2World.position.z = 0;
someOject2World.rotation.z = Math.PI/2;
someOject2World.updateMatrix();
// compute the COORDINATES of the APPRORACH OBJECT Relative to the "SOmeObject
// Mathmathicall APPROACH2SomeObject= World2SomeObject X Apporache2World
// Therefore
var wolrd2SomeObjectMatrix = someOject2World.matrix.getInverse();
// Do later
// ApproachOffset2SomecObjectMatrix = wolrd2SomeObjectMatrix X ApproachOffset2WorldMatrix;
很明显,如果在我的SomeObject上方的练习中,相对于世界坐标系旋转了90度,则(x,y,z)的转换=(560,-760,381) 应该返回:
coordinates = CalcCoordinates [x = -760.0,y = -560.0,z = 381.0], orientation = CalcOrientation [aYawDegrees = 270.0,bPitchDegrees = -0.0, cRollDegrees = 0.0]
x2 = Y1 Y2 = -X1 Z2 = Z1
但是,当我尝试获取相对于某个对象的世界坐标时,我会卡住。
当我尝试获取逆矩阵时:
var wolrd2SomeObjectMatrix = someOject2World.matrix.getInverse();
Threejs爆炸了。
我认为,当您在threejs中具有网格时,MATRIX会代表该对象相对于世界的HTM。
因此,您应该能够获得4x4网格矩阵并求逆。 相反,它爆炸了……出现了一个不太容易理解的异常。
感谢您的帮助。