999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于BVH驅動的OGRE骨骼動畫

2009-12-31 00:00:00何明耘陳雷霆
計算機應用研究 2009年9期

摘 要:OGRE游戲引擎中的角色動畫將模型與骨骼文件進行映射。若想在不借助第三方建模軟件重新制作模型和動畫的基礎上更改現有模型的動作,獲取與模型匹配的骨骼數據成為一個難題。提出了一種將標準BVH動作文件解析為XML文件的方法,生成與OGRE模型匹配的骨骼文件,將來源廣泛的BVH文件作為動作數據,極大地豐富了OGRE角色動畫。實驗結果證明,轉換后的BVH可以與OGRE中的模型融合起來,從而驅動模型。

關鍵詞:BVH文件; 可擴展標記語言文件; 骨骼動畫; OGRE游戲引擎

中圖分類號:TP391文獻標志碼:A

文章編號:1001-3695(2009)09-3550-03

doi:10.3969/j.issn.1001-3695.2009.09.101

Driving OGRE skeleton animation based on BVH

GUO Lia, HE Ming-yunb, CHEN Lei-tingb

(a. School of Software, b. Shool of Computer Science Engineering, University of Electronic Science Technology of China, Chengdu 610054, China)

Abstract:Animation of the role mapped the module and skeleton file in OGRE game engine. It is so hard to restructure the existing animation of the role and acquire the skeleton matched the module without using third-party modeling software to recreate module and animation. This paper presented a method which parsed standard BVH file to XML file, created skeleton file matched OGRE module, by using BVH file which had wide range of source as the animation data, significantly enriched the OGRE animation of the role. The result of the experiment proves that the converted BVH can combine perfectly with OGRE,and drive the model.

Key words:BVH file; XML file; skeleton animation; OGRE game engine

0 引言

OGRE作為目前流行的游戲引擎,為使用者提供了豐富的功能,但模型、動畫數據的重用性卻不高。如果想在現有的模型中改變模型中的動作,就需要在骨骼文件中增加新的動作。傳統的做法是借助第三方的建模軟件重新制作模型,或是制作動畫,再經插件導成OGRE支持的格式,過程比較繁瑣。本文提出一種文件轉換方法,直接運用BVH動作文件將其導入到引擎中,用于驅動模型。

1 BVH文件和OGRE引擎介紹

1.1 BVH文件簡介

BVH是BioVision運動捕獲文件格式的文件擴展名。BVH文件[1]包含角色的骨骼和肢體關節旋轉數據。BVH是一種通用的人體特征動畫文件格式,廣泛地被當今流行的各種動畫制作軟件(Poser、3DS Max等)支持。通常可從記錄人類行為運動的運動捕獲硬件獲得。

1.2 BVH文件層次結構

BVH文件的第一部分以圖1的方式描述人體的骨骼模型,通過樹結構來實現。

圖1中用節點表示關節,連線表示驅干,身體的各個部分形成了子樹的形式。BVH文件的第一部分定義了關節樹和每個關節點的名稱、通道數目、關節與關節之間的相對位置,即定義了人體各部分的骨骼長度。由于人體存在的差異,可以通過改變相對位置的數值來區別不同年齡、不同身材比例的人。對于每一個關節,都有三個旋轉參數(相對于X、Y、Z軸的旋轉角度)來描述運動信息。Hip關節點作為整個人體的根關節點還含有三維空間位置參數,從而完成了對人體的完整描述。

1.3 BVH文件運動數據

BVH文件的第二部分記錄了運動的數據,定義了動作數據持續的長度(即幀數)以及每幀之間的時間間隔。按照第一部分定義的關節順序提供每幀數據,記錄了每一幀中各個關節節點的位置信息和旋轉信息。

1.4 OGRE骨骼動畫簡介

骨骼動畫是根據網格數據中的骨骼信息來產生動畫效果。在使用骨骼動畫的時候,模型中的頂點數據被綁定到由多塊骨頭組成的骨骼上。骨骼動畫是通過表示骨頭的一個矩陣來影響所綁定頂點的位置而實現的。

在OGRE中,骨骼被定義為一個類似多叉樹一樣的父子結構。一個骨骼中所有的骨頭都會有連接到上一級骨頭,如同樹枝一樣,最終連接到根部(稱之為根骨頭)。根骨頭沒有父節點;骨頭的運動會傳遞到所有下一級的骨頭,然后依次傳遞。在空間變換的領域中,骨骼中的骨頭和場景中的節點有著相同的情況:改變任何一個骨頭都會影響所有子骨頭的狀態。

骨骼和動畫信息被保存在以.skeleton結尾的文件中。當創建一個基于某個mesh的實體時間,如果mesh上有動畫信息,那么相應的skeleton會自動被加載。

2 BVH文件解析器系統模型分析

BVH文件解析器通過令牌傳遞的方式,逐步讀取BVH文件中的每一個關鍵詞、整型字符、浮點型字符、字符串。系統模型如圖2所示。解析完成后,填充骨骼數據結構和運動數據結構,并完成關節節點位置和方向數據的插值。

2.1 骨骼段數據結構

數據結構Joint存放BVH中描述每一個關節點的信息,其中包括關節點的名稱、父關節點、子節點個數、子節點、節點世界坐標系中的位置、從父節點中繼承而來的位置偏移量、從父節點繼承而來的旋轉偏移量。通過判斷節點是否有子節點,采用遞歸調用解析所有的節點,形成如圖1所示的關節節點樹。位置偏移量和旋轉偏移量記錄的是節點的關鍵幀信息,此后將會對關鍵幀進行插值,以形成平滑的運動軌跡。

Joint

{

string name;

Joint* parent;

int n_children;

Joint** child;

vector world_position;

vector rest_position;

quaternion rest_rotation;

}

2.2 運動數據段數據結構

運動數據可拆分為位移數據、旋轉數據、由運動捕捉器捕獲而來的運動數據信息。位移數據包括位移偏移量對應的關節點名稱、在捕獲到的運動數據中的索引號。旋轉數據包括旋轉偏移量對應的關節點名稱,在捕獲到的運動數據中的索引號。運動數據信息包括動作的名稱、動作持續的時間、位移數據、旋轉數據以及位移數據和旋轉數據的個數。

TranslationalTriDOF

{

string name;

int n_samples;

}

RotationTriDOF

{

string name;

int n_samples;

}

RecordedMotion

{

string name;

double duration;

TranslationalTriDOF ** transdof;

RotationTriDOF** rotdof;

int n_tridofs;

}

2.3 插值處理

在BVH的運動數據部分只是每一個關鍵幀信息,欲平滑地表現運動過程需要通過關鍵幀進行插值處理。本文通過對Joint數據結構中的位置偏移量進行向量的線性插值,對旋轉偏移量進行四元數的球面線性插值[4]如圖3所示,從而生成平滑的運動軌跡。

設q為一個四元數,其記法記為

q=[cos(θ/2)(sinθ/2)n]

vt=k0v0+k1v1,sin ω=sin tω/k1

k1=sin tω/sinω,k0=sin(1-t)ω/sin ω

vt=(sin (1-t)ω/sin ω)q0+(sin tω/sin ω)q1

slerp(q0,q1,t)=(sin (1-t)ω/sin ω)q0+(sin tω/sin ω)q1

3 OGRE骨骼文件解析器系統模型分析

3.1 OGRE骨骼文件的XM L文件格式

為將BVH文件應用到OGRE中,本文提出的一種方法是將BVH轉換為標準XML格式,再利用OGRE自身的XML導入插件即可順利地將BVH文件轉換為游戲引擎自身支持的骨骼文件。

OGRE骨骼文件的XML格式如下所示:

〈skeleton〉

〈bones〉

〈bone_id〉=″″ name=″″〉

〈posotion x=″″ y=″″ z=″″ /〉

〈rotation〉

〈axis x=″″ y=″″ z=″″ /〉

〈/rotation〉

〈/bone〉

〈/bones〉

〈bonehierarchy〉

〈boneparent bone=″″ praent=″″ /〉

〈/bonehierarchy〉

〈anumations〉

〈animation name=″″ length=″″〉

〈tracks〉

〈track bone=″″〉

〈keyframes〉

〈keyframe time=″″〉

〈rotate angle=″″〉

〈axis x=″″ y=″″ z=″″ /〉

〈/rotate〉

〈scale x=″″y=″″ z=″″ /〉

〈translate x=″″ y=″″ z=″″ /〉

〈/keyframe〉

〈/keyframes〉

〈/track〉

〈/tracks〉

〈/animation〉

〈/animations〉

〈/skeleton〉

其中:〈bones〉標簽段對應從BVH中解析出的每一個關節點的名稱、相對父節點的位移偏移量、旋轉偏移量、相對于父節點的方向;〈bonehierarchy〉標簽段指明骨骼層次關系;〈animations〉標簽段對應從BVH中解析出的運動數據信息;〈animation〉標簽段指出動作的名稱、長度;〈tracks〉標簽段用于創建OGRE中的動畫軌跡,其中的〈keyframes〉標簽段對應BVH文件中的關鍵幀數據信息,表明旋轉角度、旋轉軸(即將四元數重新拆分成以軸—角對形式進行表示)、縮放比例以及關節的位移。

3.2 BVH數據轉換至XML

本文在實現上借助TinyXML函數庫進行XML文件的讀寫操作。通過第2章實現的BVH文件解析器得到的數據,對XML文件的各個標簽進行數據填充。通過判斷每一個關節節點的n_children屬性值來進行多層遞歸調用。程序流程圖如圖4所示。

4 實驗結果

該文件轉換系統以MFC為框架,DirectX 9.0為圖形開發包,在VC++ 7.0編輯環境調試運行,效果如圖5所示。圖5的左側顯示了BVH文件的骨骼層次信息,右側演示了第一幀和第二幀的運動姿態,中間為插值結果。通過轉換器將walk.bvh轉換成walk.skeleton.xml后,利用OGRE自帶的XMLConvertor插件即可將walk.skeleton.xml轉換為walk.skeleton文件。圖6為將walk.skeleton骨骼文件應用在jaiqua.mesh上的結果(在CeguiMeshViewer查看器中驗證)。

5 結束語

本文所實現的文件轉換系統經驗證能夠正確驅動OGRE中的模型,使得動作來源更容易,也使得模型的動作更加豐富。進一步的工作將考慮多個動作的融合[2,3],通過不同的融合算法產生大量新的動作,形成一系列的動作庫供模型使用。另外在模型方面,可以在OGRE引擎的基礎上完成人物換裝系統,并將模型和聲音文件相結合。

參考文獻:

[1]朱強,莊越挺,潘云鶴. 基于緊身衣的人體動畫研究[J].軟件學報,2002, 13(4):601-607.

[2]LIU C K, HERTZMANN A, POPOVIC Z.Learning physics-based motion styles with inverse optimization [J]. Computer Graphics 2005, 24(3):1071-1081.

[3]ZORDAN V B, MAJKOWSKA A, CHIU B, et al. Dynamic response for motion capture animation [J].Computer Graphics, 2005, 24(3):697-701.

[4]DUNN F, PARBERRY L. 3D math primer for graphics and game development[M]. [S.l.]:Wordware Publishing Inc, 2002.

主站蜘蛛池模板: 欧美在线观看不卡| 婷五月综合| 超碰aⅴ人人做人人爽欧美| 91国内视频在线观看| 国产av无码日韩av无码网站| 国产一区二区免费播放| 免费国产小视频在线观看| 华人在线亚洲欧美精品| 福利国产微拍广场一区视频在线 | 中文字幕欧美成人免费| 99热这里都是国产精品| 亚洲人精品亚洲人成在线| 欧美成人午夜在线全部免费| 亚洲swag精品自拍一区| 国产欧美日韩资源在线观看| 波多野结衣中文字幕一区二区 | 久久国产精品波多野结衣| 免费中文字幕在在线不卡| 精品无码一区二区三区在线视频| 高清不卡一区二区三区香蕉| 色综合五月| 亚洲第一成年网| 亚洲首页在线观看| 欧美成人免费一区在线播放| 亚洲无码高清免费视频亚洲| 美女视频黄又黄又免费高清| 国产在线视频福利资源站| 伊人无码视屏| 99精品福利视频| 欧美人与性动交a欧美精品| 国产亚洲第一页| 成人午夜亚洲影视在线观看| 午夜不卡福利| 国产男女免费视频| 99精品免费欧美成人小视频| 国产精品自在拍首页视频8 | 国产乱人伦精品一区二区| 无码专区在线观看| 亚洲成人黄色在线观看| 人人艹人人爽| 亚洲二区视频| 国产高潮视频在线观看| 2048国产精品原创综合在线| 国产美女免费网站| 久久久久久久久亚洲精品| 2021无码专区人妻系列日韩| 白丝美女办公室高潮喷水视频| 亚洲VA中文字幕| 午夜视频在线观看免费网站| 2020极品精品国产| 亚洲经典在线中文字幕| 2021国产乱人伦在线播放| 日韩无码真实干出血视频| 欧美综合成人| 波多野结衣久久精品| 97青草最新免费精品视频| 日本一本在线视频| 国产91蝌蚪窝| 欧美日韩北条麻妃一区二区| 亚洲成人高清在线观看| 国产真实二区一区在线亚洲| 欧美在线精品一区二区三区| 亚洲欧美日韩中文字幕一区二区三区| AV天堂资源福利在线观看| 男女性午夜福利网站| 国产精品无码久久久久久| 婷婷六月在线| 在线观看国产黄色| 97人人模人人爽人人喊小说| 亚洲看片网| 超清无码熟妇人妻AV在线绿巨人| 亚洲欧洲国产成人综合不卡| 欧美一级高清免费a| 狠狠做深爱婷婷久久一区| 亚洲AV无码久久精品色欲| 久久精品亚洲热综合一区二区| 国产精品熟女亚洲AV麻豆| 新SSS无码手机在线观看| 一级毛片免费不卡在线 | 国产97视频在线观看| 99热国产在线精品99| 极品国产在线|