日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CSharpGL(50)使用Assimp加载骨骼动画

發(fā)布時間:2025/3/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CSharpGL(50)使用Assimp加载骨骼动画 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

CSharpGL(50)使用Assimp加載骨骼動畫

在(http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html)介紹了C++用Asismp庫加載骨骼動畫的原理和流程。

在(http://wiki.jikexueyuan.com/project/modern-opengl-tutorial/tutorial45.html)是其中文版譯文。

本文用CSharpGL借助Assimp庫實現(xiàn)加載和渲染骨骼動畫的功能。

下載

CSharpGL已在GitHub開源,歡迎對OpenGL有興趣的同學加入(https://github.com/bitzhuwei/CSharpGL)

在.NET下使用Assimp

三維模型解析庫Assimp本身是用C++編寫的,所幸有一個C#的封裝(https://github.com/assimp/assimp-net)。使用此封裝即可直接在CSharpGL中調(diào)用Assimp了。

將Assimp32.dll、Assimp64.dll和AssimpNet.dll都放到項目所在目錄下,在Reference中添加對AssimpNet.dll的引用即可。

?

?

渲染骨骼動畫

Assimp加載模型后得到的數(shù)據(jù)結(jié)構(gòu)如下:

1 public sealed class Scene 2 { 3 public Animation[] Animations { get; } 4 public Material[] Materials { get; } 5 public Mesh[] Meshes { get; } 6 public Node RootNode { get; } 7 }

按我的理解,其中的RootNode就是骨骼的根結(jié)點。整個骨骼構(gòu)成一個樹結(jié)構(gòu)。每個結(jié)點都包含一個mat4 Transform矩陣,用于描述自己相對于父結(jié)點的方位變化。子結(jié)點代表的骨骼,其絕對方位由根結(jié)點的Transform逐步地乘到自己的Transform來得到。“絕對方位”指的就是在Model Space中的方位。

?

如圖所示,紅色的小方塊描述了骨骼所在的絕對位置(這里的骨骼對應(yīng)人體的關(guān)節(jié))。從紅到白漸變的線條描述了骨骼之間的父子關(guān)系,紅色一端為父結(jié)點,白色一端為子結(jié)點。兩腳之間的那個紅色小方塊,就是根結(jié)點RootNode。用半透明方式渲染的兩臂水平擺放的,就是模型的默認位置。

上圖這個模型,只有一個“拿起燈左右查看”的動作(Animation)。其他模型可能有多個動作,它們構(gòu)成一個數(shù)組(Assimp.Animation[])。每個Animation都指定了這個模型的所有骨骼在所有關(guān)鍵幀上的Transform值。這樣,通過按時間順序依次經(jīng)歷各個關(guān)鍵幀(更準確地說,是在2個相鄰的關(guān)鍵幀之間插值),就可以得到骨骼在各個時刻的Transform。再讓模型的頂點依附于骨骼而動,就實現(xiàn)了骨骼動畫。

模型上的一個頂點,要記錄自己都依附于哪幾個骨骼,自己對這幾個骨骼依附的權(quán)重分別是多少(權(quán)重之和為1)。然后,就可以從默認的初始位置(用半透明方式渲染的兩臂水平擺放的那個位置)變換到骨骼要求的位置。

頂點的這一變換過程我還沒弄明白。這里需要的Offset Matrix到底是什么。據(jù)我查資料,外加計算,Offset Matrix就是那個讓骨骼結(jié)點變換到絕對方位的矩陣的逆矩陣。但是總覺得有點想不通的地方,確不知道是哪里。

?(暫留空白,來日補充。)?

總結(jié)

骨骼動畫的原理網(wǎng)上有很多介紹了。我還沒有透徹理解,所以不對本文的原理部分負責。

?

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的CSharpGL(50)使用Assimp加载骨骼动画的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。