我正试图让一个平面以相同的方向远离相机,以便在视口中对齐。
我在摄影机前面有一个平面,它与摄影机视口完全对齐,我想在摄影机前面沿着对象Y轴翻转它,而不管摄影机的方向如何。
以下将使我的飞机朝向相机,并适用于任何方向:
target.rotation.copy(camera.rotation);
然后,以下操作将沿平面的Y轴翻转平面:
target.rotation.y += Math.PI;
到目前为止一切都好吗?除了当相机旋转有一个奇怪的倾斜时,假设它向上向左看,稍微向右倾斜,飞机的翻转是倾斜的,但与相机的方式不同,让我看到一个向左或向右倾斜的飞机。。。
我尝试过几种方法,例如:
target.rotation.z -= camera.rotation.z;
什么都没有。。。谢谢你的帮助。
所以我遇到的问题是当相机处于负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。
这是我找到这个页面时正在寻找的解决方案(取自这个答案):
mesh.lookAt( camera.position );
然后,网格的局部z轴应指向摄影机。