• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      可匹配于任意骨骼模型的剛體與關(guān)節(jié)編輯系統(tǒng)

      2017-10-23 06:25:55
      福建質(zhì)量管理 2017年17期
      關(guān)鍵詞:布娃娃剛體朝向

      (蘇州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 江蘇 蘇州 215000)

      可匹配于任意骨骼模型的剛體與關(guān)節(jié)編輯系統(tǒng)

      徐大偉

      (蘇州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院江蘇蘇州215000)

      一、背景技術(shù)

      使用physX物理引擎模擬布娃娃效果時(shí),需要使用Nvidia公司作為3D Max插件的布娃娃剛體與關(guān)節(jié)的編輯器。該編輯器生成的文件含有冗余數(shù)據(jù),其生成的剛體間的關(guān)節(jié)數(shù)據(jù)格式與我們Flexi引擎的格式不兼容,也不利于與我們的Flexi引擎及相關(guān)工具的集成。

      二、內(nèi)容及優(yōu)點(diǎn)

      本方法提供一種高效的流暢的集成于圖形引擎的編輯布娃娃剛體與關(guān)節(jié)的工具。通過(guò)直接使用physX庫(kù)提供的API生成、編輯和保存布娃娃的剛體與關(guān)節(jié)數(shù)據(jù),并與圖形引擎有效集成,更符合圖形引擎用戶(hù)的使用習(xí)慣。并增加了根據(jù)當(dāng)前游戲角色的骨骼與蒙皮信息,自動(dòng)生成相應(yīng)的剛體與關(guān)節(jié),做到一鍵從無(wú)到有生成布娃娃對(duì)象,可以迅速看到角色的模擬效果。在生成布娃娃所需要的剛體與關(guān)節(jié)后,可根據(jù)當(dāng)前場(chǎng)景中骨骼動(dòng)畫(huà)模型中的各骨骼數(shù)據(jù)自動(dòng)修正關(guān)節(jié)所需要的旋轉(zhuǎn)角度,從而解決關(guān)節(jié)數(shù)據(jù)難以編輯與調(diào)整的問(wèn)題,提調(diào)高用戶(hù)的工作效率。并結(jié)合了數(shù)據(jù)驅(qū)動(dòng)與直觀的所見(jiàn)既所得的兩種布娃娃編輯方式。

      三、附圖說(shuō)明

      圖1

      四、具體實(shí)施方式

      1.通過(guò)physX API實(shí)現(xiàn)相應(yīng)版本的剛體與關(guān)節(jié)數(shù)據(jù)的保存與加載功能;剛體是對(duì)現(xiàn)實(shí)物體的抽象,它具有現(xiàn)實(shí)物體的絕大多數(shù)物理屬性,如:質(zhì)量、滾動(dòng)時(shí)的滾動(dòng)摩擦力、滑動(dòng)時(shí)的滑動(dòng)摩擦力及碰撞時(shí)反彈的性質(zhì),但不同于現(xiàn)實(shí)的物體屬性,它在碰撞時(shí),不會(huì)發(fā)生變形,這在現(xiàn)實(shí)中的物體是不存在的。關(guān)節(jié)是描述兩個(gè)剛體間相互作用的一種約束,它對(duì)自己所關(guān)聯(lián)的兩個(gè)剛體的相對(duì)運(yùn)動(dòng)起約束作用,就像門(mén)與門(mén)框間的鉸鏈?zhǔn)归T(mén)僅能相對(duì)于鉸鏈作旋轉(zhuǎn)運(yùn)動(dòng)。

      2.通過(guò)代碼編寫(xiě)把physX庫(kù)集成到圖形引擎中,完成在加載模型時(shí),加載對(duì)應(yīng)的布娃娃的剛體與關(guān)節(jié)數(shù)據(jù);

      3.因?yàn)橛螒蚪巧幕A(chǔ)骨骼數(shù)與骨骼名及對(duì)應(yīng)的關(guān)節(jié)是固定的,如任何一個(gè)人物或怪物都有頭、四肢,所有可以預(yù)先配置好其具體的剛體與關(guān)節(jié)列表,角色模型加載時(shí),根據(jù)該列表自動(dòng)生成基本的剛體與關(guān)節(jié)。

      4.剛體的大小與位置是根據(jù)角色的動(dòng)作文件每一個(gè)骨骼的矩陣及不同骨骼矩陣間的關(guān)系計(jì)算出來(lái):

      [1]遍歷每一個(gè)骨骼影響到的蒙皮頂點(diǎn)集合;根據(jù)該集合計(jì)算出包圍合的大小,包圍合足夠大時(shí),或者其子骨骼足夠大時(shí),才生成對(duì)應(yīng)的骨骼剛體。

      [2]為生成的剛體填充碰撞信息:

      <1>計(jì)算碰撞單元的朝向信息;遍歷骨骼子節(jié)點(diǎn)位置朝向數(shù)據(jù),當(dāng)前遍歷到的子節(jié)點(diǎn)的位置距原點(diǎn)的向量,為當(dāng)前要計(jì)算的骨骼的Z軸方向向量。

      <2>當(dāng)前骨骼的X,Y軸據(jù)隨機(jī)算法,隨機(jī)確定;

      5.本發(fā)明包含另一種算法是直接根據(jù)蒙皮頂點(diǎn)集合生成指定大小的剛體:

      <1>累加所有頂點(diǎn)的向量再求其平均值U

      <2>記錄骨骼的每一個(gè)頂點(diǎn)距該平均值U的差值(xi,yi,zi),i=0…N-1;

      <3>生成協(xié)方差矩陣:

      (∑(xi*xi))/N (∑(xi*yi))/N (∑(xi*zi))/N

      (∑(yi*xi))/N (∑(yi*yi))/N (∑(yi*zi))/N

      (∑(zi*xi))/N (∑(zi*yi))/N (∑(zi*zi))/N

      <4>計(jì)算該協(xié)方差矩陣的特征向量,該向量為本剛體朝向的Z軸向量(計(jì)算方法為PowerIteration):

      [1]取Z軸方向的單位向量vectorZ(0,0,1),且長(zhǎng)度length=VectorZ.length( );

      [2]進(jìn)行最多32次的迭代;

      [3]每次迭代執(zhí)行vectorZ=covarianceMatrix*vectorZ/length

      [4]返回最終的單位化的vectorZ.

      <5>在Z軸向量的基礎(chǔ),隨機(jī)建立正交的X,Y軸向量從而構(gòu)成剛體的朝向向量,根據(jù)該三個(gè)正交向量初步建立本剛體變換矩陣;

      <6>據(jù)本骨骼所有影響的蒙皮頂點(diǎn)位置的集合,統(tǒng)計(jì)出包圍盒位置與大小(適時(shí)進(jìn)行相應(yīng)的空間變換)。

      <7>統(tǒng)計(jì)出的包圍盒位置數(shù)據(jù)添加到剛體的變換矩陣中。

      <8>得到了包圍盒的大小,剛體的變換矩陣,就可以生成出指定形狀類(lèi)型的匹配于原始模型的剛體。

      6.布娃娃編輯器有兩部分組成:第一部分是控制與參數(shù)面板,第二部分是在場(chǎng)景中布娃娃效果在角色模型上的表現(xiàn)。

      7.編輯布娃娃時(shí),可以在控制與參數(shù)面板中直接輸入剛體或關(guān)節(jié)的參數(shù)數(shù)值,點(diǎn)擊更新按紐后,可以在第二部分中看到布娃娃的編輯效果。

      8.也可以在場(chǎng)景中,即布娃娃編輯器的第二部分,直接拖動(dòng)剛體的位置、所處的空間朝向,來(lái)實(shí)時(shí)編輯剛體的相關(guān)屬性;

      9.關(guān)節(jié)的自動(dòng)修正功能實(shí)現(xiàn),角色模型的骨骼數(shù)據(jù)是在美術(shù)建模時(shí)就確定了。但當(dāng)前所編輯的關(guān)節(jié)所連接的兩個(gè)剛體間相對(duì)朝向,多數(shù)都不能使用當(dāng)初美術(shù)建模時(shí)定下的數(shù)據(jù)。這類(lèi)骨骼數(shù)據(jù)不符合當(dāng)前關(guān)節(jié)所表達(dá)的兩剛體的相互朝向(或相對(duì)旋轉(zhuǎn))。這兩剛體存在著相對(duì)旋轉(zhuǎn)角度的偏差。通過(guò)計(jì)算這種偏差,并把其記錄到剛體的矩陣中,從而實(shí)現(xiàn)關(guān)節(jié)所關(guān)聯(lián)的兩剛體間旋轉(zhuǎn)角度的修正。

      10.具體的兩剛體間旋轉(zhuǎn)角度的修正過(guò)程:

      <1>取兩剛體處于符合原角色模型要求下的世界矩陣;

      <2>從世界矩陣中取出兩剛體的世界空間下的位置;

      <3>A剛體的位置為兩剛體間中間位置;計(jì)算出的位置放入A剛體的局部矩陣中。A剛體的矩陣再轉(zhuǎn)到世界空間下;<4>B剛體的矩陣計(jì)算過(guò)程與A剛體相同;

      <5>所得到的兩剛體矩陣傳給physX生成關(guān)節(jié)的API從而生成出修正后的關(guān)節(jié)。

      <6>公式概括為:

      [1]transformA.position=(positionA+positionB)/2;

      [2]transformA.quaternion=inverseTransformA.quaternion*localTransformA.quaternion;

      [3]transformB.position=(positionA+positionB)/2;

      [4]transformB.quaternion=inverseTransformB.quaternion*localTransformB.quaternion;

      11.另一種修正關(guān)節(jié)角度的方法(根據(jù)關(guān)節(jié)編輯的方式,適時(shí)選擇一種關(guān)節(jié)旋轉(zhuǎn)角度算法):

      transformA=inverseCenterOfMassA*inverseTransformA*transformB*centerOfMassB;

      transformB=Identity(單位陣);

      得到的transformA、transformB給physX API使用即可。

      12.增加通過(guò)鼠標(biāo)拾取場(chǎng)景中布娃娃功能。鼠標(biāo)可以選中布娃娃的任意剛體,并驅(qū)動(dòng)整個(gè)布娃娃的運(yùn)動(dòng)。即把人撿起來(lái),拋向空中,可以觀察到近乎真實(shí)的模型的運(yùn)動(dòng)、碰撞、反彈的過(guò)程。

      13.優(yōu)化拾取過(guò)程的算法:

      <1>記錄選中剛體時(shí),計(jì)算該剛體距當(dāng)前攝像機(jī)的距離;

      <2>在鼠標(biāo)拖動(dòng)過(guò)程中的RayTrace計(jì)算時(shí),使用上一步中得到的距離作為被拖動(dòng)剛體距離攝像機(jī)的距離從解決因二維的屏幕鼠標(biāo)坐標(biāo)轉(zhuǎn)換到三維游戲空間時(shí),Z軸坐標(biāo)不確定而導(dǎo)致的被拾取物體在拖動(dòng)過(guò)程中時(shí)而近,時(shí)而遠(yuǎn)的問(wèn)題;算法如圖1所示:

      [1]Distance=A-C;

      [2]B=C+D*Distance;

      [1]http://en.wikipedia.org/wiki/Power_iteration

      徐大偉(1988.03-),男,漢,江蘇盱眙縣,研究方向計(jì)算機(jī)及應(yīng)用。

      猜你喜歡
      布娃娃剛體朝向
      朝向馬頭的方向
      遼河(2022年1期)2022-02-14 21:48:35
      朝向馬頭的方向
      遼河(2022年1期)2022-02-14 05:15:04
      差值法巧求剛體轉(zhuǎn)動(dòng)慣量
      烏龜快跑
      布娃娃
      車(chē)載冷發(fā)射系統(tǒng)多剛體動(dòng)力學(xué)快速仿真研究
      布娃娃
      剛體定點(diǎn)轉(zhuǎn)動(dòng)的瞬軸、極面動(dòng)態(tài)演示教具
      布娃娃臟了
      朝向坐標(biāo)
      上海制造(2013年11期)2014-03-26 08:02:06
      商都县| 洮南市| 屯门区| 鸡东县| 砀山县| 互助| 农安县| 安阳市| 富裕县| 荥阳市| 田东县| 永胜县| 惠水县| 青海省| 安塞县| 三门县| 南漳县| 桂东县| 揭阳市| 金阳县| 蒲江县| 江北区| 焦作市| 嘉善县| 大名县| 礼泉县| 新泰市| 科技| 营山县| 杭州市| 盐池县| 富顺县| 个旧市| 武陟县| 凉城县| 宁津县| 正蓝旗| 易门县| 绍兴县| 普定县| 吴桥县|