Three.js 透视相机 X 轴翻转

3

我有一个场景,有两个相机,一个是正交相机,另一个是透视相机。当正交相机处于活动状态时,一切看起来很正常,但是透视相机显示的场景X轴上下颠倒了,有什么办法可以解决吗?我的两个相机都是正常添加到场景中的:

最初的回答:

您可以尝试将透视相机的旋转角度设置为180度,这应该会翻转它的视图并使其与正交相机匹配。

camera = new THREE.PerspectiveCamera(50,4 / 3,0.1,10000);
cameraO = new THREE.OrthographicCamera(-2, 2, -2, 2, 1, 100);

这是一个例子:通过按下“P”和“O”键切换摄像头。最初的回答:https://jsfiddle.net/g7juxm2q/12/
1个回答

6
问题不在于透视相机的轴被翻转了。问题在于声明正交相机时使用了负的top参数和正的bottom参数。通常情况下,top应该是+y,而bottom应该是-y,详见 OrthoCam文档
// Docs:
OrthographicCamera( left, right, top, bottom, near, far );

// Your implementation has top as -2, bottom as +2
THREE.OrthographicCamera(-2, 2, -2, 2, 1, 100);

谢谢,我的错,我修复了,但现在的问题是为什么红轴指向负方向? - undefined
这是因为当你使用cameraO.position.set(0,10, 0)时,你将相机设置为自上而下的视角。如果你想要它直视前方,你应该使用cameraO.position.set(0, 0, 10),因为位置遵循(x, y, z)的顺序。我建议你花一些时间在Threejs编辑器中玩耍,以熟悉坐标轴:https://threejs.org/editor/ x: 左右,y: 上下,z: 前后 - undefined
1
啊,这是由于摄像机指向一个90度角的正下方时出现的问题。这被称为万向锁,并且当摄像机不再知道哪个方向是“上”时,会产生奇怪的结果。在现实生活中也会发生这种情况,当你凝视着地面时,就无法确定哪个方向是“上”了。为了解决这个问题,你可以给摄像机一个非常微小的偏移,使其保持在89.99度,这样它就知道哪个方向是“上”了:https://jsfiddle.net/marquizzo/274qaf0g/3/ - undefined
我明白了,虽然X是正确的,但我们是否可以以某种方式将Z指向正方向呢? - undefined
完美,谢谢!! - undefined
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接