javax.microedition.khronos.opengles
接口GL10
上級(jí)接口:GL
下級(jí)接口:GL11
公共接口GL10繼承于GL
GL10接口包含了Java(TM)程序語(yǔ)言為OpenGL綁定的核心功能。OES_byte_coordinates,OES_single_precision,OES_fixed_point,OES_read_format,以及OES_compressed_paletted_texture等擴(kuò)展功能也是這個(gè)接口的一部分。
一個(gè)以x或xv為后綴的方法是屬于OES_fixed_point擴(kuò)展功能的,并且需要一個(gè)或更多的修正的點(diǎn)為參數(shù)。這些修正的點(diǎn)可能是浮點(diǎn)點(diǎn)派生出來(lái)的值通過(guò)乘以65536后再取最接近整數(shù)得到。
為了使用方便起見,這個(gè)接口記錄了OpenGL ES各版本包括1.1及其擴(kuò)展版本的方法。當(dāng)運(yùn)行一個(gè)OpenGL ES 1.0的應(yīng)用程序時(shí),被標(biāo)為“(僅1.1)”可以被忽略。
查看GL接口描述,了解如何獲取該接口實(shí)例。
方法的詳細(xì)描述:
glActiveTexture
publicvoid glActiveTexture(int texture)
功能:
選擇服務(wù)端活動(dòng)的紋理單元
詳細(xì):glActiveTexture選擇哪一個(gè)紋理在后面的紋理狀態(tài)改變時(shí)有效,紋理單元的數(shù)量是依據(jù)該紋理單元所被支持的具體實(shí)現(xiàn)。在OpenGL ES 1.0中至少一個(gè),在OpenGL ES 1.1中至少兩個(gè)。
注意:
常常會(huì)這樣GL_TEXTUREi = GL_TEXTURE0+ i
一個(gè)紋理單元由紋理可用狀態(tài)、紋理矩陣堆、紋理環(huán)境以及當(dāng)前渲染紋理組成。修改其中任一成分均會(huì)改變當(dāng)前活動(dòng)紋理單元。
點(diǎn)陣是客戶端GL資源,它通過(guò)glClientActiveTexture程序獲取。
錯(cuò)誤:
當(dāng)0 <= i <GL_MAX_TEXTURE_UNITS 時(shí),如果紋理不是一個(gè)GL_TEXTUREi ,GL_INVALID_ENUM(錯(cuò)誤枚舉)會(huì)產(chǎn)生。
相關(guān)獲?。?/p>
利用glGetIntegerv處理GL_MAX_TEXTURE_UNITS。
參數(shù):
texture——指定哪一個(gè)紋理單元為活動(dòng)。必須是一個(gè)GL_TEXTUREi,其中0 <= i < GL_MAX_TEXTURE_UNITS,初始值為GL_TEXTURE0。
glAlphaFunc
publicvoid glAlphaFunc(int func,float ref)
功能:
指定Alpha測(cè)試功能。
詳細(xì):
Alpha測(cè)試依據(jù)結(jié)果舍棄片段,該結(jié)果由引入片段的alpha值與參照值常量進(jìn)行比較得到。glAlphaFunc指定參照值與比較方法。只有當(dāng)alpha測(cè)試有效時(shí),比較才有用。使alpha測(cè)試有效或無(wú)效可以利用glEnable和glDisable方法,它們都是以GL_ALPHA_TEST為參數(shù)的,alpha測(cè)試初始為無(wú)效。
func與ref指明像素被繪出的條件。引入的alpha值通過(guò)func指明的方法與ref指明的參照值進(jìn)行比較。如果該值通過(guò)比較并且通過(guò)隨后的模型測(cè)試與深度緩沖區(qū)測(cè)試,則將引入的片段繪出。如果該值未通過(guò)比較,則該像素區(qū)的幀緩沖區(qū)不會(huì)發(fā)生任何變化。比較方法如下:
GL_NEVER:不會(huì)通過(guò)。
GL_LESS:如果引入的alpha值比參照值小則通過(guò)。
GL_EQUAL:如果引入的alpha值與參照值相等則通過(guò)。
GL_LEQUAL:如果引入的alpha值小于或等于參照值則通過(guò)。
GL_GREATER:如果引入的alpha值比參照值大則通過(guò)。
GL_NOTEQUAL:如果引入的alpha值與參照值不相等則通過(guò)。
GL_GEQUAL:如果引入的alpha值大于或等于參照值則通過(guò)。
GL_ALWAYS:總是通過(guò)。(初始設(shè)定)
對(duì)所有的像素寫入操作進(jìn)行g(shù)lAlphaFunc操作,包括那些從點(diǎn)、線、多邊形的掃描轉(zhuǎn)換得到的結(jié)果。glAlphaFunc對(duì)glClear無(wú)影響。
錯(cuò)誤:
當(dāng)func不是被允許的值會(huì)產(chǎn)生GL_INVALID_ENUM(錯(cuò)誤枚舉)。
參數(shù):
func——指明alpha比較方法,被允許的符合常量有GL_NEVER, GL_LESS,GL_EQUAL, GL_LEQUAL, GL_GREATER, GL_NOTEQUAL, GL_GEQUAL, 和 GL_ALWAYS。初始值為GL_ALWAYS。
ref——指明與引入的alpha值比較的參照值,這個(gè)值的屬于區(qū)間[0, 1],初始值為0。
glAlphaFuncx
publicvoid glAlphaFuncx(int func,int ref)
功能:glAlphaFunc的修正版本,僅僅參數(shù)類型由float ref變?yōu)閕nt ref。
glBindTexture
publicvoid glBindTexture(int target,int texture)
功能:
將一個(gè)已命名的紋理與一個(gè)紋理目標(biāo)綁定。
詳細(xì):glBindTexture可以讓你創(chuàng)建或使用一個(gè)已命名的紋理,調(diào)用glBindTexture方法并將target設(shè)置為GL_TEXTURE_2D,將texture設(shè)置為你想要綁定的新紋理的名稱。當(dāng)一個(gè)紋理與目標(biāo)綁定時(shí),該目標(biāo)之前的綁定關(guān)系將自動(dòng)被釋放。
紋理的名稱是一個(gè)無(wú)符號(hào)的整數(shù)。在每個(gè)紋理目標(biāo)中,0被保留用以代表默認(rèn)紋理。紋理名稱與相應(yīng)的紋理內(nèi)容被保留在當(dāng)前GL rendering上下文的共享的紋理對(duì)象空間中(參照eglCreateContext)
你可以使用glGenTextures來(lái)設(shè)置一個(gè)新的紋理名稱。
當(dāng)一個(gè)紋理被綁定時(shí),對(duì)于其目標(biāo)的GL操作將作用于該綁定的紋理之上。如果被綁定的紋理的目標(biāo)的維度的紋理映射是活動(dòng)的,則綁定的紋理被使用。實(shí)際上,紋理目標(biāo)成為當(dāng)前被綁定紋理的別名,并且紋理名稱0指的是在初始化時(shí)被綁定的默認(rèn)紋理。
通過(guò)glBindTexture綁定的紋理仍舊是活動(dòng)的直到同一個(gè)目標(biāo)被其他紋理綁定或者該綁定紋理通過(guò)glDeleteTextures刪除為止。
一旦創(chuàng)建,一個(gè)已命名的紋理可能經(jīng)常需要與維度匹配的目標(biāo)多次綁定。這樣利用glBindTexture來(lái)將一個(gè)已命名的紋理與一個(gè)紋理目標(biāo)綁定,比利用glTexImage2D進(jìn)行紋理圖像的重載要快的多。
錯(cuò)誤:
當(dāng)目標(biāo)不是一個(gè)被允許的值時(shí),會(huì)產(chǎn)生GL_INVALID_ENUM(錯(cuò)誤枚舉)。
參數(shù):
target——指明紋理要綁定的目標(biāo),必須是GL_TEXTURE_2D。
texture——指明紋理的名稱。
glBlendFunc
publicvoid glBlendFunc(int sfactor,int dfactor)
功能:
指明像素算法。
詳細(xì):
像素可以通過(guò)函數(shù)操作后被繪出,該函數(shù)的功能是將引入的值與顏色緩沖中已有的值混合。使用glEnable方法與glDisable方法以GL_BLEND為參數(shù),決定是否開啟混合功能,該功能初始為關(guān)閉的。
當(dāng)混合功能開啟時(shí)glBlendFunc定義混合功能的操作。sfactor指明十一中方法中的哪一種用來(lái)衡量源顏色要素,dfactor指明十種方法中的哪一種用來(lái)衡量目的顏色要素。十一種可能的方法將在下面進(jìn)行介紹。每一種方法定義了四個(gè)衡量元素,分別是紅、綠、藍(lán)和alpha。
在后面的內(nèi)容中,源與目的顏色要素被指為(Rs, Gs, Bs, As)和(Rd, Gd, Bd, Ad),它們的值為0至(kR, kG, kB, kA)之間的整數(shù),其中kc = 2mc – 1,并且(mR, mG, mB, mA)是紅、綠、藍(lán)和alpha位平面的數(shù)量。
源和目標(biāo)比例系數(shù)由(sR, sG, sB, sA)和(dR, dG, dB, dA)指定。比例系數(shù)用(fR, fG, fB, fA)表示,代表既不是源也不是目標(biāo)因素,所有比例系數(shù)屬于區(qū)間[0,1]。
參數(shù) (fR,fG, fB, fA)
GL_ZERO (0, 0, 0, 0)
GL_ONE (1, 1, 1, 1)
GL_SRC_COLOR (Rs/kR, Gs/kG, Bs/kB, As/kA )
GL_ONE_MINUS_SRC_COLOR (1, 1, 1, 1) - (Rs/kR, Gs/kG, Bs/kB, As/kA)
GL_DST_COLOR (Rd/kR, Gd/kG, Bd/kB, Ad/kA )
GL_ONE_MINUS_DST_COLOR (1, 1, 1, 1) - (Rd/kR, Gd/kG, Bd/kB, Ad/kA)GL_SRC_ALPHA (As/kA, As/kA,As/kA, As/kA ) GL_ONE_MINUS_SRC_ALPHA (1, 1, 1, 1) - (As/kA, As/kA, As/kA, As/kA) GL_DST_ALPHA (Ad/kA, Ad/kA, Ad/kA, Ad/kA )GL_ONE_MINUS_DST_ALPHA (1, 1, 1, 1) -(Ad/kA, Ad/kA, Ad/kA, Ad/kA) GL_SRC_ALPHA_SATURATE (i, i, i, 1)
i= min(As, kA - Ad) / kA
為了確定像素的混合值,系統(tǒng)利用下列等式。
Rd= min( kR, Rs sR + Rd dR )
Gd= min( kG, Gs sG + Gd dG )
Bd= min( kB, Bs sB + Bd dB )
Ad= min( kA, As sA + Ad dA )
盡管從表面上看混合算法并沒有指明上述等式的精度,因?yàn)榛旌喜僮魇遣捎貌痪_的整型顏色值。然而應(yīng)當(dāng)?shù)扔?的混合因素要被確保沒有修改它的被乘數(shù),并且一個(gè)等于0的混合因素要降低它的被乘數(shù)至0。舉一個(gè)例子,當(dāng)sfactor是GL_SRC_ALPHA,dfactor 是GL_ONE_MINUS_SRC_ALPHA并且As等于kA時(shí),等式進(jìn)行簡(jiǎn)單替換。
Rd= Rs
Gd= Gs
Bd= Bs
Ad= As
對(duì)于所有像素元素的寫入操作進(jìn)行g(shù)lBlendFunc操作時(shí),包括對(duì)于點(diǎn)、線、多邊形的掃描轉(zhuǎn)換,都不影響glClear方法。
舉例:
為了渲染物體從遠(yuǎn)到近排列的效果,最好應(yīng)用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)處理透明度。請(qǐng)注意這個(gè)透明度計(jì)算不要求存在顏色緩沖區(qū)中的alpha位面數(shù)。
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)對(duì)于渲染抗鋸齒的點(diǎn)和線也很有效。
注意:
引入的(源)alpha被認(rèn)為是不透明的,范圍是1.0 (kA),表明完全不透明,而0表明完全透明。
錯(cuò)誤:
當(dāng)sfactor或dfactor為不允許的值時(shí),產(chǎn)生GL_INVALID_ENUM(錯(cuò)誤枚舉)。
參數(shù):
sfactor——指明源圖元的紅、綠、藍(lán)、alpha的混合比例是怎樣計(jì)算的。允許的符號(hào)符號(hào)常量有:GL_ZERO, GL_ONE,GL_SRC_COLOR (僅1.1), GL_ONE_MINUS_SRC_COLOR (僅1.1), GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, 和 GL_SRC_ALPHA_SATURATE,初始值是GL_ONE。
dfactor——指明目圖元的紅、綠、藍(lán)、alpha的混合比例是怎樣計(jì)算的。允許的符號(hào)符號(hào)常量有:GL_ZERO, GL_ONE,GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR (僅1.1),GL_ONE_MINUS_DST_COLOR (僅1.1), GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, 和 GL_ONE_MINUS_DST_ALPHA,初始值為GL_ZERO
網(wǎng)絡(luò)解釋:
第一個(gè)參數(shù)指出源圖元的alpha的取值計(jì)算方法,第二個(gè)參數(shù)指出目標(biāo)處的alpha的計(jì)算方法。
兩個(gè)參數(shù)的取值都可以是如下常量之一:
GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, and GL_SRC_ALPHA_SATURATE
比如GL_ZERO表示alpha取值為0,GL_ONE表示1,GL_DST_COLOR表示取目標(biāo)區(qū)域的顏色值,GL_SRC_ALPHA表示取源區(qū)域的alpha值等等。例如:
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
表示把渲染的圖像疊加到目標(biāo)區(qū)域,也就是說(shuō)源的每一個(gè)像素的alpha都等于自己的alpha,目標(biāo)的每一個(gè)像素的alpha等于1。這樣疊加次數(shù)越多,疊加的圖元的alpha越高,得到的結(jié)果就越亮。因此這種融合用于表達(dá)光亮效果。
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
表示把渲染的圖像融合到目標(biāo)區(qū)域。也就是說(shuō)源的每一個(gè)像素的alpha都等于自己的alpha,目標(biāo)的每一個(gè)像素的alpha等于1減去該位置源像素的alpha。 因此不論疊加多少次,亮度是不變的。
glClear
publicvoid glClear(int mask)
功能:
清理緩沖區(qū),并設(shè)置為預(yù)設(shè)值。
詳細(xì):
glClear設(shè)置窗口位面區(qū)的值,該值由glClearColor, glClearDepth 和 glClearStencil等方法選擇出。
像素所有權(quán)測(cè)試、裁剪測(cè)試、抖動(dòng)、顏色緩沖區(qū)掩飾將影響glClear操作,裁剪盒綁定清理區(qū)域。Alpha功能、混合功能、邏輯操作、建模、紋理映射以及深度緩沖區(qū)會(huì)被glClear操作忽略。
glClear可以使參數(shù)為多個(gè)值按位與后的結(jié)果,以表明那個(gè)緩沖區(qū)需要清理。
有如下值:
GL_COLOR_BUFFER_BIT:表明顏色緩沖區(qū)。
GL_DEPTH_BUFFER_BIT:表明深度緩沖區(qū)。
GL_STENCIL_BUFFER_BIT:表明模型緩沖區(qū)。
注意:
如果緩沖區(qū)并沒有呈現(xiàn)出來(lái),則glClear對(duì)指向的緩沖區(qū)無(wú)效果。
錯(cuò)誤:
如果使用任一非已定義的值將產(chǎn)生GL_INVALID_VALUE(錯(cuò)誤枚舉)。
參數(shù):
mask——允許的值有GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, and GL_STENCIL_BUFFER_BIT。
網(wǎng)絡(luò)解釋:
glClear()語(yǔ)句的作用是用當(dāng)前緩沖區(qū)清除值,也就是glClearColor或者glClearDepth等函數(shù)所指定的值來(lái)清除指定的緩沖區(qū)。比如:
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
第一條語(yǔ)句表示清除顏色設(shè)為黑色,第二條語(yǔ)句表示把整個(gè)窗口清除為當(dāng) 前的清除顏色,glClear()的唯一參數(shù)表示需要被清除的緩沖區(qū)。
glClearColor
publicvoid glClearColor(float red,float green,float blue,float alpha)
功能:指定顏色緩沖區(qū)的清理值
詳細(xì):glClearColor指明紅、綠、藍(lán)、alpha的值并通過(guò)glClear來(lái)清理顏色緩沖區(qū),被glClearColor指明的值屬于區(qū)間[0, 1]。
參數(shù):
red——指明顏色緩沖區(qū)被清理時(shí)紅色的值,初始值為0。
green——指明顏色緩沖區(qū)被清理時(shí)綠色的值,初始值為0。
blue——指明顏色緩沖區(qū)被清理時(shí)藍(lán)色的值,初始值為0。
alpha——指明顏色緩沖區(qū)被清理時(shí)alpha的值,初始值為0。
glClearColorx
publicvoid glClearColorx(int red,int green,int blue,int alpha)
功能:glClearColor的修正方法。
glClearDepthf
publicvoid glClearDepthf(float depth)
功能:指明深度緩沖區(qū)的清理值。
詳細(xì):glClearDepth方法指明深度值,并通過(guò)glClear來(lái)清理深度緩沖區(qū)。glClearDepth指明的值屬于區(qū)間[0, 1]。
參數(shù):
depth——指明深度緩沖區(qū)被清理時(shí)的深度值,初始值為1。
glClearDepthx
publicvoid glClearDepthx(int depth)
功能:glClearDepth的修正方法。
glClearStencil
publicvoid glClearStencil(int s)
功能:指明模板緩沖區(qū)的清理值。
詳細(xì):glClearStencil指明glClear清理模板緩沖區(qū)時(shí)的索引,s為2m-1,其中m是模板緩沖區(qū)中的bit數(shù)。
相關(guān)獲?。?/p>
glGetIntegerv方法,并以GL_STENCIL_BITS為參數(shù)。
參數(shù):
s——指明glClear清理模板緩沖區(qū)時(shí)的索引,初始值為0。
glClientActiveTexture
publicvoid glClientActiveTexture(int texture)
功能:選擇客戶端活動(dòng)紋理單元。
glClientActiveTexture選擇頂點(diǎn)矩陣,客戶狀態(tài)參數(shù)由glTexCoordPointer方法修改??捎眯杂蒰lEnableClientState與glDisableClientState決定,參數(shù)為GL_TEXTURE_COORD_ARRAY。
注意:
總有GL_TEXTUREi = GL_TEXTURE0 + i。
錯(cuò)誤:
如果texture不是一個(gè)GL_TEXTUREi,這里0 <= i< GL_MAX_TEXTURE_UNITS,則產(chǎn)生一個(gè)GL_INVALID_ENUM(錯(cuò)誤矩陣)。
相關(guān)獲?。?/p>
glGetIntegerv方法,并以GL_MAX_TEXTURE_UNITS為參數(shù)。
參數(shù):
texture——指定哪一個(gè)紋理單元為活動(dòng)。紋理個(gè)數(shù)至少一個(gè)(對(duì)于1.0)或兩個(gè)(對(duì)于1.1)紋理必須是一個(gè)GL_TEXTUREi,其中0 <= i < GL_MAX_TEXTURE_UNITS,初始值為GL_TEXTURE0。
glColor4f
publicvoid glColor4f(float red,float green,float blue,float alpha)
功能:設(shè)置當(dāng)前顏色。
詳細(xì):GL儲(chǔ)存當(dāng)前四值的RGBA顏色,glColor可以設(shè)置新的四值的RGBA顏色。
當(dāng)前顏色值被儲(chǔ)存為整型或浮點(diǎn)型,如果值被儲(chǔ)存為浮點(diǎn)型,尾數(shù)和指數(shù)的大小未指明。
在當(dāng)前顏色更新之前整型與浮點(diǎn)型都不屬于區(qū)間[0, 1],然而顏色元素在修改或?qū)懭腩伾彌_區(qū)前會(huì)屬于該區(qū)間。
參數(shù):
red——為當(dāng)前顏色指明一個(gè)新的紅色值,初始值為1。
green——為當(dāng)前顏色指明一個(gè)新的綠色值,初始值為1。
blue——為當(dāng)前顏色指明一個(gè)新的藍(lán)色值,初始值為1。
alpha——為當(dāng)前顏色指明一個(gè)新的alpha值,初始值為1。
glColor4x
publicvoid glColor4x(int red,int green,int blue,int alpha)
功能:glColor4f的修正方法。
glColorMask
publicvoid glColorMask(boolean red,boolean green,boolean blue,boolean alpha)
功能:開啟與禁止顏色元素的寫入操作。
詳細(xì):glColorMask指明單獨(dú)的顏色元素是否可以被寫入。舉一個(gè)例子,如果red為false,則顏色緩沖區(qū)中的任何像素的顏色的紅色元素將不會(huì)發(fā)生變化,忽略企圖的繪畫操作,包括glClear。
不可以控制元素單個(gè)位的改變,只能控制整個(gè)元素是否可以改變。
參數(shù):
red——指明紅色元素是否可以寫入顏色緩沖區(qū),初始值為ture,表明可以寫入。
green——指明綠色元素是否可以寫入顏色緩沖區(qū),初始值為ture,表明可以寫入。
blue——指明藍(lán)色元素是否可以寫入顏色緩沖區(qū),初始值為ture,表明可以寫入。
alpha——指明alpha元素是否可以寫入顏色緩沖區(qū),初始值為ture,表明可以寫入。
glColorPointer
publicvoid glColorPointer(int size,int type,int stride,Buffer pointer)
功能:
定義一個(gè)顏色矩陣。
詳細(xì):
glColorPointer指明渲染時(shí)使用的顏色矩陣。size指明每個(gè)顏色的元素?cái)?shù)量,必須為4。type指明每個(gè)顏色元素的數(shù)據(jù)類型,stride指明從一個(gè)顏色到下一個(gè)允許的頂點(diǎn)的字節(jié)增幅,并且屬性值被擠入簡(jiǎn)單矩陣或存儲(chǔ)在單獨(dú)的矩陣中(簡(jiǎn)單矩陣存儲(chǔ)可能在一些版本中更有效率)。
當(dāng)一個(gè)顏色矩陣被指定,size, type, stride和pointer將被保存在客戶端狀態(tài)。
如果顏色矩陣被啟用,當(dāng)使用glDrawArrays方法或glDrawElements方法時(shí)被調(diào)用。利用glEnableClientState方法與glDisableClientState方法以GL_COLOR_ARRAY為參數(shù)來(lái)啟用和禁止顏色矩陣,顏色矩陣初始值為禁用,不允許glDrawArrays方法和glDrawElements方法調(diào)用。
使用glDrawArrays方法依據(jù)事先指明的頂點(diǎn)和頂點(diǎn)矩陣構(gòu)建一系列圖元(都是同種類型的),使用glDrawElements方法依據(jù)頂點(diǎn)索引和頂點(diǎn)屬性構(gòu)建一系列圖元。
注意:
glColorPointer在客戶端應(yīng)用。
錯(cuò)誤:
size不是4時(shí)將產(chǎn)生GL_INVALID_VALUE。
type不是一個(gè)允許的值時(shí)將產(chǎn)生GL_INVALID_ENUM。
stride為負(fù)數(shù)時(shí)將產(chǎn)生GL_INVALID_VALUE。
pointer參數(shù)必須是直接緩存并且類型與type指定的類型相同。
參數(shù):
size——指明每個(gè)顏色的元素?cái)?shù)量,必須為4。
type——指明每個(gè)矩陣中顏色元素的數(shù)據(jù)類型,允許的符號(hào)常量有GL_UNSIGNED_BYTE, GL_FIXED和GL_FLOAT,初始值為GL_FLOAT。
stride——指明連續(xù)的點(diǎn)之間的位偏移,如果stride為0時(shí),顏色被緊密擠入矩陣,初始值為0。
pointer——指明包含顏色的緩沖區(qū),如果pointer為null,則為設(shè)置緩沖區(qū)。
拋出:
java.lang.IllegalStateException——如果是OpenGL ES 1.1并且VBOs(VertexBuffer Object即頂點(diǎn)緩沖對(duì)象)啟用。
java.lang.IllegalArgumentException——如果pointer不是直接緩存。
網(wǎng)絡(luò)解釋:
頂點(diǎn)數(shù)組的概念如此的簡(jiǎn)單,如其名,就是將原來(lái)由一系列的glVertex*指定的頂點(diǎn)放在一個(gè)數(shù)組中,(其意思就是頂點(diǎn)數(shù)據(jù)組成的數(shù)組)由頂點(diǎn)數(shù)組處理函數(shù)一次性指定。事實(shí)上,不僅如此,其一次性指定的不僅僅是數(shù)組,還可以是其他系列的東西,比如表面發(fā)現(xiàn),RGBA顏色,輔助顏色等。
glCompressedTexImage2D
publicvoid glCompressedTexImage2D(int target,
int level,
int internalformat,
int width,
int height,
int border,
int imageSize,
Buffer data)
功能:
指明一個(gè)二維的壓縮的紋理圖像。
詳細(xì):
glCompressedTexImage2D定義一個(gè)壓縮格式的二維紋理圖像。
調(diào)色板紋理是被支持的壓縮格式,一個(gè)壓縮圖像的布局是一個(gè)調(diào)色板,調(diào)色板由用以查找調(diào)色板的多層級(jí)數(shù)的紋理引用決定。調(diào)色板的格式可以為R5_G6_B5, RGBA4, RGB5_A1, RGB8, 或者RGBA8,紋理引用的分辨率可以為4位或8位。結(jié)果,調(diào)色板條目不是16就是256。如果level是0,數(shù)據(jù)中僅有一個(gè)紋理引用的層級(jí)數(shù)會(huì)被描述。否則,level為負(fù)值指明描述紋理直到哪一個(gè)層級(jí)數(shù)??赡軙?huì)有剩余為最低分辨率填補(bǔ)的半個(gè)字節(jié)會(huì)被忽略。
注意:
glPixelStore對(duì)于壓縮紋理圖像無(wú)影響。
glCompressedTexImage2D指明當(dāng)前綁定紋理的二維紋理以及當(dāng)前紋理單元,分別通過(guò)glBindTexture方法和glActiveTexture方法。
錯(cuò)誤:
如果target不是GL_TEXTURE_2D,將會(huì)產(chǎn)生GL_INVALID_ENUM(錯(cuò)誤枚舉)。
如果level大于0或者絕對(duì)值大于log_2(max),這里的max是GL_MAX_TEXTURE_SIZE的返回值。則產(chǎn)生GL_INVALID_VALUE。
(1.0) internalformat不是允許的符號(hào)常量,將產(chǎn)生GL_INVALID_VALUE(錯(cuò)誤值)。
(1.1) internalformat不是允許的符號(hào)常量,將產(chǎn)生GL_INVALID_ENUM(錯(cuò)誤枚舉)。
如果width或者h(yuǎn)eight小于0或大于2 + GL_MAX_TEXTURE_SIZE,或者其中一個(gè)不能表示為2^k + 2*border,k為整數(shù),將產(chǎn)生GL_INVALID_VALUE(錯(cuò)誤值)。
如果border不是0則產(chǎn)生GL_INVALID_VALUE(錯(cuò)誤值)。
如果圖像不符合格式、尺寸及壓縮圖像的內(nèi)容,則產(chǎn)生GL_INVALID_VALUE(錯(cuò)誤值)。
參數(shù):
target——指明目標(biāo)紋理,必須為GL_TEXTURE_2D。
level——指明具體數(shù)值的等級(jí)數(shù),必須小于等于0,0表明只有一種層級(jí)數(shù),負(fù)數(shù)表明有多少被數(shù)據(jù)描述的層級(jí)數(shù)。
internalformat——指明紋理中的顏色元素,被允許的符號(hào)常量有:GL_PALETTE4_RGB8_OES, GL_PALETTE4_RGBA8_OES, GL_PALETTE4_R5_G6_B5_OES,GL_PALETTE4_RGBA4_OES, GL_PALETTE4_RGB5_A1_OES, GL_PALETTE8_RGB8_OES,GL_PALETTE8_RGBA8_OES, GL_PALETTE8_R5_G6_B5_OES, GL_PALETTE8_RGBA4_OES, andGL_PALETTE8_RGB5_A1_OES.
width——指明紋理圖像的寬度,必須是2^k + 2*border,k為整數(shù),所有版本支持的紋理圖像至少時(shí)64像素寬。
height——指明紋理圖像的高度,必須是2^k + 2*border,k為整數(shù),所有版本支持的紋理圖像至少時(shí)64像素高。
border——指明邊界寬度,必須為0。
imageSize——指明壓縮紋理圖像的大小,單位為byte。
data——指明一個(gè)包含壓縮紋理圖像數(shù)據(jù)的緩沖區(qū)。
拋出:
java.lang.IllegalArgumentException——如果data為空。
java.lang.IllegalArgumentException——如果data.remaining()小于imageSize。
網(wǎng)絡(luò)解釋:
功能: 使用壓縮過(guò)的紋理圖像定義一個(gè)二維紋理.
level: 提供多種分辨率的紋理. 如紋理只有一種分辨率,level則設(shè)置為0.
internalformat: 紋理圖像的壓縮格式, 必須是當(dāng)前OpenGL實(shí)現(xiàn)支持的壓縮格式, 否則導(dǎo)致GL_INVALID_ENUM錯(cuò)誤.
width, height, depth: 指定二維紋理圖像的大小. 參數(shù)值的必須為 2的m次方 + 2b.
border: b的值, 必須是0
mipmap: 多個(gè)明細(xì)等級(jí)(即上面的層級(jí)數(shù))
mipmap: 一系列預(yù)先通過(guò)濾波生成的, 分辨率遞減的紋理圖.
功能: 使用mipmap技術(shù)時(shí), OpenGL根據(jù)物體的大小(以像素為單位)自動(dòng)確定應(yīng)使用哪個(gè)紋理圖像.
方法: 必須提供從最大尺寸到1 x 1的, 大小為2的冪的各種紋理圖.例如最大分辨率為64 X 16, 就必須提供32X8, 16X4, 8X2, 4X1, 2X1, 1X1的紋理
原理: 小的紋理圖通常是通過(guò)對(duì)最大的紋理圖進(jìn)行濾波處理得到的,每個(gè)紋素的值是前一個(gè)紋理圖中4個(gè)相應(yīng)紋素的平均值.
使用: 用函數(shù)glTexImage2D()指定使用哪些紋理. 將參數(shù)level, width, height和image設(shè)置成不同的值.
level的示例: 例如最大分辨率為64 X 16,level為0表示64X16,level為1表示32X8, 以此類推(有些問題)
glCompressedTexSubImage2D
publicvoid glCompressedTexSubImage2D(int target,
int level,
int xoffset,
int yoffset,
int width,
int height,
int format,
int imageSize,
Buffer data)
功能:
指明二維壓縮紋理子圖。
詳細(xì):
glCompressedTexSubImage2D在已存在的二維壓縮圖像的子區(qū)域重新定義紋理子圖。子圖將替換已存在紋理圖像的子區(qū)域。范圍是x方向從xoffset到xoffset+ width – 1,y方向從yoffset到y(tǒng)offset + height – 1。寬、高都為0不是錯(cuò)誤,但沒有意義。
現(xiàn)在沒有支持該方法的壓縮格式。
注意:
glPixelStore對(duì)于壓縮紋理圖像無(wú)效果。
glCompressedTexImage2D指明當(dāng)前綁定紋理的二維紋理以及當(dāng)前紋理單元,分別通過(guò)glBindTexture方法和glActiveTexture方法。
錯(cuò)誤:
如果target不是GL_TEXTURE_2D,將會(huì)產(chǎn)生GL_INVALID_ENUM(錯(cuò)誤枚舉)。
如果紋理矩陣沒有被之前的glCompressedTexImage2D操作定義則產(chǎn)生GL_INVALID_OPERATION。
如果level小于0或者絕對(duì)值大于log_2(max),這里的max是GL_MAX_TEXTURE_SIZE的返回值。則產(chǎn)生GL_INVALID_VALUE。
如果xoffset < -b, xoffset +width > (w - b), yoffset < -b, or yoffset + height > (h- b),這里w紋理的寬度,h是紋理的高度,b是被修改的紋理圖像的邊界,則產(chǎn)生GL_INVALID_VALUE。注意w 和h包含2倍的邊界寬。
如果寬、高小于0則產(chǎn)生GL_INVALID_VALUE。
如果type不是類型常量則產(chǎn)生GL_INVALID_ENUM。
如果type是GL_UNSIGNED_SHORT_5_6_5并且format不是GL_RGB則產(chǎn)生GL_INVALID_OPERATION。
如果type是GL_UNSIGNED_SHORT_4_4_4_4或GL_UNSIGNED_SHORT_5_5_5_1并且format不是GL_RGB則產(chǎn)生GL_INVALID_OPERATION。
如果不是上述的情形則產(chǎn)生GL_INVALID_OPERATION。
相關(guān)獲取:
利用glGetIntegerv方法,參數(shù)為GL_MAX_TEXTURE_SIZE。
參數(shù):
target——指明目標(biāo)紋理,必須是GL_TEXTURE_2D。
level——指明層級(jí)數(shù)。
xoffset——指明在紋理矩陣中在X方向上的偏移量。
yoffset——指明在紋理矩陣中在Y方向上的偏移量。
width——指明紋理子圖的寬。
height——指明紋理子圖的高。
format——指明像素?cái)?shù)據(jù)的格式,現(xiàn)在沒有支持的格式。
imageSize——指明壓縮圖像的大小,以byte為單位。
data——指明包含壓縮紋理圖像的緩沖區(qū)。
拋出:
java.lang.IllegalArgumentException——如果data為空。
java.lang.IllegalArgumentException——如果data.remaining()小于imageSize。
網(wǎng)絡(luò)解釋:
功能: 用一個(gè)二維紋理圖像替換當(dāng)前二維紋理圖像中的一個(gè)(矩形)區(qū)域.
target:取值與函數(shù)glCopyTexImage2D()中相同.
level, format, type: level是mipmap明細(xì)等級(jí). format和type描述了紋理圖像數(shù)據(jù)的格式和數(shù)據(jù)類型.
子圖像受函數(shù)glPixelStore()和glPixelTransfer()設(shè)置的模式以及其他像素轉(zhuǎn)移操作的影響.
xoffset, yoffset: 要替換的子區(qū)域左下角相對(duì)于當(dāng)前紋理左下角的位置.
width, height: 要替換的子區(qū)域的寬度和高度.
texels: 子圖像的紋理數(shù)據(jù).
glCopyTexImage2D
publicvoid glCopyTexImage2D(int target,
int level,
int internalformat,
int x,
int y,
int width,
int height,
int border)
功能:
指明一個(gè)像素從顏色緩沖區(qū)獲得的二維紋理圖像。
詳細(xì):
glCopyTexImage2D定義一個(gè)像素從顏色緩沖區(qū)獲得的二維紋理圖像。
獲取紋理數(shù)據(jù)的矩形,x、y代表矩形的左下角,寬為width + 2border,高為height of height +2border,分辨率為level指明的分辨率,internalformat指明紋理的顏色元素。
每一個(gè)被讀取的像素的紅、綠、藍(lán)、alpha元素被轉(zhuǎn)換為未指明精度的內(nèi)部整型或浮點(diǎn)型格式。轉(zhuǎn)換機(jī)構(gòu)將元素最大值映射為1.0,元素值為0時(shí)映射為0.0。然后值再被轉(zhuǎn)換為紋理內(nèi)部格式并儲(chǔ)存在像素矩陣中。
必須事先確定內(nèi)部格式以使顏色緩沖區(qū)元素在轉(zhuǎn)換時(shí)進(jìn)行處理。但新的顏色元素不能添加。舉一個(gè)例子,一個(gè)RGB顏色緩沖區(qū)可以被用來(lái)創(chuàng)建一個(gè)LUMINANCE或RGB紋理,不能是ALPHA、LUMINANCE_ALPHA或者RGBA紋理。
像素排列時(shí),下面的x、y坐標(biāo)與紋理的下面的s、t坐標(biāo)相對(duì)應(yīng)。
如果指明的顏色緩沖區(qū)矩形位于當(dāng)前渲染的窗口的外面,則那些獲取的值是未定義的。
注意:
一個(gè)寬、高均為0的圖像表示無(wú)紋理。
錯(cuò)誤:
如果target不是GL_TEXTURE_2D,將會(huì)產(chǎn)生GL_INVALID_ENUM(錯(cuò)誤枚舉)。
如果internalformat不與顏色緩沖區(qū)格式相匹配,將會(huì)產(chǎn)生GL_INVALID_OPERATION。
如果level小于0或者絕對(duì)值大于log_2(max),這里的max是GL_MAX_TEXTURE_SIZE的返回值。則產(chǎn)生GL_INVALID_VALUE。
如果寬、高小于0或大于GL_MAX_TEXTURE_SIZE或不滿足2^k + 2*border,k為整數(shù),將產(chǎn)生GL_INVALID_VALUE。
如果border不是0,將產(chǎn)生GL_INVALID_VALUE
(1.0) internalformat不是允許的符號(hào)常量,將產(chǎn)生GL_INVALID_VALUE(錯(cuò)誤值)。
(1.1) internalformat不是允許的符號(hào)常量,將產(chǎn)生GL_INVALID_ENUM(錯(cuò)誤枚舉)。
相關(guān)獲取:
glGetIntegerv方法,參數(shù)為GL_MAX_TEXTURE_SIZE。
參數(shù):
target——指明目標(biāo)紋理,必須為GL_TEXTURE_2D。
level——指明詳細(xì)層數(shù),level 0是基本圖像level,level n是第n層級(jí)數(shù)壓縮圖像。
internalformat——指明圖像的顏色元素,允許的符號(hào)常量有GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB以及GL_RGBA。
x——復(fù)制矩形的左下角x坐標(biāo)。
y——復(fù)制矩形的左下角y坐標(biāo)。
width——指明紋理圖像寬度,必須是0 或者 2^n + 2*border,n為整數(shù)。
height——指明紋理圖像高度,必須是0 或者 2^n + 2*border,n為整數(shù)。
border——指明邊界寬度。必須為0。
網(wǎng)絡(luò)解釋:
功能:復(fù)制幀緩存為紋理數(shù)據(jù)
target: 必須為常量GL_TEXTURE_2D
level, internalFormat, border: 同函數(shù)glTexImage2D()
x,y: 屏幕坐標(biāo)的左下點(diǎn)
width, height: 矩形的寬和高.
glCopyTexSubImage2D
publicvoid glCopyTexSubImage2D(int target,
int level,
int xoffset,
int yoffset,
int x,
int y,
int width,
int height)
功能:指明一個(gè)像素從顏色緩沖區(qū)獲得的二維紋理圖像子圖。
詳細(xì):glCopyTexSubImage2D
glCullFace
public void glCullFace(int mode)
功能:
指明多邊形的前面或后面是否被揀選。
詳細(xì):
glCullFace指明多邊形的前面或后面是否被揀選(當(dāng)mode被指明時(shí))當(dāng)揀選功能開啟。開啟或禁止揀選功能,調(diào)用glEnable方法和glDisable方法并以GL_CULL_FACE為參數(shù)。揀選功能初始值為禁止。
glFrontFace指明順時(shí)針和逆時(shí)針繪出多邊形,哪一個(gè)是前面,哪一個(gè)是背面。
注意:
如果mode是GL_FRONT_AND_BACK,多邊形不會(huì)被繪出,但是其他圖元像點(diǎn)、線會(huì)被繪出。
錯(cuò)誤:
如果mode不是被允許的值,將會(huì)產(chǎn)生GL_INVALID_ENUM。
參數(shù):
mode——指明多邊形的前面或后面是否被揀選。允許的符號(hào)常量有:GL_FRONT,GL_BACK和GL_FRONT_AND_BACK。初始值為GL_BACK。
glDrawElements
publicvoid glDrawElements(int mode,int count,int type,Buffer indices)
功能:
由矩陣數(shù)據(jù)渲染圖元。
詳細(xì):
glDrawElements用少量調(diào)用指明多重幾何圖元,你可以事先指明獨(dú)立的頂點(diǎn)、法線、顏色和紋理坐標(biāo)矩陣并且可以通過(guò)調(diào)用glDrawElements方法來(lái)使用它們創(chuàng)建序列圖元。
當(dāng)glDrawElements被調(diào)用,它會(huì)使用有序索引來(lái)查詢可用矩陣中的元素,并以此創(chuàng)建序列幾何圖元,如果GL_VERTEX_ARRAY被禁用,則不會(huì)創(chuàng)建。
頂點(diǎn)屬性由glDrawElements修改,glDrawElements在返回后會(huì)有一個(gè)未指明的值。舉一個(gè)例子,如果GL_COLOR_ARRAY啟用,當(dāng)執(zhí)行g(shù)lDrawElements方法后,當(dāng)前顏色的值是未定義的,屬性不會(huì)維持它之前的值。
錯(cuò)誤:
如果mode的值不被允許,將產(chǎn)生GL_INVALID_ENUM。
如果type的值不被允許,將產(chǎn)生GL_INVALID_ENUM。
如果count是負(fù)數(shù),將產(chǎn)生GL_INVALID_VALUE。
參數(shù):
mode——指明被渲染的是哪種圖元,被允許的符號(hào)常量有GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN和GL_TRIANGLES
count——指明被渲染的元素個(gè)數(shù)。
type——指明索引指的類型,不是GL_UNSIGNED_BYTE就是GL_UNSIGNED_SHORT。
indices——指明存儲(chǔ)索引的位置指針。
拋出:
java.lang.IllegalStateException——如果最近一次調(diào)用glBindBuffer方法以GL_ELEMENT_ARRAY_BUFFER為目標(biāo)時(shí),有一個(gè)非0緩沖區(qū)參數(shù)。
java.lang.IllegalArgumentException——如果索引為空。
java.lang.ArrayIndexOutOfBoundsException——如果索引序列中從0到count-1中任意索引超出現(xiàn)有索引或數(shù)據(jù)矩陣范圍。
glEnable
public void glEnable(int cap)
功能:
啟用服務(wù)器端GL功能。
詳細(xì):
glEnable方法和glDisable方法可以啟用和禁止各種功能,各種功能(除了GL_DITHER和GL_MULTISAMPLE)的初始值為GL_FALSE。
glEnable方法和glDisable方法都只有一個(gè)參數(shù),它可以采用下列值中的一個(gè):GL_ALPHA_TEST——如果啟用,將進(jìn)行alpha測(cè)試,詳見glAlphaFunc。
GL_BLEND——如果啟用,將引入的值與顏色緩沖區(qū)中的值混合,詳見glBlendFunc。
GL_COLOR_LOGIC_OP——如果啟用,允許(apply)引入的顏色與顏色緩沖區(qū)中的值進(jìn)行邏輯運(yùn)算。詳見glLogicOp。
GL_COLOR_MATERIAL——如果啟用,得到當(dāng)前顏色的周圍散開的痕跡。
GL_CULL_FACE——如果啟用,基于窗口坐標(biāo)采集多邊形。詳見glCullFace。
GL_DEPTH_TEST——如果啟用,做深度比較和更新深度緩存。值得注意的是即使深度緩沖區(qū)存在并且深度mask不是0,如果深度測(cè)試禁用的話,深度緩沖區(qū)也無(wú)法更新。詳見glDepthFunc, glDepthMask和glDepthRange。
GL_DITHER——如果啟用顏色元素或索引將在被寫入顏色緩沖區(qū)之前進(jìn)行dither。
GL_FOG——如果啟用,將霧的顏色效果與顯示紋理顏色混合。詳見glFog。
GL_LIGHTi——如果啟用,包含光線i在光線方程的評(píng)價(jià)中,詳見glLightModel和glLight。
GL_LIGHTING——如果啟用,用當(dāng)前光線參數(shù)計(jì)算頂點(diǎn)顏色。否則僅僅簡(jiǎn)單將當(dāng)前顏色與每個(gè)頂點(diǎn)關(guān)聯(lián)。詳見glMaterial, glLightModel和glLight。
GL_LINE_SMOOTH——如果啟用,畫線時(shí)使用調(diào)整過(guò)濾。否則,畫aliased線,詳見glLineWidth。
GL_MULTISAMPLE——如果啟用,為單程反鋸齒和其他效果顯示多樣本片段,詳見glSampleCoverage
GL_NORMALIZE——如果啟用,法向量被計(jì)算為單位向量,詳見glNormal和glNormalPointer。
GL_POINT_SMOOTH——如果啟用,使用調(diào)整過(guò)濾器描繪點(diǎn),否則,畫aliased點(diǎn),詳見glPointSize。
GL_POLYGON_OFFSET_FILL——如果啟用,在深度比較進(jìn)行前多邊形片段的深度值會(huì)進(jìn)行移位。
GL_RESCALE_NORMAL——如果啟用,法向量的刻度由視圖模型矩陣中的元素確定,詳見glNormal和glNormalPointer。
GL_SAMPLE_ALPHA_TO_MASK(僅1.0)——如果啟用,將alpha值轉(zhuǎn)變?yōu)槎鄻颖痉秶拚a。詳見glSampleCoverage。
GL_SAMPLE_ALPHA_TO_COVERAGE(僅1.1)——如果啟用,將會(huì)產(chǎn)生一個(gè)范圍值,它的每個(gè)bit都是由相應(yīng)的樣本位置的alpha值決定的。
GL_SAMPLE_ALPHA_TO_ONE——如果啟用,在計(jì)算完多樣本范圍修正碼后將片段alpha值設(shè)為被允許的最大值。詳見glSampleCoverage。
GL_SAMPLE_MASK(僅1.0)——如果啟用,在進(jìn)行多樣本時(shí),申請(qǐng)一個(gè)碼來(lái)修改片段范圍。
GL_SAMPLE_COVERAGE(僅1.1)——如果啟用,片段范圍會(huì)與另一個(gè)臨時(shí)的范圍值進(jìn)行與運(yùn)算。這個(gè)臨時(shí)的范圍值與上文中GL_SAMPLE_ALPHA_TO_COVERAGE描述的范圍值的確定方式相同。但是作為GL_SAMPLE_COVERAGE_VALUE的值的功能,如果GL_SAMPLE_COVERAGE_VALUE為GL_TRUE,在它與片段范圍值進(jìn)行與運(yùn)算前,這個(gè)臨時(shí)的范圍值是倒置的(所以bit的值都是倒置的),詳見glSampleCoverage。
GL_SCISSOR_TEST——如果啟用,丟棄裁剪矩形外的片段。詳見glScissor。
GL_STENCIL_TEST——如果啟用,做模板測(cè)試并更新模板緩沖區(qū),詳見glStencilFunc,glStencilMask和glStencilOp。
GL_TEXTURE_2D——如果啟用,當(dāng)前活動(dòng)紋理單元為二維紋理。詳見glActiveTexture,glTexImage2D,glCompressedTexImage2D和glCopyTexImage2D
GL_CLIP_PLANEi——如果啟用,裁剪面i可用。詳見glClipPlane。
GL_POINT_SPRITE_OES(1.1+ OES_point_sprite 擴(kuò)展)——如果啟用,點(diǎn)塊紋理可用,詳見glPointSize和glTexEnv。
錯(cuò)誤:
如果參數(shù)不是前面列表中的值,將會(huì)產(chǎn)生一個(gè)GL_INVALID_ENUM。
參數(shù):
cap——指定一個(gè)在GL空間中聲明的符號(hào)常量。
glEnableClientState
publicvoid glEnableClientState(int array)
功能:
啟用客戶端的某項(xiàng)功能。
詳細(xì):
glEnableClientState和glDisableClientState啟用或禁用客戶端的單個(gè)功能。默認(rèn)的,所有客戶端功能禁用。
array可以是下列符號(hào)常量:
GL_COLOR_ARRAY——如果啟用,顏色矩陣可以用來(lái)寫入以及調(diào)用glDrawArrays方法或者glDrawElements方法時(shí)進(jìn)行渲染。詳見glColorPointer。
GL_NORMAL_ARRAY——如果啟用,法線矩陣可以用來(lái)寫入以及調(diào)用glDrawArrays方法或者glDrawElements方法時(shí)進(jìn)行渲染。詳見glNormalPointer。
GL_TEXTURE_COORD_ARRAY——如果啟用,紋理坐標(biāo)矩陣可以用來(lái)寫入以及調(diào)用glDrawArrays方法或者glDrawElements方法時(shí)進(jìn)行渲染。詳見glTexCoordPointer。
GL_VERTEX_ARRAY——如果啟用,頂點(diǎn)矩陣可以用來(lái)寫入以及調(diào)用glDrawArrays方法或者glDrawElements方法時(shí)進(jìn)行渲染。詳見glVertexPointer。
GL_POINT_SIZE_ARRAY_OES(OES_point_size_arrayextension)——如果啟用,點(diǎn)大小矩陣控制大小以渲染點(diǎn)和點(diǎn)sprites。這時(shí)由glPointSize定義的點(diǎn)大小將被忽略,由點(diǎn)大小矩陣提供的大小將被用來(lái)渲染點(diǎn)和點(diǎn)sprites。詳見glPointSize。
注意:
啟用和禁用GL_TEXTURE_COORD_ARRAY將會(huì)影響活動(dòng)的客戶紋理單元,活動(dòng)的客戶紋理單元由glClientActiveTexture控制。
錯(cuò)誤:
如果array不是被允許的值,將產(chǎn)生GL_INVALID_ENUM。
參數(shù):
array——指明啟用的功能,允許的符號(hào)常量有GL_COLOR_ARRAY,GL_NORMAL_ARRAY,GL_TEXTURE_COORD_ARRAY,GL_VERTEX_ARRAY,和GL_POINT_SIZE_ARRAY_OES (OES_point_size_array extension)
glFrontFace
public void glFrontFace(int mode)
功能:
定義多邊形的正面和背面。
詳細(xì):
在一個(gè)完全由不透明的密閉surface組成的場(chǎng)景中,多邊形的背面永遠(yuǎn)不會(huì)被看到。剔除這些不能顯示出來(lái)的面可以加速渲染器渲染圖像的時(shí)間。開啟和禁用剔除功能,調(diào)用glEnable和glDisable方法并以GL_CULL_FACE為參數(shù)。剔除功能初始值為禁止。
如果一個(gè)虛擬的對(duì)象從第一個(gè)頂點(diǎn),到第二個(gè)頂點(diǎn),等等,直到最后一個(gè)頂點(diǎn),這個(gè)多邊形頂點(diǎn)移動(dòng)的方向是按順時(shí)針移動(dòng)的,則這個(gè)多邊形窗口坐標(biāo)上的投影被認(rèn)為是按順時(shí)針繪出的。如果一個(gè)虛擬的對(duì)象從第一個(gè)頂點(diǎn),到第二個(gè)頂點(diǎn),等等,直到最后一個(gè)頂點(diǎn),這個(gè)多邊形頂點(diǎn)移動(dòng)的方向是按逆時(shí)針移動(dòng)的,則這個(gè)多邊形窗口坐標(biāo)上的投影被認(rèn)為是按逆時(shí)針繪出的。glFrontFace指明多邊形在窗口坐標(biāo)中是順時(shí)的還是逆時(shí)針被作為正面。傳遞GL_CCW給mode則選擇逆時(shí)針多邊形為正面,GL_CW則選擇順時(shí)針多邊形為正面。默認(rèn)逆時(shí)針多邊形為正面。
錯(cuò)誤:
如果mode不是被允許的值,將產(chǎn)生GL_INVALID_ENUM。
參數(shù):
mode——多邊形正面的方向。GL_CW和GL_CCW被允許,初始值為GL_CCW。
glHint
public void glHint(int target,int mode)
功能:
控制GL某些行為。
詳細(xì):
當(dāng)擁有解釋的空間時(shí),GL某些方面的行為可以由hints控制。一個(gè)hints由兩個(gè)參數(shù)指明。target是一個(gè)由常量符號(hào)描述的用以被控制的行為。mode是另一個(gè)由符號(hào)常量描述的想要執(zhí)行的行為。target的初始值是GL_DONT_CARE。mode允許的符號(hào)常量有:
GL_FASTEST——選擇最有效率的選項(xiàng)。
GL_NICEST——選擇最正確或質(zhì)量最好的選項(xiàng)。
GL_DONT_CARE——無(wú)任何傾向。
盡管hints控制實(shí)現(xiàn)的方面可以很好的定義,但hints的解釋仍依賴于具體的實(shí)現(xiàn)。hints控制的方面由target指明,允許的符號(hào)常量有:
GL_FOG_HINT——表明霧效果計(jì)算的精確度,如果每個(gè)像素的霧效果計(jì)算不能被GL效率支持的話,那么GL_DONT_CARE或GL_FASTEST可以用于每個(gè)每個(gè)頂點(diǎn)的霧效果計(jì)算。
GL_LINE_SMOOTH_HINT——表明直線抗鋸齒的效果。如果應(yīng)用一個(gè)大的過(guò)濾函數(shù), GL_NICEST可以應(yīng)用于更多的在光柵化時(shí)產(chǎn)生的像素上。
GL_PERSPECTIVE_CORRECTION_HINT——表明顏色和紋理坐標(biāo)插值的效果。如果遠(yuǎn)點(diǎn)修正插入不能被GL有效支持的話,那么GL_DONT_CARE或者GL_FASTEST可以應(yīng)用于顏色的線性插值或是紋理坐標(biāo)。
GL_POINT_SMOOTH_HINT——表明反走樣點(diǎn)的效果。如果應(yīng)用一個(gè)大的過(guò)濾函數(shù),GL_NICEST可以應(yīng)用于更多的在光柵化時(shí)產(chǎn)生的像素上。
GL_GENERATE_MIPMAP_HINT(僅1.1)——表明自動(dòng)生成的mipmap的質(zhì)量和性能。
注意:
hints的解釋基于具體的實(shí)現(xiàn)。一些實(shí)現(xiàn)會(huì)忽略glHint設(shè)置。
錯(cuò)誤:
target——指明一個(gè)符號(hào)常量來(lái)表明被控制的行為。有GL_FOG_HINT ,GL_LINE_SMOOTH_HINT,GL_PERSPECTIVE_CORRECTION_HINT,和GL_POINT_SMOOTH_HINT,在1.1還有GL_GENERATE_MIPMAP_HINT。
mode——指明一個(gè)符號(hào)常量來(lái)表明想要執(zhí)行的行為。有GL_FASTEST,GL_NICEST和GL_DONT_CARE。
網(wǎng)絡(luò)解釋:
void glHint(GLenum target,GLenum hint); // 控制OpenGL的某些行為
參數(shù)target是要控制的行為
參數(shù)hint可以是GL_FASTEST, GL_NICEST,GL_DONT_CARE.(效率最高, 質(zhì)量最好, 沒有選擇)
參數(shù)target的取值及其含義:
GL_POINT_SMOOTH_HINT, GL_LINE_SMOOTH_HINT, GL_POLYGON_SMOOTH_HINT----反走樣操作中, 直線,點(diǎn)或多邊形的采樣質(zhì)量.
GL_FOG_HINT----對(duì)每個(gè)像素(GL_NICEST)還是每個(gè)頂點(diǎn)(GL_FASTEST)執(zhí)行霧效計(jì)算.
GL_PERSPECTIV_CORRECTION_HINT----顏色和紋理坐標(biāo)插值的質(zhì)量
GL_GENERATE_MIPMAP_HINT----自動(dòng)生成的mipmap的質(zhì)量和性能
GL_TEXTURE_COMPRESSION_HINT----紋理圖案的壓縮質(zhì)量和性能.
glLineWidth
public void glLineWidth(float width)
功能:
指明光柵化線段的寬度。
詳細(xì):
glLineWidth指明可走樣或反走樣線的寬度。使用不是1的線寬會(huì)不會(huì)有不同的效果,取決與是否開啟反走樣功能。開啟和關(guān)閉反走樣功能需調(diào)用glEnable和 glDisable并以GL_LINE_SMOOTH為參數(shù)。反走樣功能初始值為關(guān)閉。
如果線的反走樣功能被關(guān)閉,實(shí)際的寬度由設(shè)定寬度的最近整數(shù)值決定。(如果這個(gè)整數(shù)是0,則按照1來(lái)處理)如果|deltax| >= |delta y|,每個(gè)被光柵化的列的i個(gè)像素會(huì)被填充,i是指寬度的整數(shù)話的值。否則,沒行的的i個(gè)像素點(diǎn)會(huì)被填充。
如果反走樣功能啟用的話,線光柵化時(shí)會(huì)為每個(gè)像素區(qū)產(chǎn)生一個(gè)片段,這些像素區(qū)以矩形形式貫穿這個(gè)區(qū)域,矩形的寬度等于當(dāng)前的線寬,長(zhǎng)度等于線的真實(shí)長(zhǎng)度,并以該線段為中心。每個(gè)片段的覆蓋值是矩形區(qū)域相應(yīng)的像素區(qū)域的坐標(biāo)區(qū)域。這個(gè)值被保存起來(lái),在光柵化時(shí)使用。
當(dāng)反走樣功能開啟時(shí),不是所有的寬度都被支持。如果設(shè)置了一個(gè)不不被支持的值,將會(huì)使用離這個(gè)值最近的被支持的值。只有1可以保證是被支持的值,其他值要依據(jù)相應(yīng)的應(yīng)用平臺(tái)來(lái)確定。同樣的,對(duì)于走樣的線寬度也有一個(gè)范圍。想詢問被支持的線寬范圍以及這個(gè)范圍內(nèi)被支持線寬的大小不同處,需要調(diào)用glGetIntegerv方法并以GL_ALIASED_LINE_WIDTH_RANGE,GL_SMOOTH_LINE_WIDTH_RANGE,GL_SMOOTH_LINE_WIDTH_GRANULARITY為參數(shù)。
注意:
沒有反走樣的線線寬可能會(huì)在由應(yīng)用平臺(tái)決定的最大值以內(nèi),可以使用glGetIntegerv方法并以GL_ALIASED_LINE_WIDTH_RANGE為參數(shù)來(lái)這個(gè)最大線寬。
錯(cuò)誤:
如果線寬小于等于0,將會(huì)產(chǎn)生GL_INVALID_VALUE。
參數(shù):
width——指定光柵化時(shí)的線寬度,初始值為1。
glLoadIdentity
public void glLoadIdentity()
功能:
用特征矩陣代替當(dāng)前矩陣。
詳細(xì):
glLoadIdentity使特征矩陣代替當(dāng)前矩陣。語(yǔ)義上等價(jià)于調(diào)用glLoadMatrix方法并以特征矩陣為參數(shù)。
( 1 0 0 0 )
( 0 1 0 0 )
( 0 0 1 0 )
( 0 0 0 1 )
但在一些情況下它更高效。
glMatrixMode
public void glMatrixMode(int mode)
功能:
指明哪個(gè)矩陣是當(dāng)前矩陣。
詳細(xì):
glMatrixMode設(shè)置當(dāng)前矩陣模式,mode允許的值有:
GL_MODELVIEW——應(yīng)用視圖矩陣堆的后續(xù)矩陣操作。
GL_PROJECTION——應(yīng)用投射矩陣堆的后續(xù)矩陣操作。
GL_TEXTURE——應(yīng)用紋理矩陣堆的后續(xù)矩陣操作。
GL_MATRIX_PALETTE_OES(OES_matrix_palette擴(kuò)展)——啟用矩陣調(diào)色板堆棧擴(kuò)展,并應(yīng)用矩陣調(diào)色板堆棧后續(xù)矩陣操作。
錯(cuò)誤:
如果mode不是一個(gè)允許的值,將產(chǎn)生一個(gè)GL_INVALID_ENUM。
參數(shù):
mode——指明哪一個(gè)堆允許后續(xù)的矩陣操作。允許的值有L_MODELVIEW,GL_PROJECTION和GL_TEXTURE,在有OES_matrix_palette擴(kuò)展時(shí),GL_MATRIX_PALETTE_OES也被允許,初始值是GL_MODELVIEW。
glRotatef
publicvoid glRotatef(float angle,float x,float y,float z)
功能:
用旋轉(zhuǎn)矩陣乘以當(dāng)前矩陣。
詳細(xì):
glRotate將圍繞向量(x, y, z)產(chǎn)生一定角度的旋轉(zhuǎn)。由旋轉(zhuǎn)矩陣乘以當(dāng)前矩陣(詳見glMatrixMode),并由其乘積代替當(dāng)前矩陣。好像調(diào)用glMultMatrix方法,并以下列矩陣為參數(shù):
(x^2(1 - c) + c xy (1 - c) -zs xz (1 - c) + ys 0 )
(xy (1 - c) + zs y^2(1 - c) + c yz (1 - c) - xs 0 )
(xz (1 - c) - ys yz (1 - c) +xs z^2(1 - c) + c 0 )
( 0 0 0 1 )
這里c = cos (angle), s = sin (angle),and ||(x, y, z)|| = 1, (如果不是, GL 將格式化該向量)。
如果矩陣模式是GL_MODELVIEW或者GL_PROJECTION,調(diào)用glRotate方法后所有被繪對(duì)象將旋轉(zhuǎn)一個(gè)角度。使用glPushMatrix方法和glPopMatrix方法儲(chǔ)存未旋轉(zhuǎn)坐標(biāo)系統(tǒng)。
注意:
旋轉(zhuǎn)方式服從右手原則,所以如果一個(gè)向量(x, y, z)指向用戶方向,將按逆時(shí)針方向旋轉(zhuǎn)。
參數(shù):
angle——指明旋轉(zhuǎn)的角度,單位為度。
x——指明旋轉(zhuǎn)向量的x坐標(biāo)。
y——指明旋轉(zhuǎn)向量的y坐標(biāo)。
z——指明旋轉(zhuǎn)向量的z坐標(biāo)。
glRotatex
publicvoid glRotatex(int angle,int x,int y,int z)
功能:
glRotatef的修正方法。
glScalef
publicvoid glScalef(float x,float y,float z)
功能:
用縮放矩陣乘以當(dāng)前矩陣。
詳細(xì):
glScale沿著x、y、z坐標(biāo)軸產(chǎn)生并不統(tǒng)一的縮放。三個(gè)參數(shù)表明沿著每個(gè)坐標(biāo)軸想要的縮放因子。
用縮放矩陣乘以當(dāng)前矩陣(詳見glMatrixMode),其乘積將代替當(dāng)前矩陣,就好像調(diào)用glMatrixMode方法,并以下列矩陣為參數(shù):
(x 0 0 0 )
(0 y 0 0 )
(0 0 z 0 )
(0 0 0 1 )
如果矩陣模式不是GL_MODELVIEW就是GL_PROJECTION的話,則調(diào)用glScale方法后所以被繪的對(duì)象將產(chǎn)生一個(gè)縮放。
使用glPushMatrix方法和glPopMatrix方法儲(chǔ)存未縮放坐標(biāo)系統(tǒng)。
注意:
如果不僅僅一個(gè)縮放矩陣應(yīng)用于模式視圖矩陣,并且啟用光線效果,光線常常出現(xiàn)錯(cuò)誤。這種情況下,調(diào)用glEnable方法并以GL_NORMALIZE為參數(shù),啟用法線自動(dòng)格式化功能。
參數(shù):
x——指明x坐標(biāo)軸上的縮放因子。
y——指明y坐標(biāo)軸上的縮放因子。
z——指明z坐標(biāo)軸上的縮放因子。
glScalex
publicvoid glScalex(int x,int y,int z)
功能:
glScalef方法的修正方法。
glShadeModel
public void glShadeModel(int mode)
功能:
選擇恒定或光滑著色模式。
詳細(xì):
GL圖元可以采用恒定或者光滑著色模式,默認(rèn)值為光滑著色模式。當(dāng)圖元進(jìn)行光柵化的時(shí)候,將引起插入頂點(diǎn)顏色計(jì)算,不同顏色將被均勻分布到各個(gè)像素片段。恒定著色模式則選擇計(jì)算一個(gè)頂點(diǎn)的顏色并在光柵化一個(gè)圖元時(shí)分布到所有產(chǎn)生的像素片段。不管任何情況下,如果光照功能開啟的話頂點(diǎn)顏色計(jì)算時(shí)會(huì)有光照效果或者當(dāng)光照效果關(guān)閉的話被指定的頂點(diǎn)計(jì)算顏色為那時(shí)的當(dāng)前顏色。恒定和光滑著色模式不能區(qū)分點(diǎn)。在頂點(diǎn)矩陣開始時(shí)開始,并開始頂點(diǎn)計(jì)數(shù),而圖元是從1開始的。GL使恒定著色模式的線段i計(jì)算第i+1頂點(diǎn)的顏色,即它的第二個(gè)頂點(diǎn)。計(jì)算同樣從1開始,GL使恒定著色模式的多邊形計(jì)算第i+2頂點(diǎn)的顏色,即指明多邊形的最后一個(gè)頂點(diǎn)。
恒定和光滑著色模式由glShadeModel使用GL_FLAT和GL_SMOOTH參數(shù)來(lái)設(shè)定。
錯(cuò)誤:
如果參數(shù)是GL_FLAT或GL_SMOOTH以外的值,將產(chǎn)生GL_INVALID_ENUM。
參數(shù):
mode——指明一個(gè)符號(hào)常量來(lái)代表要使用的著色技術(shù)。允許的值有GL_FLAT 和GL_SMOOTH,初始值為GL_SMOOTH。
glTranslatef
publicvoid glTranslatef(float x,float y,float z)
功能:
用平移矩陣乘以當(dāng)前矩陣。
詳細(xì):
glTranslate通過(guò)向量(x, y, z) 產(chǎn)生平移,以平移矩陣乘以當(dāng)前矩陣(見glMatrixMode),用乘積代替當(dāng)前矩陣,就好像調(diào)用glMultMatrix方法并以下列矩陣為參數(shù):
(1 0 0 x )
(0 1 0 y )
(0 0 1 z )
(0 0 0 1 )
如果矩陣模式是GL_MODELVIEW或GL_PROJECTION,則調(diào)用glTranslate方法后所繪的對(duì)象都將發(fā)生平移。
使用glPushMatrix方法和glPopMatrix方法來(lái)保存沒有平移的坐標(biāo)系統(tǒng)。
參數(shù):
x——指明平移向量的x坐標(biāo)。
y——指明平移向量的y坐標(biāo)。
z——指明平移向量的z坐標(biāo)。
glTranslatex
publicvoid glTranslatex(int x,int y,int z)
功能:
glTranslatef方法的修正方法。
glVertexPointer
publicvoid glVertexPointer(int size,int type,int stride,Buffer pointer)
功能:
定義一個(gè)頂點(diǎn)坐標(biāo)矩陣。
詳細(xì):
glVertexPointer指明當(dāng)渲染時(shí)一個(gè)頂點(diǎn)坐標(biāo)矩陣的存儲(chǔ)單元和數(shù)據(jù)。
當(dāng)一個(gè)頂點(diǎn)矩陣被指明時(shí),size, type, stride和pointer保存為客戶端狀態(tài)。
如果頂點(diǎn)矩陣功能啟用,當(dāng)調(diào)用glDrawArrays方法或glDrawElements方法時(shí)會(huì)使用。想要啟用或禁止頂點(diǎn)矩陣,使用glEnableClientState或glDisableClientState方法,并以GL_VERTEX_ARRAY為參數(shù)。頂點(diǎn)矩陣初始為禁止,調(diào)用glDrawArrays方法或glDrawElements方法時(shí)無(wú)效。
調(diào)用glDrawArrays方法根據(jù)事先指明的點(diǎn)和頂點(diǎn)屬性矩陣創(chuàng)建一系列圖元(都有相同的類型)。調(diào)用glDrawElements方法根據(jù)頂點(diǎn)索引和頂點(diǎn)屬性創(chuàng)建一系列圖元。
注意:
glVertexPointer在一般版本中是在客戶端的。
錯(cuò)誤:
如果size不是2, 3或者4,將產(chǎn)生GL_INVALID_VALUE。
如果type不是允許的值,將產(chǎn)生GL_INVALID_ENUM。
如果stride是負(fù)值,將產(chǎn)生GL_INVALID_VALUE。
pointer必須是直接緩存,并且類型與type指明的類型相同。
參數(shù):
size——每個(gè)頂點(diǎn)的坐標(biāo)維數(shù),必須是2, 3或者4,初始值是4。
type——指明每個(gè)頂點(diǎn)坐標(biāo)的數(shù)據(jù)類型,允許的符號(hào)常量有GL_BYTE, GL_SHORT, GL_FIXED和GL_FLOAT,初始值為GL_FLOAT。
stride——指明連續(xù)頂點(diǎn)間的位偏移,如果為0,頂點(diǎn)被認(rèn)為是緊密壓入矩陣,初始值為0。
pointer——指明頂點(diǎn)坐標(biāo)的緩沖區(qū),如果為null,則沒有設(shè)置緩沖區(qū)。
拋出:
java.lang.IllegalStateException——如果是OpenGL ES 1.1并且VBOs可用。
java.lang.IllegalArgumentException——如果pointer不是直接緩存。
glViewport
publicvoid glViewport(int x,int y,int width,int height)
功能:
設(shè)置一個(gè)視口
詳細(xì):
glViewport指明x、y從標(biāo)準(zhǔn)設(shè)備坐標(biāo)到窗口坐標(biāo)的仿射變換,使(xnd, ynd)為標(biāo)準(zhǔn)設(shè)備坐標(biāo),然后窗口坐標(biāo)(xw, yw)由下列公式計(jì)算:
xw= ( xnd + 1 ) width/2 + x
yw= ( ynd + 1 ) height/2 + y
視口寬、高的范圍區(qū)間視版本而定,想查詢此區(qū)間可使用方法glGetIntegerv,并以GL_MAX_VIEWPORT_DIMS為參數(shù)。
錯(cuò)誤:
如果寬、高為負(fù)數(shù),將產(chǎn)生GL_INVALID_VALUE
參數(shù):
x——指明視口矩形的左下角x坐標(biāo),初始值為0。
y——指明視口矩形的左下角y坐標(biāo),初始值為0。
width——指明視口的寬,如果GL上下文首次附于一個(gè)surface則寬、高為這個(gè)surface大小。
height——指明視口的高,如果GL上下文首次附于一個(gè)surface則寬、高為這個(gè)surface大小。