freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于directx的三維人體建模與運動仿真結(jié)題報告-資料下載頁

2025-07-02 03:19本頁面

【導(dǎo)讀】師的指導(dǎo)下進行的研究工作及取得的成果。盡我所知,除文中特別加。而使用過的材料。均已在文中作了明確的說明并表示了謝意。除了文中特別加以標(biāo)注引用的內(nèi)容外,本論文。不包含任何其他個人或集體已經(jīng)發(fā)表或撰寫的成果作品。究做出重要貢獻的個人和集體,均已在文中以明確方式標(biāo)明。全意識到本聲明的法律后果由本人承擔(dān)。同意學(xué)校保留并向國家有關(guān)部門或機構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán)大學(xué)可以將本學(xué)位。印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。涉密論文按學(xué)校規(guī)定處理。設(shè)計是否有創(chuàng)意?

  

【正文】 hType。 DWORD nMeshRangeIndex。 D3DXMATRIX **ppFrameMatrices。 D3DXMATRIX *pBoneMatrices。 XSSD3DXMESHCONTAINER_EX()。 ~XSSD3DXMESHCONTAINER_EX()。 // Find the mesh by name XSSD3DXMESHCONTAINER_EX *Find(char *MeshName)。 // Find the mesh by MeshIndex XSSD3DXMESHCONTAINER_EX *FindByIndex(DWORD nMeshIndexToSeek)。 // Count the number of Meshes in the x file 信息科學(xué)與技術(shù)學(xué)院 電子工程與信息科學(xué)系 ( EEIS) 19 void Count(DWORD *Num)。 }XSSD3DXMESHCONTAINER_EX, *LPXSSD3DXMESHCONTAINER_EX。 從 XSSD3DXMESHCONTAINER_EX 的定義中可以看到,我們?yōu)榫W(wǎng)格容器添加了用于查找網(wǎng)格的索引信息、區(qū)別網(wǎng)格類型的標(biāo)識信息、一個指向包含該網(wǎng)格的框架的指針以及一組指向網(wǎng)格紋理信息的指針。功能函數(shù)方面添加有統(tǒng)計網(wǎng)格數(shù)量,查找特定網(wǎng)格等。 定義一個 .X 文件解析器,完成所需的解析任務(wù)。本文介紹的解析方法中所使用的解析器 CXInternalParser 定義如下: // Declare an internal .X file parser class for loading meshes and frames class CXInternalParser { public: // Information passed from calling function IDirect3DDevice9 *m_pD3DDevice。 char *m_pTexturePath。 DWORD m_NewFVF。 DWORD m_LoadFlags。 // Flags for which data to load // 1 = mesh, 2 = frames, 3= both DWORD m_Flags。 // Hierarchies used during loading XSSD3DXMESHCONTAINER_EX *m_pRootMesh。 XSSD3DXFRAME_EX *m_pRootFrame。 DWORD m_nNumFrameCount。 DWORD m_nNumMeshCount。 protected: // Function called for every template found BOOL ParseObject(ID3DXFileData *pDataObj, ID3DXFileData *pParentDataObj, DWORD Depth, void **Data, BOOL Reference)。 // Function called to enumerate child templates BOOL ParseChildObjects(ID3DXFileData *pDataObj, DWORD Depth, void **Data, BOOL ForceReference = FALSE)。 public: // Constructor and destructor CXInternalParser()。 ~CXInternalParser()。 信息科學(xué)與技術(shù)學(xué)院 電子工程與信息科學(xué)系 ( EEIS) 20 // Function to start parsing an .X file BOOL Parse(char *Filename, void **Data = NULL)。 // Functions to help retrieve template information const GUID *GetObjectGUID(ID3DXFileData *pDataObj)。 char *GetObjectName(ID3DXFileData *pDataObj)。 void *GetObjectData(ID3DXFileData *pDataObj, DWORD *Size)。 }。 CXInternalParser在解析 .X文件時,首先定義一個用于識別 .X文件中數(shù)據(jù)類型的ID3DXFileEnumObject類型的 枚舉對象 pDXEnum,由 pDXEnum統(tǒng)計 .X文件中ID3DXFileData類型數(shù)據(jù)對象的個數(shù);然后調(diào)用 ParseObject()和 ParseChildObject()功能函數(shù)依次解析每一個數(shù)據(jù)對象。在對數(shù)據(jù)對象的解析過程中,首先由GetObjectGUID()功能函數(shù)獲取數(shù)據(jù)對象的 GUID,此處的 GUID正是 .X文件開始處的模板定義中所說的全局唯一標(biāo)識號( GUID: Globally Unique Identification Number);然后根據(jù)標(biāo)識號區(qū)分出所解析的數(shù)據(jù)對象由哪一種模板定義,從而將各數(shù)據(jù)對象分門別類,與此同時通過 GetObjectName()和 GetObjectData()功能函數(shù)將數(shù)據(jù)對象中的信息導(dǎo)出并記錄到不同的數(shù)據(jù)容器里。當(dāng)然,在解析數(shù)據(jù)對象的同時,根據(jù)應(yīng)用的需求應(yīng)將框架容器與網(wǎng)格容器中的框架索引、網(wǎng)格索引 、層次關(guān)系等填充清楚。 多種模式下的模型運動控制 對三維模型的控制效果最終表現(xiàn)在繪制出的模型的視覺表現(xiàn)。所以對模型的控制便在骨骼的拼接方式或關(guān)節(jié)的繪制方式上面實現(xiàn)。 模型運動控制原理 標(biāo)準(zhǔn)網(wǎng)格模型的控制原理 由上文提到的標(biāo)準(zhǔn)網(wǎng)格模型的存儲方式可以知道,從 .X 文件中我們可以獲取到原始的關(guān)節(jié)模型,為了拼接得到所需比例的人體模型而作用在關(guān)節(jié)上的比例變換矩陣,以及為了將各個關(guān)節(jié)移動到準(zhǔn)確位置以得到人體模型而作用在關(guān)節(jié)上的旋轉(zhuǎn)變換和平移變換矩陣。 在 Direct 3D 的網(wǎng)格模型繪制中,通過 pDeviceIDirect3DDevice9::SetTransform(D3DTS_WORLD, amp。WorldMatrix) 方法來設(shè)置網(wǎng)格繪制的位置以及繪制的方式,比如旋轉(zhuǎn)多少度繪制,按什么比例繪制等。所有繪制方式的參數(shù)都體現(xiàn)在了 4 4 的變換矩陣 WorldMatrix 中。所以在繪制一個關(guān)節(jié)時,首先調(diào)用 SetTransform()函數(shù),以封裝該關(guān)節(jié)的網(wǎng)格信息的框架包含的綜合變換矩陣( XSSFRAME_EX 中的 matCombined 矩陣)為參數(shù),設(shè)置好繪制方式,然后才調(diào)用 ID3DXMesh::DrawSubset()方法繪制相應(yīng)的網(wǎng)格。 由此可知,對模型的控制體現(xiàn)在對變換矩陣 matCombined 的設(shè)置上。由上文變換矩陣作用原理 可知道變換矩陣 matCombined 是本地變換矩陣和上層框架坐標(biāo)系變換矩陣相乘的結(jié)果。修改本地變換矩陣便可以僅對獨立關(guān)節(jié)的繪制狀態(tài)進行特 信息科學(xué)與技術(shù)學(xué)院 電子工程與信息科學(xué)系 ( EEIS) 21 別設(shè)置,從而表現(xiàn)出對單獨關(guān)節(jié)的控制。而修改上層框架的變換矩陣,則由于變換的向下傳遞作用,其子層的所有關(guān)節(jié)的繪制都將受到影響,表現(xiàn)為對相關(guān)聯(lián)的一系列關(guān)節(jié)的控制。例如,如果僅僅對直接包含上臂網(wǎng)格的子框架中的變換矩陣做設(shè)置 ,那么結(jié)果表現(xiàn)為僅對上臂的控制;然而,如果是對同式包含有上臂、下手臂、手掌及手指的框架中的變換矩陣做設(shè)置,則結(jié)果表現(xiàn)為對整條手臂的控制。所以在做變換矩陣的設(shè)置時,一定要嚴(yán)格根據(jù)控制的目的,正確地選擇設(shè)置的框架對象以及變換矩陣對象。 蒙皮網(wǎng)格模型的控制原理 相比于標(biāo)準(zhǔn)網(wǎng)格模型的控制,蒙皮網(wǎng)格模型的控制將采取稍有不同的方法,這是由蒙皮網(wǎng)格模型的繪制方式所決定的。 同樣的,由上文蒙皮網(wǎng)格的存儲方式可知,從 .X 文件中我們可以得到原始的完整的人體網(wǎng)格,將人體網(wǎng)格分解成不同骨骼部位的骨骼變換矩陣,以及將各個骨骼重新 拼接成人體模型的重組變換矩陣。 在蒙皮網(wǎng)格的繪制過程中,首先調(diào)用 ID3DXMESH::CloneMeshFVF()方法將原始人體網(wǎng)格做一個備份;然后將骨骼變換矩陣作用到備份的人體網(wǎng)格上,得到被放置在世界坐標(biāo)中心位置的各塊骨骼,接著將重組變換矩陣分別作用在這些骨骼上,得到一個新的人體網(wǎng)格整體,并將新網(wǎng)格數(shù)據(jù)覆蓋原始的人體網(wǎng)格數(shù)據(jù),這一過程由 ::UpdateSkinnedMesh() 方 法 實 現(xiàn) ; 最 終 直 接 調(diào) 用ID3DXMesh::DrawSubset()方法,一次性將整個人體 網(wǎng)格繪制出來。所以對模型的設(shè)置只能在重組變換矩陣上做文章。與標(biāo)準(zhǔn)網(wǎng)格模型的控制方式相似,在做變換矩陣的設(shè)置時,同樣要嚴(yán)格根據(jù)控制的目的,選擇好設(shè)置的框架對象以及變換矩陣對象。 網(wǎng)格模型的 三種控制模式、兩種控制形式 對網(wǎng)格模型的控制可以歸納為以下三種模式:個體獨立模式、組合整體模式和組合聯(lián)動模式。 所謂個體獨立模式,就是說僅對某一部位做獨立的控制,而該控制不影響任何其他的部位。比如,只希望模型的上臂細(xì)小一些,而不影響下手臂和手掌等部位的特征。在標(biāo)準(zhǔn)網(wǎng)格模型中,要實現(xiàn)這個控制目的,只需找到直接包含上臂網(wǎng)格信息的子框架,然后對該框架中變換矩陣在垂直于上臂方向的比例分量上做一個縮減就可以做到。而在蒙皮網(wǎng)格模型中,則需要為這個獨立變換,在網(wǎng)格容器中額外添加一組變換矩陣變量,并且這些矩陣變換的作用是不傳給與之連接的下層網(wǎng)格的。這就是為什么在 XSSFRAME_EX 框架容器的定義中添加了三個 matSeparate 矩 陣。 組合整體模式,是指對一個部位做一個控制,則與該部位想連接的下層部位都受到相同的控制作用,從而表現(xiàn)出像是對整個關(guān)聯(lián)部位的控制。比如,“正步走”的踢腿動作中,對大腿施加一個旋轉(zhuǎn)控制,則小腿及腳掌也將繞著盆骨和大腿的連接點做一相同的旋轉(zhuǎn),以此保持整條下肢處于筆直狀態(tài)。不論是標(biāo)準(zhǔn)網(wǎng)格模型還是蒙皮網(wǎng)格模型的模擬控制中,我們都可以采用選擇高層部位對應(yīng)的框架,然后設(shè)置其中的可傳遞的變換矩陣,通過作用的傳遞性,讓同樣的變換作用到與之連接的下 信息科學(xué)與技術(shù)學(xué)院 電子工程與信息科學(xué)系 ( EEIS) 22 層的部位,達到一個變換作用多個部位的效果。 組合聯(lián)動模式,是指對一個部位做一個 控制,然而這一控制不會作用到與該部位連接的下層部位中,但是受其影響,下層部位需要做相應(yīng)的平移變換,使自己與受控部位保持連接關(guān)系。比如,假設(shè)一個人的手臂在上臂和下手臂的連接處脫臼了,下手臂不受人體控制處于下垂?fàn)顟B(tài),那么當(dāng)此人忍痛舉起上臂時,下手臂便由于皮膚的連接作用,受上臂的牽動,經(jīng)過一段移動后被懸吊起來,但是仍然處于下垂?fàn)顟B(tài)。三維模型運動仿真在這一模式下的控制可由以下方式實現(xiàn):首先用組合整體模式的變換方式對控制部位做一個控制變換,然后同樣用組合整體模式的變換方式對控制部位直接連接的部位做一個旋轉(zhuǎn)反變換控制, 將所有下層部位旋轉(zhuǎn)到原來的朝向,得到的效果便像是只對一個部位做一個控制,而其他連接部位只是隨之移動以保持連接關(guān)系了。 在具體的變換矩陣的設(shè)置中,根據(jù)是否繼承原有的變換矩陣,網(wǎng)格模型的控制又分為絕對控制和相對控制兩種形式。 所謂絕對控制形式,是指不考慮原有的變換矩陣如何,重新為變換矩陣賦值而得到新的變換矩陣,再使新矩陣作用到模型上,從而獲取控制模型運動的效果。比如,當(dāng)前人體模型臉部的朝向是前方右偏 45176。(約定正前方偏角為 0176。,左偏為負(fù)角度,右偏為正角度),現(xiàn)在希望將臉部的朝向改變?yōu)榍胺阶笃?45176。,即偏角 45176。,那么只需直接將變換矩陣通過數(shù)值計算重新賦為偏角為 45176。時的變換矩陣即可,而不必考慮原來的臉部朝向是什么。在骨骼動畫中模型的控制就是使用絕對控制的方式來實現(xiàn)的,即,在不同的時間點上,用 .X 文件中動畫數(shù)據(jù)的變換矩陣,分別直接賦給相應(yīng)框架的變換矩陣?yán)铮缓蟾驴蚣苄畔⒑途W(wǎng)格,繪制出具有特定形態(tài)的新模型。 而相對控制形式下,對模型的控制則要參考變換矩陣的當(dāng)前值。還是以上述偏轉(zhuǎn)臉部的朝向為例,當(dāng)前朝向為 45176。,目標(biāo)朝向為 45176。,那么其間的轉(zhuǎn)動差值便為 90176。在變換矩陣的計算過程中則采用如下的方法:首先定義一 個臨時矩陣,計算出 90176。的旋轉(zhuǎn)變換對應(yīng)的矩陣保存到臨時矩陣中;然后將當(dāng)前的變換矩陣與臨時矩陣相乘,并將相乘的結(jié)果賦給框架的變換矩陣。由此便得到了與絕對控制形式中得到的 45176。的偏角對應(yīng)的旋轉(zhuǎn)變換相同的變換矩陣,從而達到相同的控制效果。在實時模型控制的應(yīng)用中,相對控制方式就會更實用一些。 三種類型變換的作用效果和施加變換的次序規(guī)則 不論是標(biāo)準(zhǔn)網(wǎng)格模型還是蒙皮網(wǎng)格模型,它們都具有一個相同的狀態(tài),即分解成零散的關(guān)節(jié)或骨骼后被置放在世界坐標(biāo)系的 中 心位置,而且特別強調(diào)關(guān)節(jié)與上層關(guān)節(jié),骨骼與上層骨骼的連接點 幾乎 是與坐標(biāo)原點 (0, 0, 0)重疊在一起的 ,甚至連關(guān)節(jié)或骨骼的幾何對稱軸都近乎與坐標(biāo)軸重合 。這樣做會有什么特別的用意呢?這就要從
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1