提问人:user19632259 提问时间:8/5/2023 更新时间:8/5/2023 访问量:25
你能检查一下我提取的collada(.dae)模型中是否有任何错误吗?
Can you check if there are any errors in the collada (.dae) models that I extracted?
问:
我在 DirectX 11 引擎中使用了 Assimp 加载程序打开了我的 .dae 模型文件,但它无法正常工作。
我和我的团队不相信我的代码中有任何错误,所以我向其他人寻求帮助。他们认为模型本身可能存在问题。我将上传模型文件,如果您能告诉我它们是否有任何问题,我将不胜感激。
我预计会出现以下问题:
调试结果显示,基本向量的值不正确。 我所操作的骨骼信息位于局部空间中,因此预期的世界位置、旋转和底面未正确应用。
这是我用来加载模型的代码。
void Model::recursiveProcessBoneMatrix(aiMatrix4x4 matrix, const std::wstring& nodeName)
{
const ModelNode* modelNode = FindNode(nodeName);
aiMatrix4x4 transform = modelNode->mTransformation;
if (mParentModel)
{
// Code written to search for nodes with the same name in the model.
ModelNode* parentModelNode = mParentModel->FindNode(nodeName);
if (parentModelNode)
{
/*
Set my hierarchy information based on the parent's corresponding node hierarchy.
Although the model is forced to move to the position of that node,
it causes rotation issues.
*/
Bone* bone = mParentModel->FindBone(nodeName);
if (bone != nullptr)
{
bone = mParentModel->GetBone(bone->mIndex);
matrix = bone->mLocalMatrix;
}
}
}
matrix = matrix * transform;
if (mBoneMap.find(nodeName) != mBoneMap.end())
{
Bone* bone = &mBoneMap.find(nodeName)->second;
aiMatrix4x4 glovalInvers = FindNode(L"Scene")->GetTransformation();
// bone->mOffsetMatrix - vectex to bonespace (like world, view, projection transform)
//matrix - transformed martrix from root
bone->mFinalMatrix = glovalInvers.Inverse() * matrix * bone->mOffsetMatrix;
bone->mLocalMatrix = matrix;
mBones[bone->mIndex].mFinalMatrix = bone->mFinalMatrix;
mBones[bone->mIndex].mLocalMatrix = matrix;
}
for (size_t i = 0; i < modelNode->mChilds.size(); ++i)
{
recursiveProcessBoneMatrix(matrix, modelNode->mChilds[i]->mName);
}
}
答: 暂无答案
评论