2016-09-15 26 views
0

我想繪製兩個立方體之間有一個矩形,所以我存儲頂點數據到一個VBO,然後我創建了一個EBO(元素緩衝區對象),以避免額外的頂點(42對12 )。 我需要單獨繪製它們,因爲我想要矩形反射向上的立方體,在繪製矩形時進行模板測試並禁用深度遮罩。 我以爲我可以繪製的第一個立方體,glDrawElements調用glDrawRangeElements不繪製所選範圍

glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, 0); 

然後,畫出我試圖使用glDrawRangeElements

glDrawRangeElements(GL_TRIANGLES, 36, 41, 6, GL_UNSIGNED_INT, 0); 

的ractangle但它僅僅是繪製立方體的基礎。

對於最後一個多維數據集,我使用第一個相同的繪圖調用,只是在z軸上反轉它。

我覺得我做錯了什麼事與glDrawRangeElements參數,因爲我試圖做只需一個電話的第一個方塊,然後矩形

glDrawElements(GL_TRIANGLES, 42, GL_UNSIGNED_INT, 0); 

和它的作品。

那個glDrawRangeElements調用有什麼問題?

編輯:我解決了不使用glDrawRangeElements調用,但一個簡單的glDrawArrays調用,重新排列矩形的頂點繪製兩個三角形;

回答

1

glDrawRangeElements不符合您的想法。 功能性glDrawRangeElements相同的glDrawElements。唯一的區別是,glDrawRangeElements需要一個範圍,作爲提示來執行您將要使用的頂點。

請參閱,因爲您的索引位於數組中,驅動程序不會自動知道您正在使用的頂點數據的哪一部分。您使用glDrawRangeElements作爲潛在的性能增強器;它可以讓你告訴司機你的繪製調用使用的頂點範圍。

時下,glDrawRangeElements是毫無意義的。請參閱用於處理問題的範圍,因爲用於從CPU內存讀取頂點數組的實現。因此,當您執行了一個常規的glDrawElements時,驅動程序必須讀取索引緩衝區,確定頂點數據的範圍,然後將數據從頂點緩衝區複製到GPU內存中,然後發出繪製調用。 Range版本允許它跳過昂貴的索引讀取步驟。

這並不重要,因爲現在我們將頂點數據存儲在GPU上的緩衝區對象中。所以你根本不應該使用glDrawRangeElements

+0

那麼如何才能畫出一部分元素呢? –