glDrawElements是一個(gè)OPENGL的圖元繪制函數(shù),從數(shù)組中獲得數(shù)據(jù)渲染圖元。
函數(shù)原型為:
void glDrawElements(
GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
其中:
mode指定繪制圖元的類型,它應(yīng)該是下列值之一,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)用繪制多個(gè)幾何圖元,而不是通過OPENGL函數(shù)調(diào)用來傳遞每一個(gè)頂點(diǎn),法線,顏色信息。你可以事先準(zhǔn)備一系列分離的頂點(diǎn)、法線、顏色數(shù)組,并且調(diào)用一次glDrawElements把這些數(shù)組定義成一個(gè)圖元序列。當(dāng)調(diào)用glDrawElements函數(shù)的時(shí)候,它將通過索引使用count個(gè)成序列的元素來創(chuàng)建一系列的幾何圖元。mode指定待創(chuàng)建的圖元類型和數(shù)組元素如何如來創(chuàng)建這些圖元。但是如果GL_VERTEX_ARRAY 沒有被激活的話,不能生成任何圖元。被glDrawElements修改的頂點(diǎn)屬性在glDrawElements調(diào)用返回后的值具有不確定性,例如,GL_COLOR_ARRAY被激活后,當(dāng)glDrawElements執(zhí)行完成時(shí),當(dāng)前的顏色值是沒有指定的。沒有被修改的屬性值保持不變。
可以在顯示列表中包含glDrawElements,當(dāng)glDrawElements被包含進(jìn)顯示列表時(shí),相應(yīng)的頂點(diǎn)、法線、顏色數(shù)組數(shù)據(jù)也得進(jìn)入顯示列表的,因?yàn)槟切?shù)組指針是ClientSideState的變量,在顯示列表創(chuàng)建的時(shí)候而不是在顯示列表執(zhí)行的時(shí)候,這些數(shù)組指針的值影響顯示列表。glDrawElements只能用在OPENGL1.1或者更高的版本。