【问题标题】:Three.js plane facing away from camera aligned with viewportThree.js 平面背向相机,与视口对齐
【发布时间】:2013-07-15 06:42:10
【问题描述】:

我试图让一个平面远离相机并具有相同的方向,以便它在视口中对齐。

我在相机前面有一个平面,与相机视口完全对齐,我想在相机前面沿对象 Y 轴翻转它,而不管相机方向如何。

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

target.rotation.copy(camera.rotation);

接下来将沿平面的 Y 轴翻转平面:

target.rotation.y += Math.PI;

到目前为止一切都好吗?除了当相机旋转有一个时髦的倾斜时,假设它向上和向左看,稍微向右倾斜,飞机的翻转是倾斜的,但与相机的方式不同,让我的飞机也倾斜向左还是向右……

我已经尝试了几件事,例如:

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

没什么...感谢您的帮助。

【问题讨论】:

  • 您想要一架飞机在镜头前但背对镜头?请问为什么,你想达到什么目的?
  • 我有双面平面,每个平面几何形状有 2 个面和 2 种不同的材料。想想翻牌游戏,也可以在这里查看双面飞机:stackoverflow.com/a/17602666/1060487

标签: three.js orientation webgl


【解决方案1】:

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

mesh.lookAt( camera.position );

然后网格的局部 z 轴应指向相机。

【讨论】:

  • 这根本不能回答问题...寻找背对相机的飞机,请阅读问题。
【解决方案2】:

所以我遇到的问题是相机处于负 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。

【讨论】:

  • 尝试设置相机和目标rotation.eulerOrder = 'XZY' -- i.e., Y is last. Then target.rotation.copy(s.camera.rotation); target.rotation.y += PI;`.
  • 您先生是个学者!该建议与我的回答相结合,似乎可以解决所有情况。您仍然必须更改rotation.z,如上所示,但现在我在几个方向上都没有奇怪的倾斜问题。 Muchos Gracias!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 2019-04-10
相关资源
最近更新 更多