首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在openGL中实现关节和骨骼?

如何在openGL中实现关节和骨骼?
EN

Stack Overflow用户
提问于 2012-12-25 21:08:24
回答 2查看 5.5K关注 0票数 8

我正在开发自己的openGL框架,并且知道如何绘制3d对象……等等。

但是,如何定义可能具有关节的3d对象之间的关系?或者如何将3d对象定义为“骨骼”?有什么好的资源吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-25 21:23:47

但是,如何定义可能具有关节的3d对象之间的关系?

OpenGL并不关心这些事情。我不是一个纯绘图的API。因此,你需要释放你的创造力,自己定义这样的结构。骨骼动画的常用方法是使用骨骼/装备系统,其中每个骨骼都有一个方向(由四元数或3×3矩阵表示)、长度和附加到其上的骨骼列表,即某种树。

我将这个结构定义为

代码语言:javascript
复制
typedef float quaternion[4];

struct Bone {
    quaternion orientation;
          float length;

            int  n_subbones;
           Bone *subbones;
};

除此之外,您还需要从钻机开始处的轴心点。我会这样做

代码语言:javascript
复制
typedef float vec3[3];

struct GeomObjectBase {
           vec3 position;
    quaternion orientation;
};

struct BoneRig {
    struct GeomObjectBase gob;

    struct Bone pivot_bone;
}

接下来,您需要一些函数来迭代此结构,并从中生成矩阵调色板,以便将其应用于模型网格。

注意:我使用的是freeglut

完全不相关

票数 8
EN

Stack Overflow用户

发布于 2012-12-25 21:27:41

由于OpenGL只是一个图形库,而不是3D建模框架,因此定义和使用“骨骼”的任务就落在您身上了。

有不同的方法可以实际实现它,但总体思路是:

将模型的每个部分视为骨骼(例如,头部、躯干、小腿、大腿等)。

每个骨骼都有一个与其连接的父骨骼(例如,左下腿的父骨骼是左上腿)。

因此,每个骨骼都有多个子骨骼。

现在,您可以将每个骨骼的位置定义为相对于父骨骼的位置。在显示骨骼时,您现在可以将其相对位置与父骨骼的相对位置相乘,以获得绝对位置。

要可视化,请执行以下操作:

把它想象成一个洋娃娃。当您抓住玩偶的手臂并四处移动时,手的相对位置(和旋转)不会更改。它的绝对位置将会改变,因为你移动了它的一个父对象。

当我尝试骨骼动画时,我从这个链接学到了大部分:http://content.gpwiki.org/index.php/OpenGL:Tutorials:Basic_Bones_System

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14030929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档