Assimp骨骼层级处理脚本异常:仅识别最多两个子节点
问题诊断与修复:骨骼层级遍历仅识别前两个子节点
嘿,我一眼就揪出问题所在了——你在循环里不小心覆盖了父节点的指针!
看这段出问题的代码:
for (int i = 0; i < node->mNumChildren; i++) { node = node->mChildren[i]; GetNode(node); }
第一次循环i=0时,你把node改成了它的第一个子节点。等i=1的时候,你再访问node->mChildren[i],此时的node已经是第一个子节点了,而不是原来的父节点!如果第一个子节点没有第二个子节点,循环直接就结束了,自然会漏掉原父节点的第三个及以后的子节点。
修正方法超简单,用一个临时变量保存当前要处理的子节点,别碰原来的父节点指针就行:
void GetNode(aiNode *node) { string name = (string)node->mName.data; cout << name << endl; for (int i = 0; i < node->mNumChildren; i++) { // 用临时指针存子节点,不修改原父节点指针 aiNode* childNode = node->mChildren[i]; GetNode(childNode); } }
这样循环每次都会从原父节点的mChildren数组里正确取到第i个子节点,递归遍历就不会漏掉任何子节点啦。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

