骨骼运动数据的绘制.doc

上传人:汽*** 文档编号:544002539 上传时间:2022-09-12 格式:DOC 页数:6 大小:55.50KB
返回 下载 相关 举报
骨骼运动数据的绘制.doc_第1页
第1页 / 共6页
骨骼运动数据的绘制.doc_第2页
第2页 / 共6页
骨骼运动数据的绘制.doc_第3页
第3页 / 共6页
骨骼运动数据的绘制.doc_第4页
第4页 / 共6页
骨骼运动数据的绘制.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《骨骼运动数据的绘制.doc》由会员分享,可在线阅读,更多相关《骨骼运动数据的绘制.doc(6页珍藏版)》请在金锄头文库上搜索。

1、运动骨骼数据的读取,存储和显示nustViewer工程的源文件中有15个.cpp文件,头文件中有14个.h文件。除主函数所在的nustViewer.cpp文件之外,每个.cpp文件对应于一个同名的.h文件。头文件主要是相关类的声明,cpp文件是类中相关函数的定义。下面是对这几个文件的概要及重要的成员函数的说明。一、 stdafx 这个文件是创建工程的时候,vc+自动创建的,用于建立一个预编译的头文件.PCH和一个预定义的类型文件STDAFX.OBJ,可以加速编译过程。可暂时不去理会。二、 Posture 2.1 成员变量Posture类用来将骨骼段的长度,方向,开始坐标,结束坐标各保存在一个数

2、组中去,并提供对其进行访问和设置的函数。其成员变量为: private: osg:Vec3 rootPos;/根骨段的位置 vector lengthArray;/骨段的长度数组vector directionArray;/骨段的方向数组vector startPtArray; /骨段的起点坐标数组(参照世界坐标系)vector endPtArray;/骨段的终点坐标数组(参照世界坐标系)2.2 int computeEndPt(unsigned int npos)这个函数根据在npos位置的骨骼段(线段)的开始点和方向计算该骨骼段在全局坐标的中结束点,作为子骨骼的开始点。2.3 其他的函数是

3、根据骨骼在数组中的存储位置对该骨骼段进行的读取和设置的get和set函数。三、 Bone3.1 成员变量Bone类主要用来存储一个骨骼段的数据,其成员变量为:private:static int nextIdx;/下一个骨段号int idx;/骨段的序号string name;/骨段的名称float length;/骨段的长度Bone* parentBone;/父骨段,Root的父骨段为NULLvector childBones;/子骨段数组,若无子骨段,则该数组大小为0osg:Vec3 direction;/骨段方向的单位向量(世界坐标系下)string axisOrder;/文件中给出的骨

4、段坐标轴的顺序public:osg:Vec3 rAxis3;/坐标轴所对应的方向向量float rAxisIncludedAngle3; /局部坐标轴与世界坐标轴的夹角,对应关系按照axisOrder来确定int dof3;/三方向自由度的标识,若有自由度则值为,若无则为float rotationLimit32; /自由度的旋转的角度限制范围3.2 int Bone:computeChildrenPostures(Posture &posture)这个函数通过递归调用,用深度优先搜索的办法,调用Posture类的方法设置骨骼段在全局坐标系下的开始和结束点的坐标。3.3 Bone(void);

5、Bone(Bone &bone) Bone类的两个构造函数,用来对Bone对象的初始化。3.4 其他是一些对Bone类成员变量的get和set函数。四、 Skeleton4.1 成员变量Skeleton类主要将骨骼段存储到骨骼数组中去,根据根节点在全局坐标系中的位置,计算骨骼段的开始与结束点的全局坐标,从asf文件中读入的骨骼数据即是存入此类中。其成员变量为:private:osg:Vec3 rootPos;/root在世界坐标系中的位置信息string rootOrder; /asf文件中root部分所给出的位置、旋转数据出现的顺序vector bones; /骨骼段数组,骨骼段数据按次序存

6、入4.2 其他是一些对骨骼段的get和set函数五、 SkeletonPat5.1 成员变量SkeletonPat类主要存放了位置变换节点(osg:PositionAttitudeTransform)的数组,该数组主要存放了从amc文件中读入的绕各个轴旋转的欧拉角。成员变量的定义为:public:vectorosg:ref_ptr bonePat; 5.2 int UpdatePosture(osg:Vec3 skRootPos, const Action* action, bool updateByQuat) 这第一个参数是根节点的坐标,第二个是某一帧的指针(后面会介绍这个类),第三个参数表

7、示是否根据四元数进行旋转,true表示是,false表示否。这个函数主要用来将amc文件中的旋转的欧拉角,结合asf文件中三个轴的方向向量,将之转化为四元数。存放在bonePat数组中相应骨骼段中。同时,设置bonePat0中的位置为根节点的位置。六、 OsgSkeletonFactory 与 OsgLineSkeletonFactory OsgLineSkeletonFactory继承了OsgSkeletonFactory类,OsgSkeletonFactory提供了一些虚函数,OsgLineSkeletonFactory实现了这些虚函数,表明用线条绘制骨骼。6.1 osg:ref_ptr

8、CreateGeode(osg:Vec3 startPt,osg:Vec3 endPt) 这个函数根据传入参数的起始点位置和结束点位置,绘制骨骼段。返回该节点的指针。6.2 int CreateBonePat(Bone* bone, SkeletonPat* skeletonData) 这个函数通过递归调用,将一帧中的全部骨骼段(不包括根节点)进行绘制。利用SkeletonPat类中的位置变换节点(osg:PositionAttitudeTransform)设置骨骼的旋转,并将通过调用CreateGeode函数创建的几何节点作为子节点加到该位置变换节点上,以便对该骨骼进行旋转。6.3 Skel

9、etonPat* CreateSkeletonPat(Skeleton& skeleton)这个函数将Skeleton类中的骨骼数据(包括根节点)进行遍历,首先对根节点的旋转进行设置,但并不绘制,然后调用CreateBonePat函数,对其他骨骼段进行绘制。七、 Action7.1 成员变量 Action类用来将静态的骨骼数据,即从asf文件中读取的Bone数据组成的数组,与对应的骨骼在amc中的欧拉角(或四元数)一一对应,便于绘制。 public:osg:Vec3 rootPos;vector crspdBones;/欧拉角所对应的骨头vector rotations; /若某骨段自由度不足

10、个,则不足位由0补上vector rotQuat;7.2 其他 除了上述成员变量外,还有Action类的构造函数和析构函数。八、 ActionSequence8.1 成员变量 这个类主要用来将多个运动的数据存入数组。成员变量为 private:vector actions;8.2 其他成员函数 一个获取数组头指针的get函数和一个增加新的运动的函数。九、 OsgUI 9.1 成员变量 这个类用于图形化界面的设置。其成员变量为:public:static bool isPause;static int nfps;/预设定的显示帧率 private:osg:ref_ptr viewer;osg:r

11、ef_ptr root;osg:ref_ptr sceneRootNode;osg:ref_ptr figureRootNode;osg:ref_ptr frameNumText;osg:ref_ptr frameRateText;std:vector figureDataArray; 9.2 int createBaseGround() 这个函数用来创建地面,作为人运动的参考。 9.3 osg:Group* createLight(osg:Node* node) 创建光源。 9.4 int createWindow() 创建窗口,配置上下文,设置视角。 9.5 int createFigur

12、eSkeletonPat(std:vector &skArray) 通过OsgSkeletonFactory中存储的数据,对成员变量中的figureDataArr进行设置。便于后面利用这些数据进行显示。 9.6 int displayFrameAnimation(std:vector &skArray, std:vector &acSeqArray) 根据形参skArray和acSeqArray中的骨骼数据对运动数据进行绘制。 9.7 int display(std:vector &skArray, std:vector &acSeqArray) 通过调用本类中的其他成员函数,完成对加入acSeqArray中的所有运动以及其他元素的绘制。十、 AsfFileReader 10.1 成员变量 这个类对asf文件进行解析,并将相应的数据放入Skeleton类中。其成员变量为:private: FILE* file; string buf; vector parts;file为文件名,parts则对应于asf文件中各个骨骼段的名称。10.2 int parse_root(Skeleton* skeleton) 对根节点进行解析,asf文件中的数据对应于保存的数据结构为: order : string axis : string position :

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号