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

相关内容

热门资讯

最新技巧!hhpoker辅助软... 最新技巧!hhpoker辅助软件下载,hhpoker俱乐部是干嘛的,详细教程(有挂神器)1、许多玩家...
一分钟了解!we-poker辅... 1、一分钟了解!we-poker辅助器,pokerworld软件,解密教程(有挂攻略)。2、we-p...
一分钟了解!wpk刷入池率脚本... 一分钟了解!wpk刷入池率脚本,大菠萝辅助器,AA德州教程(有挂教程);大神普及一款德州ai内幕,确...
分享实测!来玩app 德州 辅... 分享实测!来玩app 德州 辅助,hh poker软件,大神讲解(有挂方法);1分钟了解详细教程(微...
交流学习经验!aapoker脚... 交流学习经验!aapoker脚本怎么用,wepoker辅助透视软件,攻略教程(有挂神器)关于wepo...
最新通报!wepoker辅助器... 最新通报!wepoker辅助器安装包,wepoker辅助器,玩家教你(有挂技巧);大神普及一款德州a...
揭秘!德州辅助工具到底怎么样,... 揭秘!德州辅助工具到底怎么样,wepoker私人局透视方法,安装教程(有挂教程);人气非常高,ai更...
新手必备!wepoker免费透... 新手必备!wepoker免费透视脚本,智星菠萝有挂吗,详细教程(有挂透明)是由北京得wepoker免...
科普!德普之星透视辅助软件,h... 科普!德普之星透视辅助软件,hhpoker辅助软件下载,力荐教程(有挂辅助)这是由厦门游乐互动科技有...
一分钟教会你!hh poker... 一分钟教会你!hh poker软件,德州透视插件,安装教程(有挂透明);最新版2024是一款经典耐玩...