舞蹈動作的設(shè)計與實現(xiàn)_第1頁
舞蹈動作的設(shè)計與實現(xiàn)_第2頁
舞蹈動作的設(shè)計與實現(xiàn)_第3頁
舞蹈動作的設(shè)計與實現(xiàn)_第4頁
舞蹈動作的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 本科生畢業(yè)論文(設(shè)計)題 目:基于骨骼模型的舞蹈動作的設(shè)計與實現(xiàn)學(xué) 院: 計算機(jī)與信息技術(shù)學(xué)院 專 業(yè): 計算機(jī)科學(xué)與技術(shù)(動畫與游戲軟件方向)班級序號: 學(xué) 號: 學(xué)生姓名: 指導(dǎo)教師: 2011年5月目 錄摘 要:1Abstract:2前言31緒論41.1課題背景41.2相關(guān)技術(shù)特點41.3國內(nèi)外在該領(lǐng)域開發(fā)及應(yīng)用的現(xiàn)狀及分析51.4 Visual C+ 特點61.5 OpenGL 特點61.6 項目開發(fā)環(huán)境概述61.7 論文主要內(nèi)容71.8 本章小結(jié)72 需求分析與系統(tǒng)總體設(shè)計82.1需要的結(jié)構(gòu)體和類的含義82.2程序功能框架92.3程序概要設(shè)計簡介92.4程序執(zhí)行流程圖102.5系統(tǒng)

2、設(shè)計特點介紹112.6本章小結(jié)113 程序詳細(xì)設(shè)計123.1 建立三維基礎(chǔ)模型123.2 建立Win32工程123.3 創(chuàng)建資源文件133.3.1創(chuàng)建菜單143.3.2創(chuàng)建對話框143.4 三維模型的載入153.5 三維模型骨骼的控制163.6 OpenGL的簡單應(yīng)用173.6.1平移變換173.6.2旋轉(zhuǎn)變換173.6.3平移變換和旋轉(zhuǎn)變換的關(guān)系173.7 三維模型舞蹈動作的設(shè)計183.8 過渡函數(shù)的設(shè)計23 3.9燈光效果的設(shè)計243.9.1 關(guān)于光照效果243.9.2 本例中的聚光燈效果253.10 消息響應(yīng)的設(shè)計263.11 本章小結(jié)274 結(jié)論28參考文獻(xiàn)29致 謝30基于骨骼模型的

3、舞蹈動作的設(shè)計與實現(xiàn)的研究摘 要:隨著計算機(jī)在人們生活中的普及,計算機(jī)仿真技術(shù)應(yīng)用的發(fā)展方向也已涉及到人們生活中的方方面面。其中包括軍事、工業(yè)、醫(yī)療、生活娛樂。本例中設(shè)計骨骼模型的舞蹈,對人物在3D場景中的控制,尤其是對于3D場景以及人物在動畫、游戲、影視中的應(yīng)用有一定意義。本文對骨骼模型的舞蹈動作的設(shè)計與實現(xiàn)進(jìn)行了研究,就是為了使三維人物在動畫,以及影視中能夠更好的運用。程序框架采用Windows平臺下的Visual Studio 2008開發(fā)工具中的Win32程序框架,使用C+面向?qū)ο缶幊陶Z言,并基于OpenGL來實現(xiàn)虛擬人環(huán)境,添加消息響應(yīng)機(jī)制,實現(xiàn)人機(jī)交互,鼠標(biāo)以及鍵盤操作。點擊鼠標(biāo)左

4、右鍵可以控制模型繪制模式,鍵盤按鍵可以控制觀察角度。本文設(shè)計了一段舞蹈的動作的關(guān)鍵動作,并通過一定的算法使其連貫成為一段連續(xù)的舞蹈。通過選擇菜單彈出對話框控制舞蹈的開始,舞蹈動作變換過程中設(shè)計了一個過渡函數(shù),使得兩種舞蹈動作之間可以自由過渡,不會產(chǎn)生跳幀現(xiàn)象,同時可以選擇連續(xù)動作使得虛擬人產(chǎn)生連續(xù)動畫效果。并設(shè)計了一個三維場景,其中包括燈光效果。在本例中還配合了音樂效果,使其盡可能的接近可產(chǎn)品化的程度。關(guān)鍵詞:OpenGL 人體語言 舞蹈 合成 運動約束Abstract:Along with the computer in people living in popular, the compu

5、ter simulation technology application development direction was also has related to all aspects in peoples lives. Including military, industrial, medical, life entertainment. This example design model skeleton of the dance, the control characters in a 3D scene, especially for 3D scene as well as cha

6、racters in animation film, games, the application of some significance. In this paper the skeleton model design and implementation of the dance movement was studied, in order to make 3d characters in animation film, and can better use. Program frame of lans by the Visual Studio Windows 2008 developm

7、ent tool, using Win32 program frame of c + + an object-oriented programming language, and based on virtual person OpenGL to environment, add a message response mechanism, realize human-machine interaction, mouse and keyboard. Click the mouse button around can control model drawing mode, clavier key-

8、press can control observation Angle. This paper introduces the design of a dance movements, and the key actions through certain method makes its coherent become over a continuous dance. Through the options menu popup dialog control dance, dance movements transform the beginning of a process of trans

9、ition function design, make two dance moves between free transition, wont produce jump frame phenomenon, also can choose continuous action makes virtual person generation successive animation effects. And designs a 3d scene, including lighting effects. In this case also cooperate with the music effe

10、ct, make its close as possible can prod degree.Keywords:OpenGL Body Language Dance Recognition Synthesis Exercise Constraint 前言“基于骨骼模型的舞蹈動作的設(shè)計與實現(xiàn)”的論文設(shè)計主要使用Visual Studio 2008軟件環(huán)境下的Win32編程模式,模擬人體舞蹈動作。在本設(shè)計中主要實現(xiàn)在3DsMax軟件工具下創(chuàng)建基礎(chǔ)模型,導(dǎo)出為3Ds文件,在Win32框架下編寫程序?qū)肴S模型,并對模型需要變化的部位進(jìn)行變位動作控制。設(shè)計關(guān)鍵動作,關(guān)鍵動作之間的過渡函數(shù),以及設(shè)計菜單

11、控制對話框,實現(xiàn)骨骼模型的舞蹈動作。為了使本例盡可能的接近“產(chǎn)品”的要求,除了對程序的基本框架,以及算法的設(shè)計以外,還添加了音樂,燈光的場景效果。因此,我在網(wǎng)絡(luò)上找到了一個視頻,對其內(nèi)容進(jìn)行了模仿。當(dāng)然也進(jìn)行了自己的一些設(shè)計在本例中。所以本例中的舞蹈動作基本是以該視頻為基礎(chǔ),對其進(jìn)行了一定的修改,最終出來了本例的效果。對于產(chǎn)品講究的是其使用性,與其價值。而作為一個動畫舞蹈產(chǎn)品,最重要的自然就是美感,這其中必不可少的要講到仿真技術(shù)。除了人體動作方面的仿真,要想得到接近于真實的效果,音樂和場景是舞蹈中的重要組成部分。我參考選取了視頻中的音樂,對舞蹈場景也做了一番設(shè)計。在實現(xiàn)中雖然遇到了一些問題,但

12、還是有一定的進(jìn)展。本論文對國內(nèi)外舞蹈研究的背景進(jìn)行了介紹。國內(nèi)外很多影視企業(yè)、動畫公司、動畫工作室和研究機(jī)構(gòu)都在對全三維角色動畫進(jìn)行研究。國際幾家知名動畫公司掌握著三維動畫的高端技術(shù)。他們生產(chǎn)的動畫影片動作生動、細(xì)膩,有些影片甚至可以讓肌肉、皮膚的運動都表現(xiàn)得栩栩如生。在國內(nèi),三維動畫的制作剛剛起步,不少企業(yè)、高校對三維動畫開始進(jìn)行研究,然而這些研究往往停留在三維模型,或是三維特效上,至于難度最高的全三維角色動畫,一直鮮有人敢于嘗試。面向幾乎真空的國內(nèi)市場,以全三維數(shù)字影片為目標(biāo),面臨著機(jī)遇與挑戰(zhàn)。1緒論本例主要是基于骨骼模型的舞蹈動作的設(shè)計與實現(xiàn)。設(shè)計了骨骼模型的舞蹈動作,并對舞蹈場景效果進(jìn)

13、行了仿真。在其中添加了燈光效果,以及音樂。對相關(guān)領(lǐng)域研究背景,國內(nèi)外在該領(lǐng)域的發(fā)展現(xiàn)狀及分析,以及論文設(shè)計的主要內(nèi)容等方面進(jìn)行了簡單的闡述。1.1課題背景舞蹈是八大藝術(shù)之一,是于三度空間中以身體為語言作“心智交流”現(xiàn)象之人體的運動表達(dá)藝術(shù),一般有音樂伴奏,以有節(jié)奏的動作為主要表現(xiàn)手段的藝術(shù)形式。它一般借助音樂,也借助其他的道具。舞蹈本身有多元的社會意義及作用,包括運動、社交/求偶、祭祀、禮儀等。有的學(xué)者認(rèn)為,人由模仿的本能,舞蹈是人用有節(jié)奏的動作對各種野獸動作和習(xí)性的模仿。有些舞蹈還是對一些自然景物動態(tài)形象的模仿,如柳枝的搖曳、海浪的翻滾、風(fēng)的飄蕩旋轉(zhuǎn)等等,人們都可以模仿它們進(jìn)行舞蹈。1.2相

14、關(guān)技術(shù)特點人體舞蹈的研究主要體現(xiàn)在兩個方面,一是人體舞蹈的動作,二是場景的仿真。人體的舞蹈動作,通過對關(guān)鍵動作的設(shè)計,將一個完整的舞蹈分解為若干個關(guān)鍵動作。在設(shè)計舞蹈動作的處理上,我們要關(guān)注的幾個技術(shù)點是:骨骼的加載,紋理的映射,加載后骨骼的坐標(biāo)位置以及變換,關(guān)鍵動作的分解,將分解后的動作連接成一個完整的舞蹈動作。在設(shè)計場景的仿真的處理上,我們要關(guān)注的幾個技術(shù)點是:世界坐標(biāo)系的建立和人物坐標(biāo)系的建立,骨骼在世界坐標(biāo)系中的變換和人物坐標(biāo)系中的變換,燈光效果的仿真。其中比較重要的技術(shù)代碼為骨骼的加載,將分解后的動作連接成一個完整的舞蹈動作,以及燈光效果的實現(xiàn)。1.3國內(nèi)外在該領(lǐng)域開發(fā)及應(yīng)用的現(xiàn)狀及

15、分析目前,國內(nèi)外很多影視企業(yè)、動畫公司、動畫工作室和研究機(jī)構(gòu)都在對全三維角色動畫進(jìn)行研究。國際幾家知名動畫公司掌握著三維動畫的高端技術(shù)。他們生產(chǎn)的動畫影片動作生動、細(xì)膩,有些影片甚至可以讓肌肉、皮膚的運動都表現(xiàn)得栩栩如生。而角色的運動究竟是怎么控制的,這技術(shù)一直秘面不宣。對外公布的資料只有“動作調(diào)節(jié)”、“動作捕捉”、龐大的制作陣容,以及上億美元的投資,如此這般。而一部影片的制作時間也往往需要三年,甚至五年之多。美國的Discreet公司人體工學(xué)研究所提出的Character三維角色動作模型,已成為三維角色動畫軟件開發(fā)組織所用開發(fā)角色運動的重要參考模型。它通過CAK的骨骼控制系統(tǒng),可以指導(dǎo)三維動

16、畫師控制與調(diào)節(jié)三維角色的肢體動作。通過基于骨骼的角色控制系統(tǒng)使得角色動作的控制流程變得切實可行。通過使用此工具,三維動畫師可以根據(jù)自己的需要在三維角色模型動作標(biāo)準(zhǔn)運動的基礎(chǔ)上,定制適合的特定軟件控制運動。該工具支持基于動作捕捉,動力學(xué)運算和手工控制的多種控制方法。同時,對于建模的運動與配置后可以做成插件進(jìn)行發(fā)布。其中,動作捕捉技術(shù)是一種成本高昂的動畫控制技術(shù),通過捕捉真實的人或動物的動作,來記錄每一幀、每一關(guān)節(jié)的動作數(shù)據(jù),并輸入給三維模型。其成本高昂、動作要求高、信號易被干擾和遮擋,擁有諸多不盡人意的弱點。手工調(diào)節(jié)三維角色動作的方法,就是通過動畫師手工調(diào)整角色的動作,姿態(tài)。對于一個動作,需要逐

17、個關(guān)節(jié),逐個畫面進(jìn)行調(diào)整。操作十分繁瑣復(fù)雜,過程中非常容易出現(xiàn)錯誤,導(dǎo)致返工。而且,CAK所支持的角色動作控制僅僅是基于CAK自身模型的,并不能完全按照動畫師的要求定制最適合的角色運動模型。此外,對于外部輸入的動作數(shù)據(jù)信息的處理不支持特定的動作控制流程。從而可知,盡管三維角色動畫的技術(shù)目前日益普及,日益完善,可是對于將該理論應(yīng)用于實踐的軟件、工具、方法等方面,仍有很大的提高余地。在國內(nèi),三維動畫的制作剛剛起步,不少企業(yè)、高校對三維動畫開始進(jìn)行研究,然而這些研究往往停留在三維模型,或是三維特效上,至于難度最高的全三維角色動畫,一直鮮有人敢于嘗試。面向幾乎真空的國內(nèi)市場,以全三維數(shù)字影片為目標(biāo),面

18、臨著機(jī)遇與挑戰(zhàn)。1.4 Visual C+ 特點Microsoft Visual Studio 2008是面向Windows Vista、Office 2007、Web 2.0的下一代開發(fā)工具,代號“Orcas”,是對Visual Studio 2005一次及時、全面的升級VS2008引入了250多個新特性,整合了對象、關(guān)系型數(shù)據(jù)、XML的訪問方式,語言更加簡潔。使用Visual Studio 2008可以高效開發(fā)Windows應(yīng)用。設(shè)計器中可以實時反映變更,XAML中智能感知功能可以提高開發(fā)效率。同時Visual Studio 2008支持項目模板、調(diào)試器和部署程序。1.5 OpenGL 特

19、點OpenGL(全稱Open Graphics Library)是定義了一個跨編程語言、跨平臺的編程接口規(guī)格,它適用于三維圖象(亦可適用于二維)技術(shù)。OpenGL是一個專業(yè)的圖形程序接口,是一個功能強(qiáng)大、調(diào)用方便的底層圖形庫。OpenGL實際上是一個開放的三維圖形軟件包,它獨立于窗口系統(tǒng)和操作系統(tǒng),以它為基礎(chǔ)開發(fā)的應(yīng)用程序可以十分方便地在各種平臺間移植??梢栽诓煌钠脚_如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之間進(jìn)行移植。因此,支持OpenGL的軟件工具有很好的可移植性,可以獲得非常廣泛的應(yīng)用。由于OpenGL是圖形的底層圖形庫,沒有提供幾何實體

20、圖元,不能直接用以描述場景。但是,通過一些轉(zhuǎn)換程序或者自行編寫的接收外部圖形元件類,可以很方便地將AutoCAD、3DS/3DSMAX等3D圖形設(shè)計軟件制作的DXF和3DS模型文件轉(zhuǎn)換成OpenGL的頂點數(shù)組,導(dǎo)入到OpenGL虛擬場景中進(jìn)行繪制。OpenGL可以與Visual C+緊密接口,便于實現(xiàn)人體動作的有關(guān)計算和圖形算法,可保證算法的正確性和可靠性。OpenGL有使用簡便、效率高等特點,它具有建模、變換、顏色模式設(shè)置、光照和材質(zhì)設(shè)置、紋理映射、位圖顯示和圖像增強(qiáng)、雙緩存動畫等七大功能。1.6 項目開發(fā)環(huán)境概述系統(tǒng)硬件開發(fā)環(huán)境如下:CPU Pentium 3500以上Memory 512

21、MB以上系統(tǒng)軟件開發(fā)環(huán)境如下:Windows XPMicrosoft Visual Studio 20081.7 論文主要內(nèi)容本論文主要采用Visual Studio 2008應(yīng)用軟件下的Win 32 API框架編寫程序,并基于OpenGL圖形接口模擬虛擬三維場景。本文按照對“基于骨骼模型的舞蹈動作的設(shè)計與實現(xiàn)”的需求分析、總體設(shè)計、詳細(xì)設(shè)計的模式來介紹程序設(shè)計的實現(xiàn)過程。對tFace,tMaterialInfo,t3Dmodel等幾個主要結(jié)構(gòu)體以及燈光效果和Skeleton,Rotation類的定義和實現(xiàn)方法進(jìn)行了簡單的闡述,并對程序結(jié)構(gòu)設(shè)計過程的實現(xiàn)進(jìn)行了整體的描述。1.8 本章小結(jié)本章是

22、論文的緒論部分,介紹了“基于骨骼模型的舞蹈動作的設(shè)計與實現(xiàn)”的課題背景及其研究現(xiàn)狀,并對其進(jìn)行了簡要的分析,同時還介紹了相關(guān)的開發(fā)環(huán)境的需要,主要開發(fā)語言,以及應(yīng)用接口,從中我們可以簡單的了解論文的一些基本情況。2 需求分析與系統(tǒng)總體設(shè)計本設(shè)計的主要任務(wù)是在Visual Studio 2008環(huán)境下完成“基于骨骼模型的舞蹈動作的設(shè)計與實現(xiàn)” 。在設(shè)計的過程中,需要將外部三維模型導(dǎo)入到程序的虛擬環(huán)境中,設(shè)計消息響應(yīng)機(jī)制,設(shè)計舞蹈關(guān)鍵動作,并設(shè)計關(guān)鍵動作之間的過渡函數(shù),添加菜單以及消息對話框?qū)θS虛擬人舞蹈動作進(jìn)行控制。從而完成舞蹈動作的變換,產(chǎn)生連續(xù)可變換的舞蹈顯示。2.1需要的結(jié)構(gòu)體和類的含義

23、載入3D文件類: CLoad3DS,將需要載入的3D文件中的模型所需繪制的對象的相關(guān)數(shù)據(jù)封裝到這個類中。如讀字符串、塊、對象塊、材質(zhì)塊、對象顏色的RGB值、對象的頂點、對象的面信息、對象的紋理坐標(biāo)、對象的材質(zhì)名稱,計算對象頂點的法向量,關(guān)閉文件并釋放內(nèi)存空間等等。模型控制類:Skeleton,將模型繪制的部件,模型繪制時需要的模式等相關(guān)數(shù)據(jù)封裝在這個類中。如本論文中的模型分為身體、左右上臂、左右前臂、左右手腕、左右手的各個關(guān)節(jié)手骨、左右大腿、左右小腿以及左右腳等的主要成員方法都封裝在這個類中。模型骨骼旋轉(zhuǎn)控制類: Rotation,將有關(guān)于模型的骨骼旋轉(zhuǎn)需要的方法封裝到這個類中。其中包括獲取旋

24、轉(zhuǎn)角度,初始化記憶角度,獲取記錄中間角度,骨骼角度過渡變換控制等相關(guān)方法。相關(guān)結(jié)構(gòu)體的定義: tFace,對象面的結(jié)構(gòu)體定義。定義頂點索引變量以及紋理坐標(biāo)索引變量。tMaterialInfo,對象材質(zhì)信息的結(jié)構(gòu)體定義。定義紋理名稱,表示紋理文件名稱,定義對象的RGB顏色,定義紋理ID,定義UV重復(fù)以及UV紋理偏移。t3Dobject,對象信息的結(jié)構(gòu)體定義。定義模型中頂點的數(shù)目,定義模型中面的數(shù)目,定義模型中紋理坐標(biāo)的數(shù)目,定義紋理ID,定義紋理映射狀態(tài),定義對象的名稱,定義對象的頂點,定義對象的法向量,定義紋理UV坐標(biāo),以及定義對象的面信息。t3DModel,模型信息的結(jié)構(gòu)體定義。定義模型中對

25、象的數(shù)目,定義模型中材質(zhì)的數(shù)目,定義材質(zhì)鏈表信息,定義模型中對象鏈表信息。2.2程序功能框架圖2-1 程序功能框架程序運行后,可以在菜單中選中要操作的選項,對應(yīng)的選項會彈出對應(yīng)的對話框??梢詫θ梭w模型進(jìn)行變換操作,每一種選擇都對應(yīng)一個舞蹈動作。當(dāng)操作者不會操作時看看幫助中的操作幫助即可。當(dāng)操作者想要關(guān)閉窗口時,可以直接關(guān)閉窗口,可以在菜單的選項中選擇退出,也可以直接按Esc鍵退出。2.3程序概要設(shè)計簡介本程序的目標(biāo)是骨骼模型的舞蹈動作的設(shè)計與實現(xiàn),因此設(shè)計了載入3D文件類Cload3DS,模型控制類Skeleton,模型骨骼旋轉(zhuǎn)控制類Rotation這三個主要的類。為配合載入3D外部文件,還設(shè)

26、計了tFace、tMaterialInfo、t3DObject、t3DModel等幾個結(jié)構(gòu)體,負(fù)責(zé)記錄讀取3D文件信息。本程序為三維模型設(shè)計了一系列的關(guān)鍵動作,幾乎包括了人體所有關(guān)節(jié)的控制。在這些舞蹈關(guān)鍵動作的控制過程中,可以分別對虛擬人的左右手進(jìn)行操作,根據(jù)對話框選中的信息在模擬數(shù)據(jù)庫中查找相應(yīng)的數(shù)據(jù)信息,反應(yīng)給虛擬人,在屏幕上產(chǎn)生舞蹈關(guān)鍵動作變換。2.4程序執(zhí)行流程圖 圖2-2 程序流程圖2.5系統(tǒng)設(shè)計特點介紹在“基于骨骼模型的舞蹈動作的設(shè)計與實現(xiàn)”的設(shè)計中,采用Visual Studio 2008的開發(fā)環(huán)境中的Win 32 模式框架設(shè)計模塊,圖形控制和處理接口采用OpenGL接口。將舞蹈

27、動作的關(guān)鍵數(shù)據(jù)保存在虛擬數(shù)據(jù)庫中,初始骨骼基本位置,通過對話框上控件資源的消息響應(yīng)獲取對應(yīng)數(shù)據(jù)位置,將新的舞蹈動作位置放入中間過渡函數(shù)中,經(jīng)過加工處理,虛擬人舞蹈動作動作平緩過渡到下一個舞蹈動作。2.6本章小結(jié)本章主要介紹程序的基本功能框架結(jié)構(gòu)和主要的程序開發(fā)流程,對主要的幾個類以及結(jié)構(gòu)體進(jìn)行了簡要的介紹,并且還介紹了一些本設(shè)計的設(shè)計特點以及設(shè)計內(nèi)容。通過本章的概要描述,讀者可以對本設(shè)計有一個初步的了解。3 程序詳細(xì)設(shè)計3.1 建立三維基礎(chǔ)模型首先在3DsMax軟件環(huán)境中創(chuàng)建一個新的工程,取名為Skeleton,利用基礎(chǔ)模型拼出基本骨骼模型,再通過擠壓變形等復(fù)雜處理后形成骨骼模型,運行結(jié)果如圖

28、3-1。圖3-1 三維骨骼模型的建立3.2 建立Win32工程在Visual Studio 2008軟件環(huán)境中創(chuàng)建一個Win32 Application類型的空的工程,取名為FingerLanguage,新建Main.h頭文件、Init.cpp和Main.cpp文件。其中Main.h頭文件中包含主程序需要引用的外部頭文件,必要的結(jié)構(gòu)體的定義,以及一些必要的方法的定義。Init.cpp文件負(fù)責(zé)創(chuàng)建窗口,初始化窗口,以及窗口狀態(tài)的判斷。Main.cpp文件負(fù)責(zé)程序的主體運行。創(chuàng)建窗口的初始化設(shè)置:wndclass.style = CS_HREDRAW | CS_VREDRAW;/使用C的按位“或”

29、操作符組合了兩個“類風(fēng)格”標(biāo)識符wndclass.cbClsExtra = 0 ;/預(yù)留空間wndclass.cbWndExtra = 0 ;/預(yù)留空間wndclass.lpfnWndProc = WinProc;/將窗口類的窗口過程設(shè)置為WinProcwndclass.hInstance = hInstance;/實例句柄wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);/為窗口設(shè)置一個圖標(biāo)wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);/加載一個預(yù)先定義的鼠標(biāo)光標(biāo)(命名為IDC_ARROW),并返

30、回該光標(biāo)的句柄wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);/設(shè)置窗口顏色wndclass.lpszClassName = GameTutorials;/設(shè)置類名wndclass.lpszMenuName= (LPCSTR)IDR_MENU1;/指定窗口菜單RegisterClass(&wndclass);/注冊窗口類調(diào)用創(chuàng)建窗口函數(shù),定義窗口名稱為“3D Finger Language” ,創(chuàng)建窗口,運行結(jié)果如圖3-2。圖3-2 創(chuàng)建的初始窗口3.3 創(chuàng)建資源文件在文件選項中選中“新建” ,新建一個資源腳本文件,如圖3-3所示。圖3-3

31、 創(chuàng)建資源腳本文件3.3.1創(chuàng)建菜單菜單在計算機(jī)程序中是出現(xiàn)在顯示屏上的選項列表,通常點擊菜單會彈出對話框。在資源腳本文件中插入菜單(Menu),建立一個名為IDR_MENU1的菜單。并在菜單中添加“選項” 、“幫助”等菜單選項。在“選項”列表里添加“選擇舞蹈動作” 、“選擇舞蹈” 、“退出”等選項,在“幫助”列表里添加“關(guān)于” 、“操作幫助”等選項。3.3.2創(chuàng)建對話框?qū)υ捒颍ㄈ鐖D3-4)是一種次要的窗口,包含按鈕和各種選項,通過它們可以完成特定的命令和任務(wù)。圖3-4 創(chuàng)建對話框在資源腳本文件中插入對話框(Dialog),根據(jù)菜單中的不同選項列表,我們需要創(chuàng)建多個對話框。其中有,關(guān)于對話框,

32、幫助對話框,選擇分解動作對話框,選擇舞蹈動作對話框。圖3-5至圖3-6是分別對菜單中對應(yīng)的對話框進(jìn)行的設(shè)計。圖3-5 選擇舞蹈動作對話框 圖3-6 操作幫助對話框 3.4 三維模型的載入創(chuàng)建3Ds.h頭文件,此文件與三維模型的載入密切相關(guān)。在此頭文件中定義Cload3DS類,該類包括打開3D文件的方法、字符串的讀入、塊的讀入、對象塊的讀入、材質(zhì)塊的讀入、對象顏色RGB值信息的讀入、對象頂點信息的讀入、對象紋理坐標(biāo)信息的讀入、對象材質(zhì)名稱的讀入、對象頂點法向量的計算以及關(guān)閉文件并釋放內(nèi)存空間的方法等等。將需要變換的身體部件在3DsMax軟件中進(jìn)行拆分,并分別保存。由于需要載入的三維文件數(shù)量較多,

33、因此需要將這些零散部件加以整理,方便程序中的調(diào)用。創(chuàng)建一個Add3Ds.h頭文件,在此頭文件中定義Skeleton類,將骨骼零部件需要的方法集中在這個類中。在Skeleton類中包含模型的繪制模式的定義以及繪制模式的設(shè)置和獲取,以及骨骼模型身體各個部件的繪制方法。如一個手掌上的手指需要有運動變換,那么就將這些手指在虛擬場景中分別繪制,再加以變換。載入到OpenGL三維虛擬場景中的三維骨骼模型如圖3-7。圖3-7 載入到虛擬場景中的三維骨骼模型3.5 三維模型骨骼的控制創(chuàng)建DataBase.h頭文件,此文件包含虛擬數(shù)據(jù)庫信息。將虛擬人需要轉(zhuǎn)動的方向編號,并根據(jù)編號位置設(shè)置旋轉(zhuǎn)角度,組成一個個關(guān)鍵

34、動作,將每一個關(guān)鍵動作分別存放在左側(cè)肢體數(shù)組和右側(cè)肢體數(shù)組中。為了更方便的控制三維模型以及方法的重用,定義一個Rotation類,將需要獲取的左右肢體角度信息的獲取方法,記憶角度信息的方法,角度中間過渡的方法等封裝在這個類中,當(dāng)需要調(diào)用角度變換的時候,即可方便調(diào)用。3.6 OpenGL的簡單應(yīng)用本設(shè)計使用gluLookAt()函數(shù)改變場景的觀察角度。設(shè)計三個變量,分別對模型進(jìn)行近視、遠(yuǎn)視、俯視、仰視、左視、右視進(jìn)行觀察。使用glTranslatef()函數(shù)對場景中的模型坐標(biāo)進(jìn)行上下左右的移動,方便觀察。按下鼠標(biāo)左鍵改變模型的繪制模式,按下鼠標(biāo)右鍵改變場景的光照模式。gluLookAt(gVie

35、wPosX, gViewPosY, gViewPosZ,gViewDirX, gViewDirY, gViewDirZ,gViewUpDirX, gViewUpDirY, gViewUpDirZ)函數(shù)中的前三個變量的改變可以改變觀察者的位置,中間三個變量的改變可以改變觀察者視角的方向,最后三個變量的改變可以改變觀察的正方向。3.6.1平移變換glTranslatefd(TypeX, TypeY, TypeZ)函數(shù)的平移變換是在模型矩陣中進(jìn)行的,所以在實行幾何變換的時候,如果不能確定當(dāng)前的操作矩陣是模型矩陣,就要使用glMatrixMode()函數(shù)來指定當(dāng)前操作的矩陣類型,執(zhí)行這個函數(shù)的結(jié)果相當(dāng)

36、于將當(dāng)前M =1 0 0 x0 1 0 y0 0 1 z0 0 0 1的模型變換矩陣乘以矩陣并把結(jié)果置為當(dāng)前的模型變換矩陣,相當(dāng)于把坐標(biāo)原點移動到(x,y,z)所指的位置。該函數(shù)移動的是坐標(biāo)系,而不是物體。3.6.2旋轉(zhuǎn)變換glRotatefd(Type angle, TypeX, TypeY, TypeZ)函數(shù)中第一個參數(shù)是表示目標(biāo)沿著從點(x,y,z)到原點的方向逆時針旋轉(zhuǎn)的角度,后三個參數(shù)是旋轉(zhuǎn)的方向點坐標(biāo)。這個函數(shù)表示用這四個參數(shù)生成的矩陣乘以當(dāng)前的矩陣,當(dāng)角度參數(shù)是0.0時,表示對物體沒有影響。該函數(shù)旋轉(zhuǎn)的也是坐標(biāo)系,而非物體本身。3.6.3平移變換和旋轉(zhuǎn)變換的關(guān)系先平移后旋轉(zhuǎn),從觀

37、察者的角度來看,物體的平移方向和旋轉(zhuǎn)方向和沒有平移旋轉(zhuǎn)變換之前是相同的。先旋轉(zhuǎn)后平移,由于旋轉(zhuǎn)后坐標(biāo)系方向改變了,因此再次平移就是沿著新的坐標(biāo)系方向平移變換,所以觀察者再次看到的變換方向就和原來的方向不同了。在本設(shè)計中,因為要模擬骨骼轉(zhuǎn)動,因此先要將坐標(biāo)系的原點移動到旋轉(zhuǎn)點上,使得肢體繞著該點旋轉(zhuǎn),然后將坐標(biāo)系原點位置歸還為初值。即先平移,再旋轉(zhuǎn),然后再平移回來。這樣,既可以使得肢體繞固定點旋轉(zhuǎn),又不影響其他身體部件位置的改變,從而模擬虛擬人的骨骼旋轉(zhuǎn)變換。3.7 三維模型手勢的設(shè)計在本設(shè)計中,設(shè)計了多個關(guān)鍵手勢,并對左右手分別進(jìn)行了設(shè)計,可以分別控制左右手的變換。關(guān)于左右手分別控制在對話框中

38、的設(shè)計,我們僅以“選擇手勢”對話框為例。在菜單選項中選擇“選擇手勢”的菜單,彈出對話框,進(jìn)行對手勢的分別選擇。在對對話框的設(shè)計過程中,每一個控件在資源文件中都有定義了一個特定的值,在設(shè)計的過程中,這些值在同一個對話框中都是連續(xù)的,而在程序中對其調(diào)用的時候減去多余的值即是數(shù)組中的對應(yīng)值,從而達(dá)到調(diào)用關(guān)鍵手勢數(shù)據(jù)的效果。LRESULT CALLBACK Addwords(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)switch (message)case WM_INITDIALOG:RiChoice = RiCurrentChoice

39、;LiChoice = LiCurrentChoice;ifcontinue = 0;Rcon = 0; Lcon = 0;CheckRadioButton (hDlg, IDC_RADIOR0, IDC_RADIORD, RiChoice) ;CheckRadioButton (hDlg, IDC_RADIOL0, IDC_RADIOLD, LiChoice) ;SetFocus (GetDlgItem (hDlg, RiChoice) ;return FALSE ;case WM_COMMAND:switch (LOWORD (wParam) case IDOK:RiCurrentChoi

40、ce = RiChoice;LiCurrentChoice = LiChoice;EndDialog (hDlg, LOWORD(wParam) ;return TRUE;case IDCANCEL:EndDialog(hDlg, LOWORD(wParam);return TRUE;case IDC_RADIOR0:case IDC_RADIORA:case IDC_RADIORB:case IDC_RADIORC:case IDC_RADIORD:ifcontinue = 0;RiChoice = LOWORD (wParam) ;CheckRadioButton (hDlg, IDC_R

41、ADIOR0, IDC_RADIORD, LOWORD (wParam) ;ChangeTheBlock (RiChoice, LiChoice) ;return TRUE ;case IDC_RADIOL0:case IDC_RADIOLA:case IDC_RADIOLB:case IDC_RADIOLC:case IDC_RADIOLD:ifcontinue = 0;LiChoice = LOWORD (wParam) ;CheckRadioButton (hDlg, IDC_RADIOL0, IDC_RADIOLD, LOWORD (wParam) ;ChangeTheBlock (R

42、iChoice, LiChoice) ;return TRUE ;break;case WM_PAINT: ChangeTheBlock (RiChoice, LiChoice) ; RenderScene() ; break ; return FALSE;以下是一些舞蹈的關(guān)鍵動作與原視頻的截圖(如圖): 圖3-8 圖3-9 圖3-10圖3-11 圖3-12圖3-13 圖3-14圖3-15以上是舞蹈變換關(guān)鍵動作的例圖,為了更好的控制舞蹈動作,特別設(shè)計了一個虛擬舞蹈動作數(shù)據(jù)庫,存于專門的數(shù)組中。由于本設(shè)計中的舞蹈動作繁多,一一列出略顯繁雜,故而僅列出右手控制的數(shù)據(jù),簡單介紹一下本設(shè)計的虛擬數(shù)據(jù)庫

43、表的設(shè)計思想。如下表3-1:單位:度精確到:0.1f圖3-8圖3-9圖3-10圖3-11圖3-12圖3-13圖3-14圖3-15 1 x軸上臂旋轉(zhuǎn)180000000180 2 y軸上臂旋轉(zhuǎn)-900000000 3 x軸前臂旋轉(zhuǎn)9016516416516516515020 4 y軸前臂旋轉(zhuǎn)90003.5009090 5 x軸上臂移動0003.50400 6 x軸前臂移動00000200 7 大拇指2號旋轉(zhuǎn)0070700000 8 大拇指3號旋轉(zhuǎn)0090900000 9 食指1號旋轉(zhuǎn)0000000010 食指2號旋轉(zhuǎn)009090000011 食指3號旋轉(zhuǎn)009090000012 食指4號旋轉(zhuǎn)000

44、0000013 中指1號旋轉(zhuǎn)0000000014 中指2號旋轉(zhuǎn)009090000015 中指3號旋轉(zhuǎn)009090000016 中指4號旋轉(zhuǎn)0000000017 無名指1號旋轉(zhuǎn)0000000018 無名指2號旋轉(zhuǎn)009090000019 無名指3號旋轉(zhuǎn)009090000020 無名指4號旋轉(zhuǎn)0000000021 小拇指1號旋轉(zhuǎn)0000000022 小拇指2號旋轉(zhuǎn)009090000023 小拇指3號旋轉(zhuǎn)009090000024 小拇指4號旋轉(zhuǎn)0000000025 x軸身體旋轉(zhuǎn)00015000026 x軸身體移動00-13.5040027 z軸右大腿旋轉(zhuǎn)00050-100028 x軸右大腿移動00-

45、12040029 z軸右小腿旋轉(zhuǎn)0005000030 x軸右小腿移動00-12050031 y軸右大腿旋轉(zhuǎn)0000020032 x軸前臂旋轉(zhuǎn)000000-35-9033 x軸手腕旋轉(zhuǎn)000000-45034 z軸上臂旋轉(zhuǎn)00-100004535 x軸右腳旋轉(zhuǎn)0000050041 x軸上臂旋y軸上臂移動00-30000044 z軸身體旋轉(zhuǎn)00-0.70000045 x軸大腿旋轉(zhuǎn)00000-400046 y軸小腿移動00000-20047 z軸小腿,腳移動0000000048 z軸大腿移動0000000049 y軸手腕旋轉(zhuǎn)0000000050 y軸腳移動00000-20

46、03.8 過渡函數(shù)的設(shè)計在本設(shè)計中為了使關(guān)鍵手勢之間更好的過渡,而設(shè)計了過渡函數(shù)。以右手的過渡函數(shù)為例。void Rotation:RMiddle(GLfloat array)/中間過渡函數(shù)for(int i = 0; i = 0.0f & RFreeNi 0.1f | RFreeNi -0.1f)RMemberAnglei = arrayi;if(ifcontinue = 1)rcontinuous = 1 ;RMemberAnglei += RFreeNi / 160.0f ;在這個函數(shù)中array數(shù)組是新的關(guān)鍵舞蹈動作數(shù)組中的數(shù)據(jù),MINSIZE是經(jīng)過宏定義的列坐標(biāo)的總數(shù),即各個關(guān)節(jié)需要

47、控制的總數(shù)。RmemberAngle數(shù)組是用于記錄上一次變換后的數(shù)組,RfreeN數(shù)組負(fù)責(zé)記錄新數(shù)據(jù)和記憶數(shù)據(jù)之差,然后用這個差數(shù)據(jù)去除以一個特定的閾值,在我的設(shè)計中,我定義該閾值為160.0f,該閾值的大小決定了舞蹈關(guān)鍵動作之間過渡的速度,閾值越小速度越快,反之則越大。在過渡函數(shù)被調(diào)用的過程中,判斷新數(shù)組和記憶數(shù)組的差值是否已經(jīng)足夠小,如果足夠小,則直接將新數(shù)組中的數(shù)據(jù)賦值給記憶數(shù)組,以免產(chǎn)生無限循環(huán)的狀況。三維虛擬人舞蹈動作的平滑度直接影響到舞蹈運動的可懂性。虛擬人舞蹈動作的特殊性在于它是有一些關(guān)鍵動作合成的動畫序列,相鄰的兩個舞蹈動作之間存在著很大的動作差異,如果不進(jìn)行平滑處理,將導(dǎo)致舞

48、蹈動作在相鄰關(guān)鍵動作的銜接處產(chǎn)生大幅度變化,這樣將產(chǎn)生跳幀現(xiàn)象,給人不舒服的感覺。加入設(shè)計的過渡函數(shù)后,動作平緩過渡,動作銜接流暢,比較符合真實狀態(tài)下人的舞蹈過程。3.9 燈光效果的設(shè)計在本程序中為了盡可能的使最終效果接近于動畫或影視作品的效果,添加的燈光的效果。在本例中,自上而下添加了一個類似聚光燈的效果。下面對光照效果的處理做一下簡單的介紹。3.9.1 關(guān)于光照效果當(dāng)光照射到一個物體表面上時,會出現(xiàn)三種情形。首先,光可以通過物體表面向空間反射,產(chǎn)生反射光。其次,對于透明體,光可以穿透該物體并從另一端射出,產(chǎn)生透射光。最后,部分光將被物體表面吸收而轉(zhuǎn)換成熱。在上述三部分光中,僅僅是透射光和反

49、射光能夠進(jìn)入人眼產(chǎn)生視覺效果。由于真實感圖形是通過景物表面的顏色和明暗色調(diào)來表現(xiàn)景物的幾何形狀、空間位置以及表面材料的,而一個物體表面所呈現(xiàn)的顏色是由表面向視線方向輻射的光能決定的。在計算機(jī)圖形學(xué)中,常采用一個既能表示光能大小又能表示其顏色組成的物理量即光亮度(luminance)或光強(qiáng)(intensity of light)來描述物體表面朝某方向輻射光能的顏色。采用這個物理量可以正確描述光在物體表面的反射、透射和吸收現(xiàn)象,因而可以正確計算處物體表面在空間給定方向上的光能顏色。物體表面向空間給定方向輻射的光強(qiáng)可應(yīng)用光照模型進(jìn)行計算。簡單的光照模型通常假定物體表面是光滑的且由理想材料構(gòu)成,因此只

50、考慮光源照射在物體表面產(chǎn)生的反射光,所生成的圖形可以模擬處不透明物體表面的明暗過渡,具有一定的真實感效果。復(fù)雜的光照模型除了考慮上述因素外,還要考慮周圍環(huán)境的光對物體表面的影響。如光亮平滑的物體表面會將環(huán)境中其它物體映像在表面上,而通過透明物體也可看到其后的環(huán)境景象。這類光照模型稱為整體光照模型,它能模擬出鏡面映像、透明等較精致的光照效果。為了更真實的繪制圖形,還要考慮物體表面的細(xì)節(jié)紋理,這通常使用一種稱為“紋理映射”(texture mapping)的技術(shù)把已有的平面花紋圖案映射到物體表面上,并在應(yīng)用光照模型時將這些花紋的顏色考慮進(jìn)去,物體表面細(xì)節(jié)的模擬使繪制的圖形更接近自然景物。在OpenGL簡單光照模型中的幾種光分為:輻射光(Emitted Light)、環(huán)境光(Ambient Light)、漫射光(Diffuse Light)、鏡面光(Specular Light)。輻射光是最簡單的一種光,它直接從物體發(fā)出并且不受任何光源影響。環(huán)境光是由光源發(fā)出經(jīng)環(huán)境多次散射而無法確定其方向的光,即似乎來自所有方向。一般說來,房間里的環(huán)境光成分要多些,戶外的相反要少得多,因為大部分光按相同方向照

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論