4

我想了解光线投影的工作原理。几乎在我看到的任何地方,我都会得到这样的代码:

new THREE.Vector3(mouseX, mouseY, 0.5); 

我对 z 位置的 0.5 感到困惑。根据我的理解,我们正在预测z=1 plane(不是z=0.5 plane)。那么我们不应该像这样使用它吗?

new THREE.Vector3(mouseX, mouseY, 1.0);
4

1 回答 1

3

经常使用的模式是这样的:

var vector = new THREE.Vector3(
    ( event.clientX / window.innerWidth ) * 2 - 1,
    - ( event.clientY / window.innerHeight ) * 2 + 1,
    0.5,
);

这是标准化设备坐标 (NDC) 空间中的一个点。

功能

projector.unprojectVector( vector, camera );

是从 NDC 空间映射到世界空间。

的值可以设置为 -1 和 1 之间的任何值0.5vector.z

为什么?因为这些点都在 NDC 空间中平行于 z 轴的线上,并且都将映射到世界空间中相机发出的同一条光线。

设置z = -1将映射到近平面上的一个点;z = 1远平面。

So the short answer is, it doesn't matter what the value of z is, as long as it is between -1 and 1. For numerical reasons, we stay away from the endpoints, and 0.5 is often used.

于 2013-01-08T17:51:51.563 回答