3.0世界坐标转本地坐标函数inverseTransformPoint有bug

public inverseTransformPoint (out: Vec3, p: Vec3) {
Vec3.copy(out, p);
// we need to recursively iterate this
// eslint-disable-next-line @typescript-eslint/no-this-alias
let cur = this;
let i = 0;
while (cur._parent) {
array_a[i++] = cur;
cur = cur._parent;
}
while (i >= 0) {
Vec3.transformInverseRTS(out, out, cur._lrot, cur._lpos, cur._lscale);
cur = array_a[–i];
}
return out;
}

在这个函数中,会搜索根节点,但是所有节点的根节点都是scene,而scene是没有_lrot,_lpos这些属性的,所以一调用这个函数就会出错,请修改。

2赞

楼主这个问题解决了吗?

@ itharbors

可以按这个自己写个方法,根节点上没有的变换就用默认的位置0001,000,111就可以了

1赞

inverseTransformPoint(node: Node, out: Vec3, p: Vec3) {
Vec3.copy(out, p);
let cur = node;
let i = 0;
let array = [];
while (cur._parent && cur._parent._lrot) {
array[i++] = cur;
cur = cur._parent;
}
while (i >= 0) {
Vec3.transformInverseRTS(out, out, cur._lrot, cur._lpos, cur._lscale);
cur = array[–i];
}
return out;
}

改了一下

都3.3了 这个bug还没解决