我想了解光线投影的工作原理。几乎在我看到的任何地方,我都会得到这样的代码:
new THREE.Vector3(mouseX, mouseY, 0.5);
我对 z 位置的 0.5 感到困惑。根据我的理解,我们正在预测z=1 plane
(不是z=0.5 plane
)。那么我们不应该像这样使用它吗?
new THREE.Vector3(mouseX, mouseY, 1.0);
我想了解光线投影的工作原理。几乎在我看到的任何地方,我都会得到这样的代码:
new THREE.Vector3(mouseX, mouseY, 0.5);
我对 z 位置的 0.5 感到困惑。根据我的理解,我们正在预测z=1 plane
(不是z=0.5 plane
)。那么我们不应该像这样使用它吗?
new THREE.Vector3(mouseX, mouseY, 1.0);
经常使用的模式是这样的:
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.5
。vector.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.