glDrawElements是一個OPENGL的圖元繪制函數(shù),從數(shù)組中獲得數(shù)據(jù)渲染圖元。
函數(shù)原型為:
void glDrawElements(
GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
其中:
mode指定繪制圖元的類型,它應該是下列值之一,GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_QUAD_STRIP, GL_QUADS, and GL_POLYGON.
count為繪制圖元的數(shù)量。
type為索引值的類型,只能是下列值之一
:GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, or GL_UNSIGNED_INT。
indices:指向索引存貯位置的指針。
glDrawElements函數(shù)能夠通過較少的函數(shù)調(diào)用繪制多個幾何圖元,而不是通過OPENGL函數(shù)調(diào)用來傳遞每一個頂點,法線,顏色信息。你可以事先準備一系列分離的頂點、法線、顏色數(shù)組,并且調(diào)用一次glDrawElements把這些數(shù)組定義成一個圖元序列。當調(diào)用glDrawElements函數(shù)的時候,它將通過索引使用count個成序列的元素來創(chuàng)建一系列的幾何圖元。mode指定待創(chuàng)建的圖元類型和數(shù)組元素如何如來創(chuàng)建這些圖元。但是如果GL_VERTEX_ARRAY 沒有被激活的話,不能生成任何圖元。被glDrawElements修改的頂點屬性在glDrawElements調(diào)用返回后的值具有不確定性,例如,GL_COLOR_ARRAY被激活后,當glDrawElements執(zhí)行完成時,當前的顏色值是沒有指定的。沒有被修改的屬性值保持不變。
可以在顯示列表中包含glDrawElements,當glDrawElements被包含進顯示列表時,相應的頂點、法線、顏色數(shù)組數(shù)據(jù)也得進入顯示列表的,因為那些數(shù)組指針是ClientSideState的變量,在顯示列表創(chuàng)建的時候而不是在顯示列表執(zhí)行的時候,這些數(shù)組指針的值影響顯示列表。glDrawElements只能用在OPENGL1.1或者更高的版本。