threejs碰撞检测

发布于 2021-12-03 20:20:46 字数 1417 浏览 972 评论 1

用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

累赘 2021-12-04 12:45:48

我知道了,这样写就可以了,哈哈

orbitControls.addEventListener("change", function(){
                collision(collisionArray, Movingcube,camera, orbitControls );
            }, false);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文