射线检测参数的问题

一个 经过缩放 后的cube,距离carema的向量长度为 1,为什么我将 geometry.intersect.ray_model 函数第三个参数内的 distance射线长度 设置为 1 检测不到?到底是怎么计算的??
测试后发现没有缩放的模型用距离carema的向量长度来表示射线的长度是可以检测到碰撞的,模型的缩放会影响射线长度的判断。
引擎组的来解答下?

不太清楚什么问题,可以麻烦提供稳定复现的相关 demo 吗

ray_demo.zip (11.7 KB)
ray_demo

射线的距离参数我用的是摄像机坐标到模型中心坐标向量长度,所以距离参数是没问题的。只是缩放影响了射线碰撞检测,不知道啥原因

射线是变换矩阵后对应到模型空间来检测模型的,可是对应的长度还是用的世界空间的长度,所以肯定是会检测不到的。
下面代码就是说一下哪里出了问题,解决方法还是要看别的

if (!opt.doNotTransformRay) {
            Mat4.invert(m4, model.node.getWorldMatrix(m4));
            Vec3.transformMat4(modelRay.o, r.o, m4);
            Vec3.transformMat4Normal(modelRay.d, r.d, m4)
            opt.distance = opt.distance && opt.distance * modelRay.d.length()
            Vec3.normalize(modelRay.d, modelRay.d);
        }
1赞

感谢反馈,1.1 版本中修复了一些BUG,可以试试最近发布的 v1.1.1社区版

另外,目前检测距离和结果有点问题(楼上 @zjsmzhq 大佬反馈),正式版会修复

感谢大佬指出问题,1.1.1 将会修复

看看这官方的态度。哎,差距啊。

1.1.1 上的相关修复,ray-model 取消归一化模型射线的方向,来保证输出的距离也是世界空间的,hack 掉了两次空间变换

https://github.com/cocos-creator/engine/pull/6892