08/13/2020
vulkan 載入模型(loading models),應用程式現在已經可以渲染紋理3d模型,但是 vertices 頂點和 indices 索引陣列中的幾何體不是很有趣。在本章節我們擴充套件程式,從實際的模型檔案衝載入頂點和索引資料,並使圖形卡實際做一些工作。
void
loadmodel()
}
obj檔案由positions, normals, texture uvs 和 faces組成,其中每個頂點指向乙個位置,通過索引指向 法線或者紋理座標。這使得不僅可以重複使用整個頂點,還可以具有單獨的屬性。
attrib 容器持有所有的 positions, normals 和 texture uvs 在它的 attrib.vertices, attrib.normals 和 attrib.texcoords 容器中。 shapes 容器包含所有單獨的物件和面。每個面由一組頂點組成,每個頂點包含 positions,normals 和 texture uvs 對應的 indices。obj模型也可以定義每個面的材質和紋理,但是我們忽略它們。
err 字串包含了載入檔案過程中產生的錯誤和警告資訊,比如缺少材質的定義。如果 loadobj 函式返回 false,則載入才算真的失敗。如上所述,obj 問及愛你中的面可以包含任意數量的頂點,而我們的應用程式只能渲染三角形。幸運的是, loadobj 有乙個可選引數來自動對這些面進行三角測量,這是預設啟用的。
我們將組合所有的面到乙個單獨的模型中,所以遍歷所有的形狀
for
(const
auto
& shape : shapes)
; vertices.
push_back
(vertex)
; indices.
push_back
(indices.
size()
);}}
為了簡單起見,我們假設每個頂點現在是唯一的,因此簡單的自動遞增索引。 index 變數是tinyobj::index_t 型別的,包含了 vertex_index, normal_index 和 texcoord_index 成員。我們需要使用這些索引從 attrib 陣列中 查詢實際的頂點屬性:
attrib.vertices[
3* index.vertex_index +0]
, attrib.vertices[
3* index.vertex_index +1]
, attrib.vertices[
3* index.vertex_index +2]
};vertex.texcoord =
;vertex.color =
;
obj格式的模型檔案,關於垂直座標系中0意味影象的底部,但是載入到了vulkan中影象的上方。
std::unordered_mapuint32_t
> uniquevertices =
;for
(const
auto
& shape : shapes);.
..if(uniquevertices.
count
(vertex)==0
) indices.
push_back
(uniquevertices[vertex]);
}}
初識Vulkun(5) 建立邏輯裝置和繫結佇列族
08 02 2020 知識補充 總結使用物理裝置建立邏輯裝置,佇列家族建立佇列。邏輯裝置由vkdevice宣告,如果要建立邏輯裝置,首先需要確認佇列資訊,邏輯裝置代表處於初始化狀態的裝置,在建立邏輯裝置時,可以選擇可選特性,開啟需要的擴充套件。物理裝置可以查詢支援的不同的佇列族,找到相關索引的佇列族...
八 初識python 函式作用域(課時23)
x 2def func y 20print x print y func 結果為2,20,x為全部變數,可以在區域性使用。print y nameerror name y is not defined,y為區域性變數,無法在全域性使用。def improve global f f 100 g 200...
給妹子講python S01E23初識異常處理
1.異常的預設處理和主動捕獲 2.主動觸發異常和自定義異常 3.finally終止 塊的用法 妹子問 從字面上來看,異常是程式執行時出現的錯誤吧。沒錯,每當在執行時檢測到程式錯誤時,python就會引發異常。對待異常有兩種方法 一是可以在程式中捕捉和響應錯誤 或者忽略已發生的異常。如果是忽略已發生的...