threejs碰撞检测
用threejs做检测,我不想将碰撞检测函数写在逐帧渲染函数里面,于是我想按照下面这样进行碰撞检测
orbitControls.addEventListener("change", collision, false);
碰撞检测的函数是这个
function collision(collisionArray, Movingcube, camera, orbitControls){ var offset = new THREE.Vector3(); //获取到底部cube的中心点坐标 var originPoint = Movingcube.position.clone(); for(var vertexIndex = 0; vertexIndex < Movingcube.geometry.vertices.length; vertexIndex++){ //顶点原始坐标 var localVertex = Movingcube.geometry.vertices[vertexIndex].clone(); //顶点经过变换后的坐标 var globaVertex = localVertex.applyMatrix4(Movingcube.matrix); //获得由中心指向顶点的向量 var directionVector = globaVertex.sub(Movingcube.position); //将方向向量初始化 var ray = new THREE.Raycaster(originPoint, directionVector.clone().normalize()); //检测射线与多个物体相交的情况 var collisionResults = ray.intersectObjects(collisionArray, true); //如果返回结果不为空,且交点与射线起点的距离小于物体中心至顶点的距离,则发生碰撞 if(collisionResults.length > 0 && collisionResults[0].distance < directionVector.length() + 1.2 ){ } } }
可是在运行的时候,却提示Movingcube为undefined,这是为什么呢??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我知道了,这样写就可以了,哈哈