將頂點數組『VertexArray』應用於多紋理『Multitexture』映射,由於每個紋理單元都有其自已的狀態.要將每個紋理單元都單度地啟用頂點數組,並且為其每個紋理單元設定紋理座標的頂點數組.通過常試可以將多個2D紋理(GL_TEXTURE_2D)進行映射,但2D紋理與1D紋理(GL_TEXTURE_1D)多次償試都無法將『頂點數組』應用『紋理數組』映射暈.演示程式按空格鍵切換『多紋理映射』草地紋理與高度紋理.兩者幀數相約.下載:
要讓紋理單元使用頂點數組,必須先激活它.
void glClientActiveTexture(GLenum texture);
texture:紋理單元索引GL_TEXTURE0_ARB~GL_TEXTURE31_ARB
啟用紋理單元頂點座標數組
void glEnableClientState(GLenum array);
禁用紋理單元頂點座標數組
void glDisableClientState(GLenum array);
array:GL_TEXTURE_COORD_ARRAY 紋理座標數組
為紋理單元設定指定數組
void WINAPI glTexCoordPointer(Glint size,GLenum type,GLsizei stride,const GLvoid *pointer);
設置兩個紋理單元設置頂點數組
glClientActiveTexture(GL_TEXTURE0_ARB);// 激活紋理0
glEnableClientState(GL_VERTEX_ARRAY); // 啟用頂點數組
glEnableClientState(GL_TEXTURE_COORD_ARRAY); // 啟用紋理座標數組
glVertexPointer(3, GL_FLOAT, 0, terrain->vertex_array);// 頂點數組
glTexCoordPointer(3, GL_FLOAT, 0, terrain->grass_texcoord);// 紋理數組
glClientActiveTexture(GL_TEXTURE1_ARB);// 激活紋理1
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(3, GL_FLOAT,0, terrain->height_texcoord);// 紋理數組
glDrawArrays(GL_TRIANGLES, 0, polygon_num);// 繪畫所有當前以啟用的頂點數組
glDisable(GL_TEXTURE_1D);// 禁用紋理單元1
glClientActiveTexture(GL_TEXTURE0_ARB);// 重新激活紋理0,這個很重要否則會影響其它紋理貼圖
glDisableClientState(GL_VERTEX_ARRAY); // 禁用頂點數組
glDisableClientState(GL_TEXTURE_COORD_ARRAY); // 禁用紋理座標數組
glDisableClientState(GL_NORMAL_ARRAY);// 禁用法線數組