OpenGL 05 Assimp 網格 模型

2022-09-14 14:30:21 字數 1424 閱讀 2046

在learnopengl**學習,記錄一下學習筆記

目錄model

利用assimp庫匯入的模型庫,結構目錄如下:

1.首先有將所有的資料讀取儲存到scene

2.每個node節點都會對應乙個mesh,mesh的索引儲存在node中

3.每個material的索引都會儲存在mesh當中

4.每個mesh都會有繪圖所使用的繪圖順序,這個順序儲存在face中

mesh類,的主要作用是將讀取到mesh的資料進行分類。

在構造器中,我們將所有必須的資料賦予了網格,

我們在setupmesh函式中初始化緩衝,

並最終使用draw函式來繪製網格。注意我們將乙個著色器傳入了draw函式中,將著色器傳入網格類中可以讓我們在繪製之前設定一些uniform(像是鏈結取樣器到紋理單元)。

class mesh ;
結構體的另外乙個很好的用途是它的預處理指令offsetof(s, m),它的第乙個引數是乙個結構體,第二個引數是這個結構體中變數的名字。這個巨集會返回那個變數距結構體頭部的位元組偏移量(byte offset)。這正好可以用在定義glvertexattribpointer函式中的偏移引數:

glvertexattribpointer(1, 3, gl_float, gl_false, sizeof(vertex), (void*)offsetof(vertex, normal))
model類使用來載入模型資料到mesh當中,匯入到mesh,分別匯入vertices、indices、textures。

構造器需要我們給它乙個檔案路徑。在構造器中,它會直接通過loadmodel來載入檔案。私有函式將會處理assimp匯入過程中的一部分,我們很快就會介紹它們。我們還將儲存檔案路徑的目錄,在之後載入紋理的時候還會用到它。

class model 

void draw(shader shader);

private:

/* 模型資料 */

vectormeshes;

string directory;

/* 函式 */

void loadmodel(string path);

void processnode(ainode *node, const aiscene *scene);

mesh processmesh(aimesh *mesh, const aiscene *scene);

vectorloadmaterialtextures(aimaterial *mat, aitexturetype type,

string typename);

};

OpenGL3 3使用Assimp匯入骨骼

我們在每個頂點中新增骨骼陣列 如圖 weight是每個骨骼對該頂點的權重 總共加起來不能超過1 骨骼 id 是存放所有骨骼變換的陣列中的索引,這些變換會在進行 wvp 變換之前作用到位置向量和法線向量上 即將頂點從骨骼空間中變換到區域性座標系中 骨骼樹中的骨骼變換是在骨骼空間中進行的 每個骨骼都有其...

OpenGL學習05 繪製實心物體

使用三角形或者多邊形結合在一起,我們可以繪製實心物體 3d物體 本篇中使用三角形繪製圓錐形。下面測試第乙個opengl程式 void renderscene void glend glpopmatrix glutswapbuffers 執行結果,如下圖 1 設定多邊形顏色 顏色實際上是以頂點為單位指...

SpringCloud 05 Zuul路由閘道器

zuul很簡單,大致是這麼玩的 zuul它本身也是乙個註冊在eureka的微服務 它為其他的微服務提供乙個統一的對外的視窗 這樣便隱藏了服務的位址,同時也可以隱藏服務名,並且限定如何訪問服務 依賴 dependencies dependency groupid org.example groupid...