【LearnOpenGL】【P12】導(dǎo)入原神的3D模型

0 上一章節(jié)我們創(chuàng)建了豐富的光照類(lèi)型場(chǎng)景,本章節(jié)我們將使用第三方“Assimp”庫(kù)導(dǎo)入3維模型文件,并在場(chǎng)景中進(jìn)行模型渲染。
(1)配置Assimp動(dòng)態(tài)鏈接庫(kù)。
(2)創(chuàng)建Mesh類(lèi)。
(3)創(chuàng)建Model類(lèi)。
(4)導(dǎo)入原神模型文件。

1.0 配置Assimp動(dòng)態(tài)鏈接庫(kù)。
1.1 下載Assimp(https://kimkulling.itch.io/the-asset-importer-lib)。

1.2 安裝Assimp后找到它bin目錄下的動(dòng)態(tài)鏈接庫(kù)文件,將該dll文件復(fù)制到我們項(xiàng)目的Debug目錄下。


1.3 在項(xiàng)目屬性里設(shè)置好頭文件路徑、靜態(tài)鏈接庫(kù)路徑和靜態(tài)鏈接庫(kù)名。?


?


2.0 創(chuàng)建Mesh類(lèi)。
2.1 該網(wǎng)格類(lèi)的成員變量將存放網(wǎng)格模型的頂點(diǎn)信息、頂點(diǎn)索引信息以及紋理信息。

2.2 在類(lèi)初始化時(shí)會(huì)根據(jù)頂點(diǎn)、索引和紋理信息生成對(duì)應(yīng)的VAO、VBO以及EBO對(duì)象,并將以上對(duì)象綁定到OpenGL的buffer中。


2.3 Mesh的繪制接口將綁定VAO對(duì)象,使用紋理和索引信息繪制圖像。


3.0 創(chuàng)建Model類(lèi)。
3.1 創(chuàng)建模型類(lèi),該類(lèi)對(duì)象的抽象層次比Mesh類(lèi)更高一級(jí),模型類(lèi)將記錄模型文件的導(dǎo)入路徑,并存儲(chǔ)經(jīng)過(guò)Assimp庫(kù)轉(zhuǎn)換后得到的網(wǎng)格對(duì)象數(shù)組。我們還會(huì)同時(shí)記錄模型的紋理緩存,以此來(lái)提高模型紋理的導(dǎo)入效率,避免重復(fù)的紋理加載過(guò)程。

3.2 在構(gòu)造Model對(duì)象時(shí),通過(guò)傳入的路徑加載模型文件到網(wǎng)格數(shù)據(jù)。


3.3 使用Assimp庫(kù)的接口得到Assimp的場(chǎng)景對(duì)象。使用遞歸的方式遍歷場(chǎng)景對(duì)象里所有的節(jié)點(diǎn)數(shù)據(jù)。

3.4 將Assimp的Mesh信息轉(zhuǎn)換為我們自己的Mesh類(lèi)的信息。



4.0 導(dǎo)入原神模型文件。
4.1 下載網(wǎng)絡(luò)上的原神模型文件資源,里面將包含模型文件以及相應(yīng)的貼圖文件。我們將神里綾華(Kamisato Ayaka)和甘雨的模型文件以及貼圖資源放入對(duì)應(yīng)的文件夾位置。






4.2 將兩個(gè)角色的模型路徑作為實(shí)參,創(chuàng)建兩個(gè)Model對(duì)象。

4.3 創(chuàng)建模型的Shader對(duì)象。

4.4 設(shè)置Shader對(duì)象的MVP矩陣,以及法向量轉(zhuǎn)換矩陣。調(diào)用Model對(duì)象的繪制接口將會(huì)遍歷Model里面所有的Mesh對(duì)象的繪制接口。


4.5 編譯運(yùn)行程序,我們就能在場(chǎng)景中得到 甘雨 和 神里綾華 的三維模型啦。




4.6 同理我們還可以導(dǎo)入其他原神角色的模型。



