如何使用assimp的aiMeshMorphKey来制作角色的面部表情动画?

问题描述 投票:0回答:1

我正在尝试在 3D 应用程序中使用变形动画来实现面部表情。我一直在研究 assimp 库,并在 aiAnimation 中找到了 aiMeshMorphKey 结构。您能否提供一个代码示例来演示如何使用 aiMeshMorphKey 创建变形动画,例如随着时间的推移改变角色的面部表情?

    for (int i = 0; i < pAnimation->mNumMorphMeshChannels; ++i)
    {
        if (nodeName + "*0" == pAnimation->mMorphMeshChannels[i]->mName.C_Str())
        {
            std::map<float, glm::mat4> morphMeshKeys;
            for (int j = 0; j < pAnimation->mMorphMeshChannels[i]->mNumKeys; ++j)
            {
                std::cout << pAnimation->mMorphMeshChannels[i]->mName.data << std::endl;
                std::cout << pAnimation->mMorphMeshChannels[i]->mKeys[j].mTime << std::endl;
                std::cout << pAnimation->mMorphMeshChannels[i]->mKeys->mValues << std::endl;
                std::cout << pAnimation->mMorphMeshChannels[i]->mKeys->mWeights << std::endl;
            }
        }
    }

不幸的是,官方文档仅限于此声明。 C_STRUCT aiMeshMorphAnim ** mMorphMeshChannels 变形网格动画通道。

每个通道影响单个网格。该数组的大小为 mNumMorphMeshChannels。

c++ assimp
1个回答
0
投票

我这里也有同样的问题,也在尝试添加面部动画:)

您应该在模型的网格中找到一个(或多个)

mNumAnumMeshes
大于零的网格。变形网格存储在该网格的
mAnimMeshes
数组中,具有与主网格相同的顶点数。

只需在主网格和变形网格之间混合顶点位置(可能加上法线,或者动画网格中您需要的任何内容)。

GLSL 着色器中的

glm::mix()
mix()
之类的东西应该可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.