面向远离摄像机的Three.js飞机与视口对齐

时间:2013-07-16 21:38:21

标签: three.js orientation webgl

我正试图将一个平面朝向远离相机的方向,使其在视口中对齐。

我在相机前面有一个平面,与相机视口完美对齐,我想沿着物体Y轴在相机前面翻转它,无论相机方向如何。

以下内容将使我的飞机朝向相机并适用于任何方向:

target.rotation.copy(camera.rotation);

然后,下面将沿平面的Y轴翻转平面:

target.rotation.y += Math.PI;

到目前为止一切都好吗?除非相机旋转时有一个时髦的倾斜,让我们说它向上看向左侧,略微向右倾斜,平面的翻转是倾斜的,但与相机的方式不同,让我的平面倾斜向左或向右......

我尝试了几件事,例如:

target.rotation.z -= camera.rotation.z;

没什么......谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

所以我遇到的问题是当相机处于负z坐标时。这会导致Y轴上的翻转变得混乱。

所以基本上你会做这样的事情:

    var target = new THREE.Object3D();
    //position
    target.position.copy(s.camera.position);
    target.position.add(THREE.Utils.cameraLookDir(s.camera).multiplyScalar(300));
    //rotation
    target.rotation.copy(s.camera.rotation);
    target.rotation.y += PI;
    target.rotation.z = -s.camera.rotation.z;
    if (s.camera.position.z < 0) {
        target.rotation.z = s.camera.rotation.z;
    }

编辑:

将以下内容添加到程序中的适当位置。

camera.rotation.eulerOrder = 'XZY';
target.rotation.eulerOrder = 'XZY';
似乎解决了之前遇到的倾斜问题! (见下文)

解决:

在某些情况下,翻转的平面以错误的方式倾斜,例如在负z坐标中并且y旋转不等于0时,例如:空间中的点悬停并且看0,0,0。

答案 1 :(得分:0)

这是我找到此页面时所寻找的解决方案(取自this回答):

mesh.lookAt( camera.position );

然后,网格的局部z轴应指向摄像机。