Javascript ThreeJS:获得旋转,使一个矢量3面对另一个矢量3

Javascript ThreeJS:获得旋转,使一个矢量3面对另一个矢量3,javascript,matrix,three.js,rotation,quaternions,Javascript,Matrix,Three.js,Rotation,Quaternions,我开始学习ThreeJS以及它带来的所有乐趣。我正在使用带框架的ThreeJS。当前任务需要使用ThreeJS计算,这样我就可以将位置和旋转传递给aframe组件。我读过其他的文章,但大部分都是C++。我可以遵循代码,但他们似乎没有使用四元数或三元数 我有一个0,0,0的相机,我想朝着空间中的一个特定点旋转。最终,将有许多点,它们将由用户保存、加载和编辑。矩阵数组似乎是保存此信息的好方法。选择一个点后,我需要旋转相机,使其朝向该方向。最终用户可以更改活动点,从而更改相机的旋转 //我想获得从摄

我开始学习ThreeJS以及它带来的所有乐趣。我正在使用带框架的ThreeJS。当前任务需要使用ThreeJS计算,这样我就可以将位置和旋转传递给aframe组件。我读过其他的文章,但大部分都是C++。我可以遵循代码,但他们似乎没有使用四元数或三元数

我有一个0,0,0的相机,我想朝着空间中的一个特定点旋转。最终,将有许多点,它们将由用户保存、加载和编辑。矩阵数组似乎是保存此信息的好方法。选择一个点后,我需要旋转相机,使其朝向该方向。最终用户可以更改活动点,从而更改相机的旋转

//我想获得从摄影机到光线投射结果的旋转
常量摄影机=新矢量3()
const cast=new Vector3(10,0,-20)
//我从向量到创建了一个四元数
//获取从摄影机到演员的旋转
常量四元数=新四元数().setFromUnitVectors(摄影机,投射)
console.info('quaternion',quaternion.toArray())
//这始终是[-0,0,0,1],与我的x,y,z的施法无关
//我使用四元数创建一个新的矩阵x4
常数矩阵=新矩阵4()。从四元数(四元数)进行旋转
//这总是一样的
//这很有意义,因为四元数总是一样的
console.log(matrix.toArray())
const position=matrix.getPosition()//向量3(0,0,0)
//这只会创建另一个矩阵
//我不知道如何得到旋转

const rotation=new Matrix4().extractRotation(matrix)
如果您只想让相机面对您的点,那么在three.js中有一个函数,
camera.lookAt(point)
。如果要获得旋转但不旋转摄影机,可以使用以下代码:

    var matrix = new THREE.Matrix4();
    matrix.lookAt(camera.position,point,camera.up);
    var rotation = new THREE.Euler(0,0,0,"XYZ");
    rotation.setFromRotationMatrix(rotation);
现在,
旋转
将是从摄影机到目标点的旋转,您知道旋转的类型是
THREE.Euler
,因此,您可以使用
THREE.Euler.setFromRotationMatrix()
设置旋转


我不太了解四元数,事实上,四元数是用matrix4在three.js中实现的。我认为matrix4可以做四元数所能做的任何事情。

如果你只想让相机面对你的点,那么three.js中有一个函数,
camera.lookAt(point)
。如果要获得旋转但不旋转摄影机,可以使用以下代码:

    var matrix = new THREE.Matrix4();
    matrix.lookAt(camera.position,point,camera.up);
    var rotation = new THREE.Euler(0,0,0,"XYZ");
    rotation.setFromRotationMatrix(rotation);
现在,
旋转
将是从摄影机到目标点的旋转,您知道旋转的类型是
THREE.Euler
,因此,您可以使用
THREE.Euler.setFromRotationMatrix()
设置旋转


我不太了解四元数,事实上,四元数是用matrix4在three.js中实现的。我认为matrix4可以做四元数所能做的任何事情。

我接受你的答案,因为如果我能接触到相机,它就会工作。在某种程度上,我不是;我能够注册一个aframe组件,该组件执行DOM查询以获取我的相机,然后读取旋转属性。感谢克雷格的见解@乔丹·帕帕利奥:我总是这样
var-camera=document.querySelector(“a-camera”).components.camera.perspectiveCamera。我试试看!谢谢:)对不起,我弄错了,应该是
var-camera=document.querySelector(“a-camera”).components.camera.camera
,PerspectiveCamera是一种类型。我接受你的回答,因为如果我能够访问摄像机,它会工作的。在某种程度上,我不是;我能够注册一个aframe组件,该组件执行DOM查询以获取我的相机,然后读取旋转属性。感谢克雷格的见解@乔丹·帕帕利奥:我总是这样
var-camera=document.querySelector(“a-camera”).components.camera.perspectiveCamera。我试试看!谢谢:)对不起,我弄错了,应该是
var-camera=document.querySelector(“a-camera”).components.camera.camera
,透视照相机是一种类型。