2013-01-08 94 views
4

我想了解射线投影是如何工作的。几乎在任何地方我看到,我得到这样的代码:了解three.js射线投影

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

你可以在这里找到我的答案:http://stackoverflow.com/a/23492823/746754有用的,因为它进入射线投影和z组件。 – acarlon

回答

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.5vector.z可以在-1和1

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

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

所以简短的回答是,z的值是多少并不重要,只要它在-1和1之间。出于数字原因,我们远离终点,经常使用0.5。