CAL3D 结构分析(2)

接第一章   http://blog.csdn.net/zhuyingqingfen/article/details/38110611

4.2 Vectors 和 Quaternions

Vectors 和 quaternions 是CAL3D库中比较重要的部分。骨骼的移动,蒙皮定点的位置、蒙皮法线的朝向都存储在一个vector中。每当一个旋转的时候就会用到Quaternions,比如一个关节。相比于旋转矩阵matrices ,在interpolation和 memory usage 方面 quaternions有着巨大的优势。这就是为什么在Cal3d库中你看不到Matrices的身影。如果你从矩阵matrices中的旋转信息,你可以很容易地转换为quaternions 的形式。

4.3 Skeletons 和 Bones

Cal3D被设计成基于骨架的动画系统。意思是说动画模型所有的蒙皮顶点都被依附在一个或几个骨架结构的骨骼上。这就使得整个模型的动画变得很容易,你只需要调整骨架的姿态,蒙皮就会自动的进行调整姿势。这种把蒙皮依附在骨骼 的层次结构上的方法被称作”Skinning“.

一个骨骼(bone)是通过相对于其父骨骼的相对转换(transformation)来定义。这个变换信息被分成两个独立的部分:相对平移(translation)信息存储在一个vector中,而相对旋转信息存储在一个quaternion中。一个骨骼的绝对变换是在一个Animation帧后通过递归计算得到的。

回想一下Cal3D中共享数据概念,核心骨架类(core skeleton)和 它的核心骨骼类(core bones)包含有如初始化骨架姿态、骨骼名称和他们继承关系的数据。而骨架和骨骼实例只存储了当前的转换信息和对应当前骨架或骨骼的链接信息。

4.4 Animations、Tracks、Keyframes

Cal3d中在Core model类中的Core animation里存储了每个运动如行走、跳跃、挥手等等。这些动画针对每个受具体运动影响的骨骼(bone)都包含一个核心的轨迹(core track)。

Example 4-2 挥着手的步行者

比如一个像人的模型正挥着他的右手行走。在这个想定中含有两个动画,一个是行走动画,另一个是挥手动画。那个行走动画最有可能为每个有着完整动画模型的骨骼包含有一个track。而那个挥手的动画可能是会被定义成局部的,这样只有右手、胳膊、肩膀或者可能还有脖子的数据被存储。这种选择性的包含允许我们有一个强大的混合。

一个骨骼(bone)的转换数据事实上存储在对应轨迹(track)中的几个核心帧(core keyframes)类中,每一帧在一个具体的时间点上含有一个相对于父骨骼的平移和旋转信息。这些值通过CAL3D进行在两帧之间插值来获得平滑的运动效果。

上面这些所有的这些数据可以被不同的模型实例进行共享,因而这些数据全部存储在核心类里(core classes)。而动画的激活和融合状态(blending state )使得他们在实例之间各不相同,所以这些值在每个实例中分开定义(存贮)。

CAL3D 结构分析(2)

时间: 2024-10-09 11:16:22

CAL3D 结构分析(2)的相关文章

PNG文件结构分析 ---Png解析

PNG文件结构分析 ---Png解析 为了实现更高级的应用,我们必须充分挖掘PNG的潜力. PNG的文件结构 根据PNG文件的定义来说,其文件头位置总是由位固定的字节来描述的: 十进制数 137 80 78 71 13 10 26 10 十六进制数 89 50 4E 47 0D 0A 1A 0A 其中第一个字节0x89超出了ASCII字符的范围,这是为了避免某些软件将PNG文件当做文本文件来处理.文件中剩余的部分由3个以上的PNG的数据块(Chunk)按照特定的顺序组成,因此,一个标准的PNG文

【转载】nedmalloc结构分析

原文:nedmalloc结构分析 nedmalloc是一个跨平台的高性能多线程内存分配库,很多库都使用它,例如:OGRE.现在我们来看看nedmalloc的实现 (以WIN32部分为例)    位操作小技巧:i.获取最低位的出现位置的掩码:x&(-x)ii.判断值为2的幂:x & (x-1) == 0iii.获取从最低的值为1的位开始到左边MSB的掩码: x | (-x)iv.字节对齐:(x + 2^m) &( 2^m -1) nedmalloc设计的数据结构和使用方法有几个有趣的

chromium for android GPU进程结构分析

GPU进程的客户端(Browser进程,Render进程)都会创建一个 WebGraphicsContext3DCommandBufferImpl的实例,用于封装与GPU进程的通信. 所以我们从WebGraphicsContext3DCommandBufferImpl开始引出GPU进程的结构. 一.WebGraphicsContext3DCommandBufferImpl的创建. WebGraphicsContext3D暴露的接口基本与OpenGL ES 2.0 API对应. WebGraphi

Android 4.0 ICS SystemUI浅析——StatusBar结构分析

Android 4.0 ICS SystemUI浅析——StatusBar结构分析 分类: Android2012-06-30 14:45 23687人阅读 评论(8) 收藏 举报 androidsignal代码分析iconseclipse平台 在上一篇文章<Android 4.0 ICS SystemUI浅析——SystemUI启动流程>中以及提到了SystemUI的组成,本文主要分析其中的StatusBar结构. 1.布局概览 首先,我们通过hierarchyviewer这个工具来查看一下

转载,crtmpserver文件夹结构分析

1. 顶层(crtmpserver/) 下的文件夹结构 3rdparty/             : 对lua, xml进行解析的源代码文件夹 sources/              : 项目的核心实现源代码文件夹 builders/              : 各种环境(VS2010, android, linux)下的项目生成 configs/               : 一些预定义的配置文件和示例启动脚本 docs/                  : 项目相关的文档 man

android 系统构架和应用程序目录结构分析

一.Android系统构架 Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层. Linux内核(Linux Kernel) Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的. Linux 内核是硬件和软件层之间的抽象层. 中间件 中间件包括两部分:核心库和运行时(libraries & Android runtime) 核心库包括,SurfaceManage

Android项目目录结构分析

项目结构如下图所示,使用不同sdk版本建立的项目项目结构有所不同,总体相同,高版本增加了一些包结构 1.src 和java项目一样src存放项目源代码 2.gen 自动生成,其中R.java文件也是自动生成,ADT 插件自动根据res中文件的变化修改R.java文件,将res中的资源对应一个16进制地址,用于在在代码中引用到这些资源文件. 3.bin 项目编译输出的目录,里面有apk文件 4.res 存放资源文件 a. drawable存放图片 (1)drawable-hdpi里面存放高分辨率的

【MySQL】mysql buffer pool结构分析

转自:http://blog.csdn.net/wyzxg/article/details/7700394 其他参考: <高性能MySQL> - 8.4.5 InnoDB缓冲池 <MySQL技术内幕InnoDB存储引擎>(第二版内容有所更新) - 2.3 InnoDB体系结构 ############################################## 书中是先对后台线程进行说明,然后对内存部分进行说明,这样更好理解innoDB引擎内存池在使用时的过程. [后台线程

oracle-表结构分析

表结构分析 建表语句CREATE TABLE table_name(table_name VARCHAR2(10),table_name1 int(5),)ALTER语句 ALTER TABLE table_name ADD column_name datatypeALTER TABLE table_name MODIFY (column_name datatype) oracle ddl CREATE TABLE "CS_GDBZDATA"."ACCT_WORK_REGIS