Three.js 理解3.js射线投影
我想了解光线投影是如何工作的。几乎在我看到的任何地方,我都会得到这样的代码:Three.js 理解3.js射线投影,three.js,Three.js,我想了解光线投影是如何工作的。几乎在我看到的任何地方,我都会得到这样的代码: new THREE.Vector3(mouseX, mouseY, 0.5); var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5, ); 我对z位置的0.5感到困惑。根据我的理
new THREE.Vector3(mouseX, mouseY, 0.5);
var vector = new THREE.Vector3(
( event.clientX / window.innerWidth ) * 2 - 1,
- ( event.clientY / window.innerHeight ) * 2 + 1,
0.5,
);
我对z位置的0.5感到困惑。根据我的理解,我们正在投影到z=1平面
(不是z=0.5平面
)。那么我们不应该这样使用它吗
new THREE.Vector3(mouseX, mouseY, 1.0);
通常使用的模式如下所示:
new THREE.Vector3(mouseX, mouseY, 0.5);
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空间映射到世界空间
vector.z
的值0.5
可以设置为-1和1之间的任何值
为什么??因为这些点都在NDC空间中与z轴平行的线上,并且都将映射到世界空间中相机发出的相同光线
设置z=-1
将映射到近平面上的一个点z=1
远平面
所以简单的回答是,z
的值是多少并不重要,只要它在-1和1之间。出于数值上的原因,我们远离端点,通常使用0.5。您可以在这里找到我的答案:它在光线投影和z分量中非常有用。