一个 经过缩放 后的cube,距离carema的向量长度为 1,为什么我将 geometry.intersect.ray_model 函数第三个参数内的 distance射线长度 设置为 1 检测不到?到底是怎么计算的??
测试后发现没有缩放的模型用距离carema的向量长度来表示射线的长度是可以检测到碰撞的,模型的缩放会影响射线长度的判断。
引擎组的来解答下?
不太清楚什么问题,可以麻烦提供稳定复现的相关 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.1 将会修复
看看这官方的态度。哎,差距啊。
1.1.1 上的相关修复,ray-model 取消归一化模型射线的方向,来保证输出的距离也是世界空间的,hack 掉了两次空间变换