2014-02-19 80 views
0

我看到示例代码全部具有一段代码为:Three.js raycaster究竟在做什么?使用three.js所碰撞检测

var vector = new THREE.Vector3((event.clientX/window.innerWidth) * 2 - 1, - (event.clientY/window.innerHeight) * 2 + 1, 0.5); 
projector.unprojectVector(vector, camera); 

我的问题是,什么是event.clientX/window.innerWidth)* 2 - 1 &事件.clientY/window.innerHeight)* 2是否正确?为什么这些价值?

我需要编写一个正交相机撞击检测代码,但我首先需要了解透视相机案例中发生了什么。

回答

3
(event.clientX/window.innerWidth) * 2 - 1, - (event.clientY/window.innerHeight) * 2 + 1 

将屏幕空间中的像素坐标映射到标准化设备坐标(NDC)空间中的点。

projector.unprojectVector(vector, camera); 

将NDC空间中的点映射到世界空间中的点。

Raycaster然后通过该世界点从相机位置创建光线。

如果您需要帮助了解这些概念,请参阅this answer中的参考文献。

此外,对于正射相机,您需要使用稍微不同的方法。有关更多信息,请参阅this answer

three.js r.66