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);
我想了解射线投影是如何工作的。几乎在任何地方我看到,我得到这样的代码:了解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);
经常使用的模式是这样的:
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。
你可以在这里找到我的答案:http://stackoverflow.com/a/23492823/746754有用的,因为它进入射线投影和z组件。 – acarlon