ThreeJS正交相机:调整场景大小以适应窗口

3
在ThreeJS中,我正在使用正交相机(OrthographicCamera),因为我有一些对象应该从前面显示,而不会出现任何透视畸变。这个方法可以解决问题: 我创建的众多对象应该始终大致充满屏幕,但不应太小或太大。例如,使用“fitWidth”和“fitHeight”属性设置相机的宽度和高度无法实现此目标,因为这些属性只能将对象缩放到固定的大小,而忽略了屏幕分辨率的影响。为了解决这个问题,我需要动态调整相机的大小,以便它适合当前屏幕大小和纵横比例。
var factor = 4.5;
this.camera = new THREE.OrthographicCamera(-window.innerWidth / factor, window.innerWidth / factor, window.innerHeight / factor, -window.innerHeight / factor, 1, 1000);

我可以在1920x1080像素的分辨率下成功运行它,但当我将窗口调整为更小的尺寸并重新加载页面时,对象会开始变得过大,因为它们表现得像是固定的。(使用透视的CombinedCamera时,调整大小是动态的且有效。)如何使用OrthographicCamera修复这个问题?或者是否有一个技巧可以关闭CombinedCamera中的透视效果?
谢谢!

我现在也遇到了同样的问题。你最后解决了吗? - majidarif
1个回答

10

我不确定这是否能帮助解决您的问题。我不确定这是否正确,或者是否有更好、更标准的处理方式。但这是我目前在正字法代码中使用的方法。它并不完美,但您可以试试。请回贴告诉我是否找到了更好的方法。

        $(window).on('resize', function () {
            // notify the renderer of the size change
            renderer.setSize(window.innerWidth, window.innerHeight);
            // update the camera
            camera.left = -window.innerWidth / camFactor;
            camera.right = window.innerWidth / camFactor;
            camera.top = window.innerHeight / camFactor;
            camera.bottom = -window.innerHeight / camFactor;
            camera.updateProjectionMatrix();
        });

所以我猜只需要创建新实例? - Ondřej Želazko
2
camFactor 是什么? - Alex Lenail
@AlexLenail,可以说是“缩放”。它控制相机视锥体的大小。较小的数字意味着更窄的“视野”,因此看起来会被缩放(因为您无法通过移动正交相机来进行缩放)。 - Xander Luciano

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