Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何查找对象相对于摄影机的旋转_Javascript_Three.js_Rotation - Fatal编程技术网

Javascript 如何查找对象相对于摄影机的旋转

Javascript 如何查找对象相对于摄影机的旋转,javascript,three.js,rotation,Javascript,Three.js,Rotation,我很难计算出一个物体相对于摄像机的角度,我正试图用一个摄像机对一艘宇宙飞船进行编码。我的相机跟在船的后面,但相机的旋转有时有点偏离,以下是我的相机代码: var focalpoint = new THREE.Vector3( actor.position.x, actor.position.y, actor.position.z + 14 ); //move camera closer to the object if it gets too far away var

我很难计算出一个物体相对于摄像机的角度,我正试图用一个摄像机对一艘宇宙飞船进行编码。我的相机跟在船的后面,但相机的旋转有时有点偏离,以下是我的相机代码:

var focalpoint = new THREE.Vector3(
    actor.position.x,
    actor.position.y, 
    actor.position.z + 14
);

//move camera closer to the object if it gets too far away
var calculatedDistance = distance(camera.position, actor.position);
var cameraTolerance = calculatedDistance - this.cameradistance.min;
var closingvelocity = cameraTolerance * 0.02;

if(calculatedDistance > this.cameradistance.max)cameravelocity.z = -closingvelocity;

if(calculatedDistance < this.cameradistance.min)cameravelocity.z = closingvelocity;

//slow down the camera
if(calculatedDistance < this.cameradistance.max && calculatedDistance > this.cameradistance.min){
    cameravelocity.z = 0;
}

camera.translateX( cameravelocity.x );
camera.translateY( cameravelocity.y );
camera.translateZ( cameravelocity.z );
camera.lookAt(focalpoint);
camera.rotation.z = 0;
var focalpoint=new THREE.Vector3(
演员.position.x,
演员,位置,y,
演员。位置。z+14
);
//如果摄影机离对象太远,请将其移近
var calculatedDistance=距离(摄像机位置、演员位置);
var cameraTolerance=计算距离-this.camerRadiance.min;
var closingvelocity=cameraTolerance*0.02;
如果(calculatedDistance>this.CameradInstance.max)cameravelocity.z=-closingvelocity;
如果(计算距离this.camerRadiance.min){
cameravelocity.z=0;
}
camera.translateX(cameravelocity.x);
camera.translateY(cameravelocity.y);
camera.translateZ(cameravelocity.z);
摄像机。注视(焦点);
摄像机旋转z=0;

现在我需要限制宇宙飞船(演员)的旋转,这样它就不会开始朝着相机飞去,并解决相机翻转的问题。因此,我需要找出如何找到演员相对于相机的旋转,我完全不知道从哪里开始计算,甚至不知道如何计算。

通过反转目标的旋转,然后像这样乘以,找到了答案:
var rotationOffset=actor.quaternion.clone().inverse();

var rotation=camera.quaternion.clone().multiply(rotationOffset)

我做了更多的挖掘,结果发现lookAt函数引起了一些麻烦。看来我前面还有很多数学问题。