Javascript 使用.Euler';s";setFromVector3“;

Javascript 使用.Euler';s";setFromVector3“;,javascript,vector,three.js,euler-angles,Javascript,Vector,Three.js,Euler Angles,所以输入是三个欧拉角x,y,z,弧度 我想把它转换成以中心为原点的向量位置X,Y,Z 如果有可能得到向量,我想知道如何得到。此外,还赞赏交替数学(sin/cos)解 因此,在这个片段中,AxeHelper表示角度,立方体应该位于基于euler的位置。使用Dat gui实时编辑旋转 //add Axis to represent Euler const axesHelper = new THREE.AxesHelper( 5 ); scene.add( axesHelper ); //add c

所以输入是三个欧拉角x,y,z,弧度 我想把它转换成以中心为原点的向量位置X,Y,Z

如果有可能得到向量,我想知道如何得到。此外,还赞赏交替数学(sin/cos)解

因此,在这个片段中,AxeHelper表示角度,立方体应该位于基于euler的位置。使用Dat gui实时编辑旋转

//add Axis to represent Euler
const axesHelper = new THREE.AxesHelper( 5 );
scene.add( axesHelper );

//add cube to represent Vector
const geometry = new THREE.BoxGeometry( 0.1, 0.1, 0.1 );
const material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );
const cube = new THREE.Mesh( geometry, material );

scene.add( cube );

render()

const gui = new GUI();
const angles={
    degX:0,
    degY:0,
    degZ:0,
}


gui.add( angles, 'degX',0,360,1 ).onChange(function(){
    axesHelper.rotation.x=THREE.MathUtils.degToRad(angles.degX)
    render()
    updateEULtoAngle()

});
gui.add( angles, 'degY',0,360,1 ).onChange(function(){
    axesHelper.rotation.y=THREE.MathUtils.degToRad(angles.degY)
    render()
    updateEULtoAngle()

});
gui.add( angles, 'degZ',0,360,1 ).onChange(function(){
    axesHelper.rotation.z=THREE.MathUtils.degToRad(angles.degZ)
    render()
    updateEULtoAngle()
});

console.log(THREE.MathUtils.radToDeg( axesHelper.rotation.x))
console.log(THREE.MathUtils.radToDeg( axesHelper.rotation.y))
console.log(THREE.MathUtils.radToDeg( axesHelper.rotation.z))



function updateEULtoAngle(){
    let eul= new THREE.Euler(
        THREE.MathUtils.degToRad(angles.degX),
        THREE.MathUtils.degToRad(angles.degY),
        THREE.MathUtils.degToRad(angles.degZ)
        )
    let vec= new THREE.Vector3()
    eul.toVector3(vec)
    console.log(eul,vec)
    cube.position.copy(vec)
}
假视觉表现

相关:但在轴匹配方面存在问题。toVector3()不符合您的要求。它只是将x、y和z角度复制到相应的矢量分量中


我认为您应该看看哪个是使用球坐标的实现。可以用两个角度(φ和θ)和一个半径表示三维空间中的点。然后可以使用这些数据通过或设置
Vector3
的实例。

`vec.setFromSphericalCoords(1,radX,radZ,)`非常接近..它现在正确地跟踪Y轴,但旋转Z绝对没有影响。