Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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

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 - Fatal编程技术网

Javascript 在世界空间中旋转具有旋转父对象的对象?

Javascript 在世界空间中旋转具有旋转父对象的对象?,javascript,three.js,Javascript,Three.js,我使用此函数在世界空间中旋转对象Y轴: function rotateWorldYAxis( obj, angle ) { quat.setFromAxisAngle( new THREE.Vector3(0,1,0), angle ); obj.quaternion.multiplyQuaternions(quat,obj.quaternion); obj.updateMatrixWorld(); } 但它不适用于已旋转父对象的对象 下面是小提琴的例子: 父对象未旋

我使用此函数在世界空间中旋转对象Y轴:

function rotateWorldYAxis( obj, angle ) {
    quat.setFromAxisAngle( new THREE.Vector3(0,1,0), angle );
    obj.quaternion.multiplyQuaternions(quat,obj.quaternion);
    obj.updateMatrixWorld();
}
但它不适用于已旋转父对象的对象

下面是小提琴的例子:

  • 父对象未旋转时的正确行为:
var SCREEN\u WIDTH=window.innerWidth;
var SCREEN_HEIGHT=window.innerHeight;
var容器,stats;
摄像机、场景、控件;
var渲染器;
var quat=新的三个四元数();
变量轴=新的3.Vector3();
init();
制作动画();
函数init(){
container=document.createElement('div');
文件.正文.附件(容器);
//摄像机
摄像机=新的三个透视摄像机(30,屏幕宽度/屏幕高度,10000);
摄像机位置设置(0,0,500);
场景=新的三个。场景();
添加(新的三个环境光(0xaaaa));
var灯=新的三点灯(0xffffff);
灯。位置。设置(100100);
场景。添加(灯光);
renderer=new THREE.WebGLRenderer({antialas:true});
renderer.setPixelRatio(window.devicePixelRatio);
设置大小(屏幕宽度、屏幕高度);
renderer.doElement.style.position=“relative”;
container.appendChild(renderer.doElement);
//____________________________//
立方体=新的三个网格(
新的三立方测量法(50100,50),
新的三种材料
);
cube.rotation.set(Math.PI/3,0,0);
cubeParent=new THREE.Object3D();
cubeParent.rotation.set(0,0,0)//未旋转父对象
cubeParent.add(多维数据集)
场景.添加(立方体租金)
//____________________________//
var grid=新的3.Mesh(
新的三个平面几何体(200200,10,10),
新的3.MeshBasicMaterial({线框:true})
)
grid.position.y=-100
grid.rotation.x=Math.PI/2
场景.添加(网格);
addEventListener('resize',onWindowResize,false);
}
函数旋转旋转轴(obj,角度){
从轴角度(新的三个向量3(0,1,0),角度)设置四元;
四元数。多重四元数(四元数,四元数);
obj.updateMatrixWorld();
}
函数animate(){
请求动画帧(动画);
render();
旋转旋转轴(立方体,0.01)
}
函数render(){
渲染器。渲染(场景、摄影机);
}
函数onWindowResize(事件){
屏幕宽度=window.innerWidth;
屏幕高度=窗内高度;
设置大小(屏幕宽度、屏幕高度);
camera.aspect=屏幕宽度/屏幕高度;
camera.updateProjectMatrix();
}


这是正确的行为

不是三个用户都能猜到的。您希望反向父yAxis围绕
var inv=cubeParent.matrix.getInverse(cubeParent.matrix).elements旋转;四元设置从轴角度(新的三个向量3(inv[4],inv[5],inv[6]),角度)虽然我确信有一种很好的方法可以在三种情况下实现这一点,这就是为什么我不将其作为答案添加。感谢您的答案,但它不起作用:三种情况下的用户都没有猜到。您希望反向父yAxis围绕
var inv=cubeParent.matrix.getInverse(cubeParent.matrix).elements旋转;四元设置从轴角度(新的三个向量3(inv[4],inv[5],inv[6]),角度)虽然我确信有一个很好的方法可以在三个部分中完成这一点,这就是为什么我不将此作为答案添加。感谢您的回答,但它不起作用: