Assimp、OpenGL:如何围绕其原点旋转骨骼?
创始人
2024-09-20 19:00:51
0

首先,在Assimp中读取模型时需要建立骨架。然后,按照骨骼的层次关系对零件进行装配。在遍历骨骼层次结构时,我们需要计算出每个骨骼的变换矩阵。在OpenGL中,我们需要将每个顶点转换为局部坐标系,并用骨骼的变换矩阵变换它,然后将其转换回全局坐标系。

解决此问题的代码示例如下:

//根据骨骼层次结构初始化骨架 void initializeSkeleton(const aiNode *node,const aiMatrix4x4 &parentTransform ){ aiMatrix4x4 globalTransform = parentTransform * node->mTransformation; //对于每个 bone 初始化需要的数据 //获取骨骼的名称,利用名称来获取骨骼在骨架中的编号 boneId for (int i = 0; i < node->mNumChildren; ++i){ initializeSkeleton(node->mChildren[i], globalTransform); } }

// OpenGL 部分实现 void renderBone(const Bone &bone){ mat4 boneTransform = bone.finalTransform; // 骨骼的最终变换矩阵 mat4 centerMat = translate(mat4(1.0f), bone.center); // 将坐标系平移到骨骼的中心 mat4 rotateMat = rotate(mat4(1.0f), bone.angle, bone.axis); // 围绕骨骼自身坐标系的某个轴旋转骨骼 mat4 vertexMat = translate(mat4(1.0f), -bone.center); // 将坐标系平移到骨骼原点,即平移回中心 mat4 modelMat = vertexMat * rotateMat * centerMat; // 组合变换矩阵

glUniformMatrix4fv(boneTransformUniformLocation, 1, GL_FALSE, &boneTransform[0][0]); // 上传骨骼变换矩阵
glUniformMatrix4fv(modelUniformLocation, 1, GL_FALSE, &modelMat[0][0]); //

相关内容

热门资讯

wepokeai代打的胜率!w... wepokeai代打的胜率!wepoke插件,(wepoker)本来真的是有挂,德州论坛(有挂介绍)...
透视透视挂!wepoker辅助... 透视透视挂!wepoker辅助器下载,wpk辅助ai,揭秘一下(有挂详情)1、起透看视 透明视辅助2...
德州之星外挂!智星德州菠萝辅助... 德州之星外挂!智星德州菠萝辅助器,(wEpOke)原来是真的有挂,细节方法(有挂规律)1、智星德州菠...
透视教程!德普之星辅助功能如何... 透视教程!德普之星辅助功能如何打开,红龙poker透视,分享个大家(有挂介绍)1、金币登录送、破产送...
德州ai辅助!wepoke黑科... 德州ai辅助!wepoke黑科技,(wePOke)果然是有挂,安装教程(有挂黑科技)1)wepoke...
透视科技!wepoker脚本下... 透视科技!wepoker脚本下载,wpk透视脚本视频,一分钟了解(有挂透明)1、在ai机器人技巧中,...
透视最新!aapoker辅助功... 透视最新!aapoker辅助功能,红龙poker透视,技术分享(有挂教程)1、进入游戏-大厅左侧-新...
微扑克游戏辅助器!德州ai人工... 微扑克游戏辅助器!德州ai人工智能,(wepoke)果然有挂,2025新版总结(有挂细节)1、操作简...
透视辅助!wpk辅助软件,德普... 透视辅助!wpk辅助软件,德普之星透视辅助,教程攻略(有挂教程)软件透明挂微扑克wpk插件教程:1、...
微扑克辅助软件!aapoker... 微扑克辅助软件!aapoker外挂,(WEPOKE)一贯是真的有挂,AI教程(有挂黑科技)1、每一步...