我正在開發一個使用OpenGL的3D應用程序。在3D計算機科學(3D引擎)中,'批'這個術語到底意味着什麼?
我有一個關於以下職位的一部分誤解:OpenGL VAO best practices
我不知道關於這個職位的「批」一詞的含義。
這是否意味着每個對象的場景? 那麼它是否建議爲場景的每個對象或幾個對象創建一個VAO? 批次是否指共享相同材質,轉換和陰影的多個對象?
我正在開發一個使用OpenGL的3D應用程序。在3D計算機科學(3D引擎)中,'批'這個術語到底意味着什麼?
我有一個關於以下職位的一部分誤解:OpenGL VAO best practices
我不知道關於這個職位的「批」一詞的含義。
這是否意味着每個對象的場景? 那麼它是否建議爲場景的每個對象或幾個對象創建一個VAO? 批次是否指共享相同材質,轉換和陰影的多個對象?
批次只是一個簡單的「批量」(=一堆)基元,即通過撥打一個單一的glDraw…
所調用的點,線或三角形。這背後沒有更深層的原因。
這是否意味着每個對象的場景?
不。OpenGL不知道「模型」是什麼。這個概念完全超出了OpenGL的範圍。 OpenGL只是在屏幕上繪製點,線或三角形,就是這樣。
那麼它是否建議爲場景的每個對象或幾個對象創建一個VAO?
沒有,建議你以這樣的方式創建VAOs和維也納組織,您可以合併原語的最大數量,可以用最少數量的glDraw…
呼叫到繪製(=三角|點|線)一個單一的VAO/VBO。
例如,假設您要渲染一個充滿紙箱的倉庫,其中每個箱子都有一個(略微)不同的形狀(想想宜家商場中的自助服務區;我非常肯定那些看起來相同在世界各地的商店裏):儘管形狀不同,箱子有很多共同之處:它們的顏色,質地等等。所以你要做的就是把所有這些箱子放到一個單一的VAO/VBO中,然後把它們一起畫出來通過一個或一個glDraw…
調用使用相同的紋理和着色器。
好吧,總結一下你所說的一個批次是由共享相同紋理(材質),轉換和陰影信息的場景中的所有幾何體(網格)定義的。因此,如果我的場景由具有特定紋理的房屋和周圍有一百棵樹的另一個紋理組成,但是具有不同的陰影,則會有2個批次。這是真的嗎? – user1364743
@ user1364743:沒有批處理沒有以這種特定的方式定義。一個批次只不過是通過一次調用'glDraw ...'繪製的所有幾何圖形。不要反套。沒有幾何或場景相關的定義。批處理是任何進入一個集合的東西,通過特定的調用來處理'glDraw ...'就是這樣。你的目標是以某種方式將數據收集到這樣的批次中,以減少'glDraw ...'調用的數量。 – datenwolf
好的。感謝您的回覆。 – user1364743