+
 新版

threejs碰撞检测

连七 发布于 2016/08/11 10:22
阅读 5K+
收藏 3
用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,这是为什么呢??





加载中
0
连七
连七
我知道了,这样写就可以了,哈哈
orbitControls.addEventListener("change", function(){
                collision(collisionArray, Movingcube,camera, orbitControls );
            }, false);



OSCHINA
登录后可查看更多优质内容
返回顶部
顶部