我想了解光线投影的工作原理。几乎我在哪里看到,我得到这样的代码:
new THREE.Vector3(mouseX, mouseY, 0.5);
我对z位置的0.5感到困惑。根据我的理解,我们预测z=1 plane
(不是z=0.5 plane
)。那么我们不应该像这样使用它吗?
new THREE.Vector3(mouseX, mouseY, 1.0);
答案 0 :(得分: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空间映射到世界空间。
0.5
的值vector.z
可以设置为介于-1和1之间的任何值。
为什么呢?因为这些点都位于与NDC空间中的z轴平行的线上,并且都将映射到从世界空间中的相机发出的相同光线。
设置z = -1
将映射到近平面上的一个点; z = 1
远方飞机。
所以简短的回答是,z
的值是什么并不重要,只要介于-1和1之间。由于数值原因,我们远离端点,0.5是经常使用。