旋转,然后翻译为three.js

时间:2011-09-24 19:38:09

标签: 3d three.js

我想旋转一个用THREE.PlaneGeometry创建的平面,但是我遇到了一些问题。

  1. 使用FirstPersonCamera的相机前面的轴是什么?
    我自己的测试显示X前/后,Y-上/下,Z-左/右,我对吗?
  2. 为了用这些平面制作一个立方体,我使用下面的代码(剪切仅用于显示X轴面)。由于我不理解的原因,在块和正交基础之间存在小的空间。似乎在翻译后应用旋转。我该如何解决?
  3. function lol() {
        var mesh = new THREE.Mesh(xFacesGeometry, material);
        mesh.matrix.setRotationFromEuler(new THREE.Vector3(0, ath.PI / 2),  'XYZ');
        mesh.matrix.setPosition(new THREE.Vector3(x * 20 + 10, y * 20 + 10, z * 20 + 10));
        mesh.matrixAutoUpdate = false;
    }
    lol(0, 0, 0);
    lol(1, 0, 0);
    

    此处为完整代码(使用ctrl +单击向后移动):http://jsfiddle.net/u8ZHC/

2 个答案:

答案 0 :(得分:0)

尝试在翻译位置之前更新矩阵:

mesh.matrix.setRotationFromEuler(new THREE.Vector3(0, Math.PI / 2),  'XYZ');
mesh.updateMatrix();
mesh.translate(...);

答案 1 :(得分:0)

回答这个问题:指定必须应用翻译/轮换的顺序的最佳方法是使用多个节点。

var pitchNode = new THREE.Object3D( );
var yawNode = new THREE.Object3D( );
var rollNode = new THREE.Object3D( );
var positionNode = new THREE.Object3D( );

// here come the order
scene.add( pitchNode );
pitchNode.add( yawNode );
yawNode.add( rollNode );
rollNode.add( positionNode );