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]); //

相关内容

热门资讯

辅助透视!德普之星透视辅助软件... 辅助透视!德普之星透视辅助软件下载,微信小程序游戏辅助器,详细脚本(真的有挂)-哔哩哔哩1.德普之星...
透视教你!德普之星透视辅助,德... 透视教你!德普之星透视辅助,德普之星辅助工具如何打开(透视)其实是真的器(哔哩哔哩)1)有没有挂:进...
透视脚本!wepoker透视挂... 透视脚本!wepoker透视挂底牌,微乐自建房免费黑科技有哪些,专业脚本(发现有挂)-哔哩哔哩进入游...
脚本曝光!aapoker辅助器... 脚本曝光!aapoker辅助器怎么用,aapoker插件(透视)本来真的是有器(哔哩哔哩)1、点击下...
透视挂透视!约局吧是否有挂,微... 透视挂透视!约局吧是否有挂,微信小程序微乐辅助免费版,透视脚本(的确有挂)-哔哩哔哩1、让任何用户在...
透视规律!约局吧开挂神器是真的... 透视规律!约局吧开挂神器是真的吗,微乐智能辅助真的假的,揭幕脚本(发现有挂)-哔哩哔哩约局吧开挂神器...
透视辅助!wepoker怎么提... 透视辅助!wepoker怎么提高运气,wepoker辅助软件视频(透视)确实存在有器(哔哩哔哩)1、...
随着!hhpoker开挂教程,... 随着!hhpoker开挂教程,微信小程序辅助器脚本,辅助透视(确实有挂)-哔哩哔哩1、完成hhpok...
脚本专业!wepoker轻量版... 脚本专业!wepoker轻量版透视方法,wepoker脚本下载(透视)确实真的是有教程(哔哩哔哩)一...
最新消息!aapoker发牌逻... 最新消息!aapoker发牌逻辑,微乐自建房安装挂免费,普及透视(有挂教程)-哔哩哔哩1、aapok...