我們暫時不使用光照,只簡單地將紋理貼在模型上。
在這裡,我們載入的模型叫做 chalet hippolyte chassande baroz。我
們對它的大小和方向進行了調整:
這一模型大概由 50 萬面三角形構成。
大小為1.5x1.5x1.5。如果使用的模型大於這一尺寸,讀者就需要對使用的檢視矩陣進行修改。
示例:
#define glm_force_radians
//用來使 glm::rotate這些函式使用弧度作為引數的單位
/**預設情況下,glm 庫的透視投影矩陣使用 opengl 的深度值範圍 (-
1.0,1.0)。我們需要定義 glm_force_depth_zero_to_one 巨集
來讓它使用 vulkan 的深度值範圍 (0.0,1.0)。
*/#define glm_force_depth_zero_to_one
#define glm_enable_experimental
//啟用glm 庫的雜湊函式
#include
//線性代數庫
//為了使用glm::rotate之類的矩陣變換函式
#include
#include
#define tinyobjloader_implementation
#include
#include
//重寫==運算子
bool
operator==(
const vertex& other)
const
//對 vertex 結構體進行雜湊的函式
//繫結頂點緩衝到指令緩衝物件--第三個引數為索引資料的型別
vkcmdbindindexbuffer
(commandbuffers[i]
,indexbuffer,0,
vk_index_type_uint32)
; stbi_uc* pixels =
stbi_load
(texture_path.
c_str()
,&texwidth,
&texheight,
&texchannels,
stbi_rgb_alpha)
;//載入模型檔案,填充模型資料到 vertices 和 indices
void
loadmodel()
/** 我們需要達到索引緩衝節約空間的目的。三角形表面的頂點是被多個三角形表面共用的,
而我們則是每個頂點都重新定義一次,vertices 向量包含了大量重複的頂點資料。
我們可以將完全相同的頂點資料只保留乙個,來解決空間。
這一去重過程可以通過 stl 的 map 或unordered_map 來實現:
*/std::unordered_mapuint32_t
> uniquevertices;
//將載入的表面資料複製到我們的 vertices 和 indices 向量中
for(
const
auto
& shape : shapes)
;/**
為了簡化 indices 陣列的處理,我們這裡假定每個頂點都是獨一無
二的,可以直接使用 indices 陣列的當前大小作為頂點索引資料。上面
**中的 index 變數的型別為 tinyobj::index_t,這一型別的變數包含了
vertex_index、normal_index 和 texcoord_index 三個成員變數。
我們使用這三個成員變數來檢索儲存在 attrib 陣列變數中的頂點資料:
attrib.vertices 是乙個浮點陣列,並非 glm::vec3 陣列,我們需要在使
用索引檢索頂點資料時首先要把索引值乘以 3 才能得到正確的頂點資料位
置。對於紋理座標資料,則乘以 2 進行檢索。對於頂點位置資料,偏移值
0 對應 x 座標,偏移值 1 對應 y 座標,偏移值 2 對應 z 座標。對於紋理
座標資料,偏移值 0 對應 u 座標,偏移值 1 對應 v 座標
*/vertex.pos =
;/**
vulkan的紋理座標的原點是左上角,而obj模型檔案格式假設紋理座標原點是左下角。
所以需要反轉紋理的 y 座標使兩個對應
*/vertex.texcoord =
; vertex.color =
;//優化頂點結構
if(uniquevertices.
count
(vertex)==0
) indices.
push_back
(uniquevertices[vertex]);
}}}
OGL(教程22) 模型載入
背景知識 我們不能手動的建立複雜的模型。正如你所想象的,為每個頂點指定位置和其他的屬性,並且要在縮放的時候保持正確是不現實的。乙個盒子 金字塔或者是簡單的表面是ok的,但是對於人臉這種複雜的網格結構就不可行了。現實的世界或者是商業的應用,處理的網格模型都是通過設計師設計的模型,他們使用blender...
vulkan管線學習8
介紹說這個是用來指定繪製的時候,有多少顏色緩衝,深度緩衝,多少次取樣,還有他們各自的內容是啥樣。然後這個是掛在vkframebuffer的 然後由於這個教程這裡只需要colorbuffer,所以只建立了乙個color attachment format這裡保持和swapchain一致,第二個好像關於...
vulkan管線學習1
安裝教程就隨便搜,都是大佬 那些安裝包可以這裡下 vk很先進,那早學晚學早晚要學,把他的思想以及流程學好了,然後就可以繼續學習做好看的效果了,以及之後webgpu出來,咱們知識遷移不需要太費勁,如果只會webgl opengl看這個有點費勁。第乙個東西是vkinstance這個。然後vk裡很多是用填...