2

如果我使用 Three.js canvas_lines 演示并将透视相机替换为正交相机:

-    camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
+    camera = new THREE.OrthographicCamera(-window.innerWidth/2, window.innerWidth/2, -window.innerHeight/2, window.innerHeight/2, -100, 10000);

尽管出现了线条,但它会导致粒子不再渲染。这是 Three.js 中的错误还是我对正交投影的理解?

更改前的粒子图像: 在此处输入图像描述

切换到OrthographicCamera: 在此处输入图像描述 (注意粒子丢失和线条在空白处终止)

4

1 回答 1

1

“丢失”的粒​​子只是被剔除,因为它们不在相机的近端和远端 zPlanes 之间。

首先,OrthographicCamera 上的 nearPlane 设置不正确。这有点棘手,但投影矩阵的 z 值必须 > 0。这是因为它们被指定为“相机前面的距离”。所以,首先改变:

    camera = new THREE.OrthographicCamera(-window.innerWidth/2, window.innerWidth/2, -window.innerHeight/2, window.innerHeight/2, 1, 10000);

更重要的是,相机的位置应使其不在粒子云的中间。我只是像这样把它移回来:

camera.position.z = 1000;

在正交投影中,z 位置实际上只决定了剔除行为。场景看起来还是一样的。这是输出:

在此处输入图像描述

于 2015-07-16T15:37:01.617 回答