[英]How does Modern OpenGL 3.x and above draw primitives?
我必須用 OpenGL (3.3, 4.2) 繪制很多圖元,我知道 glutSolidTeapot() ; 我可以用過剩畫一個茶壺原始人。
但是這個命令好像不會生成頂點數組,不知道這種命令有沒有被棄用。
我注意到很多現代 OpenGL 教程只是加載他們自己的圖元並避免使用 glut,他們甚至從 3d 網格格式文件加載簡單的幾何體。
我的目的是盡可能快地繪制這些圖元。並盡可能多地使用新的OpenGL。
那么如何在現代 OpenGL 中繪制圖元?
由於 GLUT(無論如何都不是 OpenGL 的一部分)使用立即模式glBegin/glEnd
並使用已棄用的固定功能內置屬性來繪制其原語,如果您想專注於非- 已棄用的現代核心功能。
而不是使用內置屬性(如glVertex
, glNormal
,...),您必須使用自己的通用頂點屬性(當然,結合適當的頂點着色器),而不是glBegin/glEnd
調用,您必須使用繪制基元由glDrawArrays/glDrawElements
饋送並使用glDrawArrays/glDrawElements
及其衍生物繪制的頂點數組。
雖然沒有什么可以阻止您將這些對象的頂點數據存儲為源代碼中的變量或手動生成它們,但從文件加載它們是最簡單和最通用的方法,至少對於像猶他州茶壺這樣相當復雜的對象。 Wavefront OBJ 格式是一種相當簡單的基於 ASCII 的網格文件格式,它非常易於閱讀,並且可能是研究的起點,因為它幾乎可以通過任何建模軟件導出。
使用新的(未棄用的)OpenGL 標准進行渲染是通過使用着色器專門完成的。
Shader 屬性只能是緩沖區對象。
很快,客戶端內存不再是一組指定頂點位置、顏色、紋理坐標等的數組,而是必須將它們上傳到緩沖區對象中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.