Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 理解3.js射线投影_Three.js - Fatal编程技术网

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分量中非常有用。