javax.microedition.khronos.opengles
接口GL10
上級接口:GL
下級接口:GL11
公共接口GL10繼承于GL
GL10接口包含了Java(TM)程序語言為OpenGL綁定的核心功能。OES_byte_coordinates,OES_single_precision,OES_fixed_point,OES_read_format,以及OES_compressed_paletted_texture等擴展功能也是這個接口的一部分锥咸。
一個以x或xv為后綴的方法是屬于OES_fixed_point擴展功能的祷蝌,并且需要一個或更多的修正的點為參數(shù)辕漂。這些修正的點可能是浮點點派生出來的值通過乘以65536后再取最接近整數(shù)得到。
為了使用方便起見唯灵,這個接口記錄了OpenGL ES各版本包括1.1及其擴展版本的方法。當運行一個OpenGL ES 1.0的應(yīng)用程序時,被標為“(僅1.1)”可以被忽略禽拔。
查看GL接口描述,了解如何獲取該接口實例室叉。
方法的詳細描述:
glActiveTexture
publicvoid glActiveTexture(int texture)
功能:
選擇服務(wù)端活動的紋理單元
詳細:glActiveTexture選擇哪一個紋理在后面的紋理狀態(tài)改變時有效睹栖,紋理單元的數(shù)量是依據(jù)該紋理單元所被支持的具體實現(xiàn)。在OpenGL ES 1.0中至少一個茧痕,在OpenGL ES 1.1中至少兩個野来。
注意:
常常會這樣GL_TEXTUREi = GL_TEXTURE0+ i
一個紋理單元由紋理可用狀態(tài)、紋理矩陣堆踪旷、紋理環(huán)境以及當前渲染紋理組成曼氛。修改其中任一成分均會改變當前活動紋理單元豁辉。
點陣是客戶端GL資源,它通過glClientActiveTexture程序獲取舀患。
錯誤:
當0 <= i <GL_MAX_TEXTURE_UNITS 時徽级,如果紋理不是一個GL_TEXTUREi ,GL_INVALID_ENUM(錯誤枚舉)會產(chǎn)生聊浅。
相關(guān)獲炔颓馈:
利用glGetIntegerv處理GL_MAX_TEXTURE_UNITS。
參數(shù):
texture——指定哪一個紋理單元為活動低匙。必須是一個GL_TEXTUREi旷痕,其中0 <= i < GL_MAX_TEXTURE_UNITS,初始值為GL_TEXTURE0顽冶。
glAlphaFunc
publicvoid glAlphaFunc(int func,float ref)
功能:
指定Alpha測試功能苦蒿。
詳細:
Alpha測試依據(jù)結(jié)果舍棄片段,該結(jié)果由引入片段的alpha值與參照值常量進行比較得到渗稍。glAlphaFunc指定參照值與比較方法佩迟。只有當alpha測試有效時,比較才有用竿屹。使alpha測試有效或無效可以利用glEnable和glDisable方法报强,它們都是以GL_ALPHA_TEST為參數(shù)的,alpha測試初始為無效拱燃。
func與ref指明像素被繪出的條件秉溉。引入的alpha值通過func指明的方法與ref指明的參照值進行比較。如果該值通過比較并且通過隨后的模型測試與深度緩沖區(qū)測試碗誉,則將引入的片段繪出召嘶。如果該值未通過比較,則該像素區(qū)的幀緩沖區(qū)不會發(fā)生任何變化哮缺。比較方法如下:
GL_NEVER:不會通過弄跌。
GL_LESS:如果引入的alpha值比參照值小則通過。
GL_EQUAL:如果引入的alpha值與參照值相等則通過尝苇。
GL_LEQUAL:如果引入的alpha值小于或等于參照值則通過铛只。
GL_GREATER:如果引入的alpha值比參照值大則通過。
GL_NOTEQUAL:如果引入的alpha值與參照值不相等則通過糠溜。
GL_GEQUAL:如果引入的alpha值大于或等于參照值則通過淳玩。
GL_ALWAYS:總是通過。(初始設(shè)定)
對所有的像素寫入操作進行g(shù)lAlphaFunc操作非竿,包括那些從點蜕着、線、多邊形的掃描轉(zhuǎn)換得到的結(jié)果红柱。glAlphaFunc對glClear無影響承匣。
錯誤:
當func不是被允許的值會產(chǎn)生GL_INVALID_ENUM(錯誤枚舉)蓖乘。
參數(shù):
func——指明alpha比較方法,被允許的符合常量有GL_NEVER, GL_LESS,GL_EQUAL, GL_LEQUAL, GL_GREATER, GL_NOTEQUAL, GL_GEQUAL, 和 GL_ALWAYS悄雅。初始值為GL_ALWAYS。
ref——指明與引入的alpha值比較的參照值铁蹈,這個值的屬于區(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)
功能:
將一個已命名的紋理與一個紋理目標綁定。
詳細:glBindTexture可以讓你創(chuàng)建或使用一個已命名的紋理沿腰,調(diào)用glBindTexture方法并將target設(shè)置為GL_TEXTURE_2D览徒,將texture設(shè)置為你想要綁定的新紋理的名稱。當一個紋理與目標綁定時颂龙,該目標之前的綁定關(guān)系將自動被釋放习蓬。
紋理的名稱是一個無符號的整數(shù)。在每個紋理目標中措嵌,0被保留用以代表默認紋理躲叼。紋理名稱與相應(yīng)的紋理內(nèi)容被保留在當前GL rendering上下文的共享的紋理對象空間中(參照eglCreateContext)
你可以使用glGenTextures來設(shè)置一個新的紋理名稱。
當一個紋理被綁定時企巢,對于其目標的GL操作將作用于該綁定的紋理之上枫慷。如果被綁定的紋理的目標的維度的紋理映射是活動的,則綁定的紋理被使用浪规。實際上或听,紋理目標成為當前被綁定紋理的別名,并且紋理名稱0指的是在初始化時被綁定的默認紋理笋婿。
通過glBindTexture綁定的紋理仍舊是活動的直到同一個目標被其他紋理綁定或者該綁定紋理通過glDeleteTextures刪除為止誉裆。
一旦創(chuàng)建,一個已命名的紋理可能經(jīng)常需要與維度匹配的目標多次綁定缸濒。這樣利用glBindTexture來將一個已命名的紋理與一個紋理目標綁定找御,比利用glTexImage2D進行紋理圖像的重載要快的多。
錯誤:
當目標不是一個被允許的值時绍填,會產(chǎn)生GL_INVALID_ENUM(錯誤枚舉)霎桅。
參數(shù):
target——指明紋理要綁定的目標,必須是GL_TEXTURE_2D讨永。
texture——指明紋理的名稱滔驶。
glBlendFunc
publicvoid glBlendFunc(int sfactor,int dfactor)
功能:
指明像素算法。
詳細:
像素可以通過函數(shù)操作后被繪出卿闹,該函數(shù)的功能是將引入的值與顏色緩沖中已有的值混合揭糕。使用glEnable方法與glDisable方法以GL_BLEND為參數(shù)萝快,決定是否開啟混合功能,該功能初始為關(guān)閉的著角。
當混合功能開啟時glBlendFunc定義混合功能的操作揪漩。sfactor指明十一中方法中的哪一種用來衡量源顏色要素,dfactor指明十種方法中的哪一種用來衡量目的顏色要素吏口。十一種可能的方法將在下面進行介紹奄容。每一種方法定義了四個衡量元素,分別是紅产徊、綠昂勒、藍和alpha。
在后面的內(nèi)容中舟铜,源與目的顏色要素被指為(Rs, Gs, Bs, As)和(Rd, Gd, Bd, Ad)戈盈,它們的值為0至(kR, kG, kB, kA)之間的整數(shù),其中kc = 2mc – 1谆刨,并且(mR, mG, mB, mA)是紅塘娶、綠、藍和alpha位平面的數(shù)量痊夭。
源和目標比例系數(shù)由(sR, sG, sB, sA)和(dR, dG, dB, dA)指定血柳。比例系數(shù)用(fR, fG, fB, fA)表示,代表既不是源也不是目標因素生兆,所有比例系數(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īng)當?shù)扔?的混合因素要被確保沒有修改它的被乘數(shù)合蔽,并且一個等于0的混合因素要降低它的被乘數(shù)至0击敌。舉一個例子,當sfactor是GL_SRC_ALPHA拴事,dfactor 是GL_ONE_MINUS_SRC_ALPHA并且As等于kA時沃斤,等式進行簡單替換。
Rd= Rs
Gd= Gs
Bd= Bs
Ad= As
對于所有像素元素的寫入操作進行g(shù)lBlendFunc操作時刃宵,包括對于點衡瓶、線、多邊形的掃描轉(zhuǎn)換牲证,都不影響glClear方法哮针。
舉例:
為了渲染物體從遠到近排列的效果,最好應(yīng)用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)處理透明度。請注意這個透明度計算不要求存在顏色緩沖區(qū)中的alpha位面數(shù)十厢。
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)對于渲染抗鋸齒的點和線也很有效等太。
注意:
引入的(源)alpha被認為是不透明的,范圍是1.0 (kA)蛮放,表明完全不透明缩抡,而0表明完全透明。
錯誤:
當sfactor或dfactor為不允許的值時包颁,產(chǎn)生GL_INVALID_ENUM(錯誤枚舉)瞻想。
參數(shù):
sfactor——指明源圖元的紅、綠徘六、藍内边、alpha的混合比例是怎樣計算的榴都。允許的符號符號常量有: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——指明目圖元的紅嘴高、綠竿音、藍、alpha的混合比例是怎樣計算的拴驮。允許的符號符號常量有: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ò)解釋:
第一個參數(shù)指出源圖元的alpha的取值計算方法,第二個參數(shù)指出目標處的alpha的計算方法套啤。
兩個參數(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表示取目標區(qū)域的顏色值潜沦,GL_SRC_ALPHA表示取源區(qū)域的alpha值等等萄涯。例如:
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
表示把渲染的圖像疊加到目標區(qū)域,也就是說源的每一個像素的alpha都等于自己的alpha唆鸡,目標的每一個像素的alpha等于1涝影。這樣疊加次數(shù)越多,疊加的圖元的alpha越高争占,得到的結(jié)果就越亮燃逻。因此這種融合用于表達光亮效果。
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
表示把渲染的圖像融合到目標區(qū)域臂痕。也就是說源的每一個像素的alpha都等于自己的alpha伯襟,目標的每一個像素的alpha等于1減去該位置源像素的alpha。 因此不論疊加多少次握童,亮度是不變的逗旁。
glClear
publicvoid glClear(int mask)
功能:
清理緩沖區(qū),并設(shè)置為預(yù)設(shè)值。
詳細:
glClear設(shè)置窗口位面區(qū)的值片效,該值由glClearColor, glClearDepth 和 glClearStencil等方法選擇出红伦。
像素所有權(quán)測試、裁剪測試淀衣、抖動昙读、顏色緩沖區(qū)掩飾將影響glClear操作,裁剪盒綁定清理區(qū)域膨桥。Alpha功能蛮浑、混合功能、邏輯操作只嚣、建模沮稚、紋理映射以及深度緩沖區(qū)會被glClear操作忽略。
glClear可以使參數(shù)為多個值按位與后的結(jié)果册舞,以表明那個緩沖區(qū)需要清理蕴掏。
有如下值:
GL_COLOR_BUFFER_BIT:表明顏色緩沖區(qū)。
GL_DEPTH_BUFFER_BIT:表明深度緩沖區(qū)调鲸。
GL_STENCIL_BUFFER_BIT:表明模型緩沖區(qū)盛杰。
注意:
如果緩沖區(qū)并沒有呈現(xiàn)出來,則glClear對指向的緩沖區(qū)無效果藐石。
錯誤:
如果使用任一非已定義的值將產(chǎn)生GL_INVALID_VALUE(錯誤枚舉)即供。
參數(shù):
mask——允許的值有GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, and GL_STENCIL_BUFFER_BIT。
網(wǎng)絡(luò)解釋:
glClear()語句的作用是用當前緩沖區(qū)清除值于微,也就是glClearColor或者glClearDepth等函數(shù)所指定的值來清除指定的緩沖區(qū)逗嫡。比如:
glClearColor(0.0,0.0株依,0.0驱证,0.0);
glClear(GL_COLOR_BUFFER_BIT);
第一條語句表示清除顏色設(shè)為黑色,第二條語句表示把整個窗口清除為當 前的清除顏色勺三,glClear()的唯一參數(shù)表示需要被清除的緩沖區(qū)雷滚。
glClearColor
publicvoid glClearColor(float red,float green,float blue,float alpha)
功能:指定顏色緩沖區(qū)的清理值
詳細:glClearColor指明紅、綠吗坚、藍祈远、alpha的值并通過glClear來清理顏色緩沖區(qū),被glClearColor指明的值屬于區(qū)間[0, 1]商源。
參數(shù):
red——指明顏色緩沖區(qū)被清理時紅色的值车份,初始值為0。
green——指明顏色緩沖區(qū)被清理時綠色的值牡彻,初始值為0扫沼。
blue——指明顏色緩沖區(qū)被清理時藍色的值出爹,初始值為0。
alpha——指明顏色緩沖區(qū)被清理時alpha的值缎除,初始值為0严就。
glClearColorx
publicvoid glClearColorx(int red,int green,int blue,int alpha)
功能:glClearColor的修正方法。
glClearDepthf
publicvoid glClearDepthf(float depth)
功能:指明深度緩沖區(qū)的清理值器罐。
詳細:glClearDepth方法指明深度值梢为,并通過glClear來清理深度緩沖區(qū)。glClearDepth指明的值屬于區(qū)間[0, 1]轰坊。
參數(shù):
depth——指明深度緩沖區(qū)被清理時的深度值铸董,初始值為1。
glClearDepthx
publicvoid glClearDepthx(int depth)
功能:glClearDepth的修正方法肴沫。
glClearStencil
publicvoid glClearStencil(int s)
功能:指明模板緩沖區(qū)的清理值粟害。
詳細:glClearStencil指明glClear清理模板緩沖區(qū)時的索引,s為2m-1颤芬,其中m是模板緩沖區(qū)中的bit數(shù)悲幅。
相關(guān)獲取:
glGetIntegerv方法驻襟,并以GL_STENCIL_BITS為參數(shù)夺艰。
參數(shù):
s——指明glClear清理模板緩沖區(qū)時的索引芋哭,初始值為0沉衣。
glClientActiveTexture
publicvoid glClientActiveTexture(int texture)
功能:選擇客戶端活動紋理單元。
glClientActiveTexture選擇頂點矩陣减牺,客戶狀態(tài)參數(shù)由glTexCoordPointer方法修改豌习。可用性由glEnableClientState與glDisableClientState決定拔疚,參數(shù)為GL_TEXTURE_COORD_ARRAY肥隆。
注意:
總有GL_TEXTUREi = GL_TEXTURE0 + i。
錯誤:
如果texture不是一個GL_TEXTUREi稚失,這里0 <= i< GL_MAX_TEXTURE_UNITS栋艳,則產(chǎn)生一個GL_INVALID_ENUM(錯誤矩陣)。
相關(guān)獲染涓鳌:
glGetIntegerv方法吸占,并以GL_MAX_TEXTURE_UNITS為參數(shù)。
參數(shù):
texture——指定哪一個紋理單元為活動凿宾。紋理個數(shù)至少一個(對于1.0)或兩個(對于1.1)紋理必須是一個GL_TEXTUREi矾屯,其中0 <= i < GL_MAX_TEXTURE_UNITS,初始值為GL_TEXTURE0初厚。
glColor4f
publicvoid glColor4f(float red,float green,float blue,float alpha)
功能:設(shè)置當前顏色件蚕。
詳細:GL儲存當前四值的RGBA顏色,glColor可以設(shè)置新的四值的RGBA顏色。
當前顏色值被儲存為整型或浮點型排作,如果值被儲存為浮點型牵啦,尾數(shù)和指數(shù)的大小未指明。
在當前顏色更新之前整型與浮點型都不屬于區(qū)間[0, 1]妄痪,然而顏色元素在修改或?qū)懭腩伾彌_區(qū)前會屬于該區(qū)間蕾久。
參數(shù):
red——為當前顏色指明一個新的紅色值,初始值為1拌夏。
green——為當前顏色指明一個新的綠色值僧著,初始值為1。
blue——為當前顏色指明一個新的藍色值障簿,初始值為1盹愚。
alpha——為當前顏色指明一個新的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)
功能:開啟與禁止顏色元素的寫入操作。
詳細:glColorMask指明單獨的顏色元素是否可以被寫入西篓。舉一個例子愈腾,如果red為false,則顏色緩沖區(qū)中的任何像素的顏色的紅色元素將不會發(fā)生變化岂津,忽略企圖的繪畫操作虱黄,包括glClear。
不可以控制元素單個位的改變吮成,只能控制整個元素是否可以改變橱乱。
參數(shù):
red——指明紅色元素是否可以寫入顏色緩沖區(qū),初始值為ture粱甫,表明可以寫入泳叠。
green——指明綠色元素是否可以寫入顏色緩沖區(qū),初始值為ture茶宵,表明可以寫入危纫。
blue——指明藍色元素是否可以寫入顏色緩沖區(qū),初始值為ture乌庶,表明可以寫入种蝶。
alpha——指明alpha元素是否可以寫入顏色緩沖區(qū),初始值為ture安拟,表明可以寫入蛤吓。
glColorPointer
publicvoid glColorPointer(int size,int type,int stride,Buffer pointer)
功能:
定義一個顏色矩陣。
詳細:
glColorPointer指明渲染時使用的顏色矩陣糠赦。size指明每個顏色的元素數(shù)量会傲,必須為4锅棕。type指明每個顏色元素的數(shù)據(jù)類型,stride指明從一個顏色到下一個允許的頂點的字節(jié)增幅淌山,并且屬性值被擠入簡單矩陣或存儲在單獨的矩陣中(簡單矩陣存儲可能在一些版本中更有效率)裸燎。
當一個顏色矩陣被指定,size, type, stride和pointer將被保存在客戶端狀態(tài)泼疑。
如果顏色矩陣被啟用德绿,當使用glDrawArrays方法或glDrawElements方法時被調(diào)用。利用glEnableClientState方法與glDisableClientState方法以GL_COLOR_ARRAY為參數(shù)來啟用和禁止顏色矩陣退渗,顏色矩陣初始值為禁用移稳,不允許glDrawArrays方法和glDrawElements方法調(diào)用。
使用glDrawArrays方法依據(jù)事先指明的頂點和頂點矩陣構(gòu)建一系列圖元(都是同種類型的)会油,使用glDrawElements方法依據(jù)頂點索引和頂點屬性構(gòu)建一系列圖元个粱。
注意:
glColorPointer在客戶端應(yīng)用。
錯誤:
size不是4時將產(chǎn)生GL_INVALID_VALUE翻翩。
type不是一個允許的值時將產(chǎn)生GL_INVALID_ENUM都许。
stride為負數(shù)時將產(chǎn)生GL_INVALID_VALUE。
pointer參數(shù)必須是直接緩存并且類型與type指定的類型相同嫂冻。
參數(shù):
size——指明每個顏色的元素數(shù)量胶征,必須為4。
type——指明每個矩陣中顏色元素的數(shù)據(jù)類型桨仿,允許的符號常量有GL_UNSIGNED_BYTE, GL_FIXED和GL_FLOAT睛低,初始值為GL_FLOAT。
stride——指明連續(xù)的點之間的位偏移蹬敲,如果stride為0時暇昂,顏色被緊密擠入矩陣莺戒,初始值為0伴嗡。
pointer——指明包含顏色的緩沖區(qū),如果pointer為null从铲,則為設(shè)置緩沖區(qū)瘪校。
拋出:
java.lang.IllegalStateException——如果是OpenGL ES 1.1并且VBOs(VertexBuffer Object即頂點緩沖對象)啟用。
java.lang.IllegalArgumentException——如果pointer不是直接緩存名段。
網(wǎng)絡(luò)解釋:
頂點數(shù)組的概念如此的簡單阱扬,如其名,就是將原來由一系列的glVertex*指定的頂點放在一個數(shù)組中伸辟,(其意思就是頂點數(shù)據(jù)組成的數(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)
功能:
指明一個二維的壓縮的紋理圖像匈辱。
詳細:
glCompressedTexImage2D定義一個壓縮格式的二維紋理圖像。
調(diào)色板紋理是被支持的壓縮格式杀迹,一個壓縮圖像的布局是一個調(diào)色板亡脸,調(diào)色板由用以查找調(diào)色板的多層級數(shù)的紋理引用決定。調(diào)色板的格式可以為R5_G6_B5, RGBA4, RGB5_A1, RGB8, 或者RGBA8树酪,紋理引用的分辨率可以為4位或8位浅碾。結(jié)果,調(diào)色板條目不是16就是256续语。如果level是0及穗,數(shù)據(jù)中僅有一個紋理引用的層級數(shù)會被描述。否則绵载,level為負值指明描述紋理直到哪一個層級數(shù)埂陆。可能會有剩余為最低分辨率填補的半個字節(jié)會被忽略娃豹。
注意:
glPixelStore對于壓縮紋理圖像無影響焚虱。
glCompressedTexImage2D指明當前綁定紋理的二維紋理以及當前紋理單元,分別通過glBindTexture方法和glActiveTexture方法懂版。
錯誤:
如果target不是GL_TEXTURE_2D鹃栽,將會產(chǎn)生GL_INVALID_ENUM(錯誤枚舉)。
如果level大于0或者絕對值大于log_2(max)躯畴,這里的max是GL_MAX_TEXTURE_SIZE的返回值民鼓。則產(chǎn)生GL_INVALID_VALUE。
(1.0) internalformat不是允許的符號常量蓬抄,將產(chǎn)生GL_INVALID_VALUE(錯誤值)丰嘉。
(1.1) internalformat不是允許的符號常量,將產(chǎn)生GL_INVALID_ENUM(錯誤枚舉)嚷缭。
如果width或者height小于0或大于2 + GL_MAX_TEXTURE_SIZE饮亏,或者其中一個不能表示為2^k + 2*border,k為整數(shù),將產(chǎn)生GL_INVALID_VALUE(錯誤值)。
如果border不是0則產(chǎn)生GL_INVALID_VALUE(錯誤值)脐雪。
如果圖像不符合格式、尺寸及壓縮圖像的內(nèi)容简肴,則產(chǎn)生GL_INVALID_VALUE(錯誤值)。
參數(shù):
target——指明目標紋理百侧,必須為GL_TEXTURE_2D砰识。
level——指明具體數(shù)值的等級數(shù)杂伟,必須小于等于0,0表明只有一種層級數(shù)仍翰,負數(shù)表明有多少被數(shù)據(jù)描述的層級數(shù)赫粥。
internalformat——指明紋理中的顏色元素,被允許的符號常量有: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ù),所有版本支持的紋理圖像至少時64像素寬灵迫。
height——指明紋理圖像的高度秦叛,必須是2^k + 2*border,k為整數(shù)瀑粥,所有版本支持的紋理圖像至少時64像素高挣跋。
border——指明邊界寬度,必須為0狞换。
imageSize——指明壓縮紋理圖像的大小避咆,單位為byte。
data——指明一個包含壓縮紋理圖像數(shù)據(jù)的緩沖區(qū)修噪。
拋出:
java.lang.IllegalArgumentException——如果data為空查库。
java.lang.IllegalArgumentException——如果data.remaining()小于imageSize。
網(wǎng)絡(luò)解釋:
功能: 使用壓縮過的紋理圖像定義一個二維紋理.
level: 提供多種分辨率的紋理. 如紋理只有一種分辨率,level則設(shè)置為0.
internalformat: 紋理圖像的壓縮格式, 必須是當前OpenGL實現(xiàn)支持的壓縮格式, 否則導(dǎo)致GL_INVALID_ENUM錯誤.
width, height, depth: 指定二維紋理圖像的大小. 參數(shù)值的必須為 2的m次方 + 2b.
border: b的值, 必須是0
mipmap: 多個明細等級(即上面的層級數(shù))
mipmap: 一系列預(yù)先通過濾波生成的, 分辨率遞減的紋理圖.
功能: 使用mipmap技術(shù)時, OpenGL根據(jù)物體的大小(以像素為單位)自動確定應(yīng)使用哪個紋理圖像.
方法: 必須提供從最大尺寸到1 x 1的, 大小為2的冪的各種紋理圖.例如最大分辨率為64 X 16, 就必須提供32X8, 16X4, 8X2, 4X1, 2X1, 1X1的紋理
原理: 小的紋理圖通常是通過對最大的紋理圖進行濾波處理得到的,每個紋素的值是前一個紋理圖中4個相應(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)
功能:
指明二維壓縮紋理子圖黄琼。
詳細:
glCompressedTexSubImage2D在已存在的二維壓縮圖像的子區(qū)域重新定義紋理子圖樊销。子圖將替換已存在紋理圖像的子區(qū)域。范圍是x方向從xoffset到xoffset+ width – 1脏款,y方向從yoffset到y(tǒng)offset + height – 1围苫。寬、高都為0不是錯誤撤师,但沒有意義剂府。
現(xiàn)在沒有支持該方法的壓縮格式。
注意:
glPixelStore對于壓縮紋理圖像無效果丈氓。
glCompressedTexImage2D指明當前綁定紋理的二維紋理以及當前紋理單元周循,分別通過glBindTexture方法和glActiveTexture方法。
錯誤:
如果target不是GL_TEXTURE_2D万俗,將會產(chǎn)生GL_INVALID_ENUM(錯誤枚舉)。
如果紋理矩陣沒有被之前的glCompressedTexImage2D操作定義則產(chǎn)生GL_INVALID_OPERATION饮怯。
如果level小于0或者絕對值大于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——指明目標紋理泵肄,必須是GL_TEXTURE_2D捆交。
level——指明層級數(shù)。
xoffset——指明在紋理矩陣中在X方向上的偏移量腐巢。
yoffset——指明在紋理矩陣中在Y方向上的偏移量零渐。
width——指明紋理子圖的寬。
height——指明紋理子圖的高系忙。
format——指明像素數(shù)據(jù)的格式诵盼,現(xiàn)在沒有支持的格式。
imageSize——指明壓縮圖像的大小银还,以byte為單位风宁。
data——指明包含壓縮紋理圖像的緩沖區(qū)。
拋出:
java.lang.IllegalArgumentException——如果data為空蛹疯。
java.lang.IllegalArgumentException——如果data.remaining()小于imageSize戒财。
網(wǎng)絡(luò)解釋:
功能: 用一個二維紋理圖像替換當前二維紋理圖像中的一個(矩形)區(qū)域.
target:取值與函數(shù)glCopyTexImage2D()中相同.
level, format, type: level是mipmap明細等級. format和type描述了紋理圖像數(shù)據(jù)的格式和數(shù)據(jù)類型.
子圖像受函數(shù)glPixelStore()和glPixelTransfer()設(shè)置的模式以及其他像素轉(zhuǎn)移操作的影響.
xoffset, yoffset: 要替換的子區(qū)域左下角相對于當前紋理左下角的位置.
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)
功能:
指明一個像素從顏色緩沖區(qū)獲得的二維紋理圖像。
詳細:
glCopyTexImage2D定義一個像素從顏色緩沖區(qū)獲得的二維紋理圖像捺弦。
獲取紋理數(shù)據(jù)的矩形饮寞,x、y代表矩形的左下角列吼,寬為width + 2border幽崩,高為height of height +2border,分辨率為level指明的分辨率寞钥,internalformat指明紋理的顏色元素慌申。
每一個被讀取的像素的紅、綠理郑、藍蹄溉、alpha元素被轉(zhuǎn)換為未指明精度的內(nèi)部整型或浮點型格式咨油。轉(zhuǎn)換機構(gòu)將元素最大值映射為1.0,元素值為0時映射為0.0柒爵。然后值再被轉(zhuǎn)換為紋理內(nèi)部格式并儲存在像素矩陣中役电。
必須事先確定內(nèi)部格式以使顏色緩沖區(qū)元素在轉(zhuǎn)換時進行處理。但新的顏色元素不能添加棉胀。舉一個例子法瑟,一個RGB顏色緩沖區(qū)可以被用來創(chuàng)建一個LUMINANCE或RGB紋理,不能是ALPHA膏蚓、LUMINANCE_ALPHA或者RGBA紋理瓢谢。
像素排列時,下面的x驮瞧、y坐標與紋理的下面的s氓扛、t坐標相對應(yīng)。
如果指明的顏色緩沖區(qū)矩形位于當前渲染的窗口的外面论笔,則那些獲取的值是未定義的采郎。
注意:
一個寬、高均為0的圖像表示無紋理狂魔。
錯誤:
如果target不是GL_TEXTURE_2D蒜埋,將會產(chǎn)生GL_INVALID_ENUM(錯誤枚舉)。
如果internalformat不與顏色緩沖區(qū)格式相匹配最楷,將會產(chǎn)生GL_INVALID_OPERATION整份。
如果level小于0或者絕對值大于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不是允許的符號常量竿开,將產(chǎn)生GL_INVALID_VALUE(錯誤值)。
(1.1) internalformat不是允許的符號常量玻熙,將產(chǎn)生GL_INVALID_ENUM(錯誤枚舉)否彩。
相關(guān)獲取:
glGetIntegerv方法揭芍,參數(shù)為GL_MAX_TEXTURE_SIZE胳搞。
參數(shù):
target——指明目標紋理,必須為GL_TEXTURE_2D称杨。
level——指明詳細層數(shù)肌毅,level 0是基本圖像level,level n是第n層級數(shù)壓縮圖像姑原。
internalformat——指明圖像的顏色元素悬而,允許的符號常量有GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB以及GL_RGBA。
x——復(fù)制矩形的左下角x坐標锭汛。
y——復(fù)制矩形的左下角y坐標笨奠。
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: 屏幕坐標的左下點
width, height: 矩形的寬和高.
glCopyTexSubImage2D
publicvoid glCopyTexSubImage2D(int target,
int level,
int xoffset,
int yoffset,
int x,
int y,
int width,
int height)
功能:指明一個像素從顏色緩沖區(qū)獲得的二維紋理圖像子圖啤咽。
詳細:glCopyTexSubImage2D
glCullFace
public void glCullFace(int mode)
功能:
指明多邊形的前面或后面是否被揀選。
詳細:
glCullFace指明多邊形的前面或后面是否被揀選(當mode被指明時)當揀選功能開啟渠脉。開啟或禁止揀選功能宇整,調(diào)用glEnable方法和glDisable方法并以GL_CULL_FACE為參數(shù)。揀選功能初始值為禁止芋膘。
glFrontFace指明順時針和逆時針繪出多邊形鳞青,哪一個是前面,哪一個是背面为朋。
注意:
如果mode是GL_FRONT_AND_BACK臂拓,多邊形不會被繪出,但是其他圖元像點潜腻、線會被繪出埃儿。
錯誤:
如果mode不是被允許的值,將會產(chǎn)生GL_INVALID_ENUM融涣。
參數(shù):
mode——指明多邊形的前面或后面是否被揀選童番。允許的符號常量有:GL_FRONT,GL_BACK和GL_FRONT_AND_BACK。初始值為GL_BACK威鹿。
glDrawElements
publicvoid glDrawElements(int mode,int count,int type,Buffer indices)
功能:
由矩陣數(shù)據(jù)渲染圖元剃斧。
詳細:
glDrawElements用少量調(diào)用指明多重幾何圖元,你可以事先指明獨立的頂點忽你、法線幼东、顏色和紋理坐標矩陣并且可以通過調(diào)用glDrawElements方法來使用它們創(chuàng)建序列圖元。
當glDrawElements被調(diào)用,它會使用有序索引來查詢可用矩陣中的元素根蟹,并以此創(chuàng)建序列幾何圖元脓杉,如果GL_VERTEX_ARRAY被禁用,則不會創(chuàng)建简逮。
頂點屬性由glDrawElements修改球散,glDrawElements在返回后會有一個未指明的值。舉一個例子散庶,如果GL_COLOR_ARRAY啟用蕉堰,當執(zhí)行g(shù)lDrawElements方法后,當前顏色的值是未定義的悲龟,屬性不會維持它之前的值屋讶。
錯誤:
如果mode的值不被允許,將產(chǎn)生GL_INVALID_ENUM须教。
如果type的值不被允許皿渗,將產(chǎn)生GL_INVALID_ENUM。
如果count是負數(shù)没卸,將產(chǎn)生GL_INVALID_VALUE羹奉。
參數(shù):
mode——指明被渲染的是哪種圖元,被允許的符號常量有GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN和GL_TRIANGLES
count——指明被渲染的元素個數(shù)约计。
type——指明索引指的類型诀拭,不是GL_UNSIGNED_BYTE就是GL_UNSIGNED_SHORT。
indices——指明存儲索引的位置指針煤蚌。
拋出:
java.lang.IllegalStateException——如果最近一次調(diào)用glBindBuffer方法以GL_ELEMENT_ARRAY_BUFFER為目標時耕挨,有一個非0緩沖區(qū)參數(shù)。
java.lang.IllegalArgumentException——如果索引為空尉桩。
java.lang.ArrayIndexOutOfBoundsException——如果索引序列中從0到count-1中任意索引超出現(xiàn)有索引或數(shù)據(jù)矩陣范圍筒占。
glEnable
public void glEnable(int cap)
功能:
啟用服務(wù)器端GL功能。
詳細:
glEnable方法和glDisable方法可以啟用和禁止各種功能蜘犁,各種功能(除了GL_DITHER和GL_MULTISAMPLE)的初始值為GL_FALSE翰苫。
glEnable方法和glDisable方法都只有一個參數(shù),它可以采用下列值中的一個:GL_ALPHA_TEST——如果啟用这橙,將進行alpha測試奏窑,詳見glAlphaFunc。
GL_BLEND——如果啟用屈扎,將引入的值與顏色緩沖區(qū)中的值混合埃唯,詳見glBlendFunc。
GL_COLOR_LOGIC_OP——如果啟用鹰晨,允許(apply)引入的顏色與顏色緩沖區(qū)中的值進行邏輯運算墨叛。詳見glLogicOp止毕。
GL_COLOR_MATERIAL——如果啟用,得到當前顏色的周圍散開的痕跡漠趁。
GL_CULL_FACE——如果啟用扁凛,基于窗口坐標采集多邊形。詳見glCullFace棚潦。
GL_DEPTH_TEST——如果啟用令漂,做深度比較和更新深度緩存膝昆。值得注意的是即使深度緩沖區(qū)存在并且深度mask不是0丸边,如果深度測試禁用的話,深度緩沖區(qū)也無法更新荚孵。詳見glDepthFunc, glDepthMask和glDepthRange妹窖。
GL_DITHER——如果啟用顏色元素或索引將在被寫入顏色緩沖區(qū)之前進行dither。
GL_FOG——如果啟用收叶,將霧的顏色效果與顯示紋理顏色混合骄呼。詳見glFog。
GL_LIGHTi——如果啟用判没,包含光線i在光線方程的評價中蜓萄,詳見glLightModel和glLight。
GL_LIGHTING——如果啟用澄峰,用當前光線參數(shù)計算頂點顏色嫉沽。否則僅僅簡單將當前顏色與每個頂點關(guān)聯(lián)。詳見glMaterial, glLightModel和glLight俏竞。
GL_LINE_SMOOTH——如果啟用绸硕,畫線時使用調(diào)整過濾。否則魂毁,畫aliased線玻佩,詳見glLineWidth。
GL_MULTISAMPLE——如果啟用席楚,為單程反鋸齒和其他效果顯示多樣本片段咬崔,詳見glSampleCoverage
GL_NORMALIZE——如果啟用,法向量被計算為單位向量烦秩,詳見glNormal和glNormalPointer垮斯。
GL_POINT_SMOOTH——如果啟用,使用調(diào)整過濾器描繪點闻镶,否則甚脉,畫aliased點,詳見glPointSize铆农。
GL_POLYGON_OFFSET_FILL——如果啟用牺氨,在深度比較進行前多邊形片段的深度值會進行移位狡耻。
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)——如果啟用,將會產(chǎn)生一個范圍值书劝,它的每個bit都是由相應(yīng)的樣本位置的alpha值決定的进倍。
GL_SAMPLE_ALPHA_TO_ONE——如果啟用,在計算完多樣本范圍修正碼后將片段alpha值設(shè)為被允許的最大值购对。詳見glSampleCoverage猾昆。
GL_SAMPLE_MASK(僅1.0)——如果啟用,在進行多樣本時骡苞,申請一個碼來修改片段范圍垂蜗。
GL_SAMPLE_COVERAGE(僅1.1)——如果啟用,片段范圍會與另一個臨時的范圍值進行與運算解幽。這個臨時的范圍值與上文中GL_SAMPLE_ALPHA_TO_COVERAGE描述的范圍值的確定方式相同贴见。但是作為GL_SAMPLE_COVERAGE_VALUE的值的功能,如果GL_SAMPLE_COVERAGE_VALUE為GL_TRUE躲株,在它與片段范圍值進行與運算前片部,這個臨時的范圍值是倒置的(所以bit的值都是倒置的),詳見glSampleCoverage徘溢。
GL_SCISSOR_TEST——如果啟用吞琐,丟棄裁剪矩形外的片段。詳見glScissor然爆。
GL_STENCIL_TEST——如果啟用站粟,做模板測試并更新模板緩沖區(qū),詳見glStencilFunc曾雕,glStencilMask和glStencilOp奴烙。
GL_TEXTURE_2D——如果啟用,當前活動紋理單元為二維紋理剖张。詳見glActiveTexture,glTexImage2D,glCompressedTexImage2D和glCopyTexImage2D
GL_CLIP_PLANEi——如果啟用切诀,裁剪面i可用。詳見glClipPlane搔弄。
GL_POINT_SPRITE_OES(1.1+ OES_point_sprite 擴展)——如果啟用幅虑,點塊紋理可用,詳見glPointSize和glTexEnv顾犹。
錯誤:
如果參數(shù)不是前面列表中的值倒庵,將會產(chǎn)生一個GL_INVALID_ENUM褒墨。
參數(shù):
cap——指定一個在GL空間中聲明的符號常量。
glEnableClientState
publicvoid glEnableClientState(int array)
功能:
啟用客戶端的某項功能擎宝。
詳細:
glEnableClientState和glDisableClientState啟用或禁用客戶端的單個功能郁妈。默認的,所有客戶端功能禁用绍申。
array可以是下列符號常量:
GL_COLOR_ARRAY——如果啟用噩咪,顏色矩陣可以用來寫入以及調(diào)用glDrawArrays方法或者glDrawElements方法時進行渲染。詳見glColorPointer极阅。
GL_NORMAL_ARRAY——如果啟用胃碾,法線矩陣可以用來寫入以及調(diào)用glDrawArrays方法或者glDrawElements方法時進行渲染。詳見glNormalPointer涂屁。
GL_TEXTURE_COORD_ARRAY——如果啟用书在,紋理坐標矩陣可以用來寫入以及調(diào)用glDrawArrays方法或者glDrawElements方法時進行渲染。詳見glTexCoordPointer拆又。
GL_VERTEX_ARRAY——如果啟用,頂點矩陣可以用來寫入以及調(diào)用glDrawArrays方法或者glDrawElements方法時進行渲染栏账。詳見glVertexPointer帖族。
GL_POINT_SIZE_ARRAY_OES(OES_point_size_arrayextension)——如果啟用,點大小矩陣控制大小以渲染點和點sprites挡爵。這時由glPointSize定義的點大小將被忽略竖般,由點大小矩陣提供的大小將被用來渲染點和點sprites。詳見glPointSize茶鹃。
注意:
啟用和禁用GL_TEXTURE_COORD_ARRAY將會影響活動的客戶紋理單元涣雕,活動的客戶紋理單元由glClientActiveTexture控制。
錯誤:
如果array不是被允許的值闭翩,將產(chǎn)生GL_INVALID_ENUM挣郭。
參數(shù):
array——指明啟用的功能,允許的符號常量有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)
功能:
定義多邊形的正面和背面兑障。
詳細:
在一個完全由不透明的密閉surface組成的場景中,多邊形的背面永遠不會被看到蕉汪。剔除這些不能顯示出來的面可以加速渲染器渲染圖像的時間流译。開啟和禁用剔除功能,調(diào)用glEnable和glDisable方法并以GL_CULL_FACE為參數(shù)者疤。剔除功能初始值為禁止福澡。
如果一個虛擬的對象從第一個頂點,到第二個頂點驹马,等等革砸,直到最后一個頂點眯搭,這個多邊形頂點移動的方向是按順時針移動的,則這個多邊形窗口坐標上的投影被認為是按順時針繪出的业岁。如果一個虛擬的對象從第一個頂點鳞仙,到第二個頂點,等等笔时,直到最后一個頂點棍好,這個多邊形頂點移動的方向是按逆時針移動的,則這個多邊形窗口坐標上的投影被認為是按逆時針繪出的允耿。glFrontFace指明多邊形在窗口坐標中是順時的還是逆時針被作為正面借笙。傳遞GL_CCW給mode則選擇逆時針多邊形為正面,GL_CW則選擇順時針多邊形為正面较锡。默認逆時針多邊形為正面业稼。
錯誤:
如果mode不是被允許的值,將產(chǎn)生GL_INVALID_ENUM蚂蕴。
參數(shù):
mode——多邊形正面的方向低散。GL_CW和GL_CCW被允許,初始值為GL_CCW骡楼。
glHint
public void glHint(int target,int mode)
功能:
控制GL某些行為熔号。
詳細:
當擁有解釋的空間時,GL某些方面的行為可以由hints控制鸟整。一個hints由兩個參數(shù)指明引镊。target是一個由常量符號描述的用以被控制的行為。mode是另一個由符號常量描述的想要執(zhí)行的行為篮条。target的初始值是GL_DONT_CARE弟头。mode允許的符號常量有:
GL_FASTEST——選擇最有效率的選項。
GL_NICEST——選擇最正確或質(zhì)量最好的選項涉茧。
GL_DONT_CARE——無任何傾向赴恨。
盡管hints控制實現(xiàn)的方面可以很好的定義,但hints的解釋仍依賴于具體的實現(xiàn)降瞳。hints控制的方面由target指明嘱支,允許的符號常量有:
GL_FOG_HINT——表明霧效果計算的精確度,如果每個像素的霧效果計算不能被GL效率支持的話挣饥,那么GL_DONT_CARE或GL_FASTEST可以用于每個每個頂點的霧效果計算除师。
GL_LINE_SMOOTH_HINT——表明直線抗鋸齒的效果。如果應(yīng)用一個大的過濾函數(shù)扔枫, GL_NICEST可以應(yīng)用于更多的在光柵化時產(chǎn)生的像素上汛聚。
GL_PERSPECTIVE_CORRECTION_HINT——表明顏色和紋理坐標插值的效果。如果遠點修正插入不能被GL有效支持的話短荐,那么GL_DONT_CARE或者GL_FASTEST可以應(yīng)用于顏色的線性插值或是紋理坐標倚舀。
GL_POINT_SMOOTH_HINT——表明反走樣點的效果叹哭。如果應(yīng)用一個大的過濾函數(shù),GL_NICEST可以應(yīng)用于更多的在光柵化時產(chǎn)生的像素上痕貌。
GL_GENERATE_MIPMAP_HINT(僅1.1)——表明自動生成的mipmap的質(zhì)量和性能风罩。
注意:
hints的解釋基于具體的實現(xiàn)。一些實現(xiàn)會忽略glHint設(shè)置舵稠。
錯誤:
target——指明一個符號常量來表明被控制的行為超升。有GL_FOG_HINT ,GL_LINE_SMOOTH_HINT,GL_PERSPECTIVE_CORRECTION_HINT,和GL_POINT_SMOOTH_HINT,在1.1還有GL_GENERATE_MIPMAP_HINT哺徊。
mode——指明一個符號常量來表明想要執(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----反走樣操作中, 直線,點或多邊形的采樣質(zhì)量.
GL_FOG_HINT----對每個像素(GL_NICEST)還是每個頂點(GL_FASTEST)執(zhí)行霧效計算.
GL_PERSPECTIV_CORRECTION_HINT----顏色和紋理坐標插值的質(zhì)量
GL_GENERATE_MIPMAP_HINT----自動生成的mipmap的質(zhì)量和性能
GL_TEXTURE_COMPRESSION_HINT----紋理圖案的壓縮質(zhì)量和性能.
glLineWidth
public void glLineWidth(float width)
功能:
指明光柵化線段的寬度落追。
詳細:
glLineWidth指明可走樣或反走樣線的寬度盈滴。使用不是1的線寬會不會有不同的效果,取決與是否開啟反走樣功能轿钠。開啟和關(guān)閉反走樣功能需調(diào)用glEnable和 glDisable并以GL_LINE_SMOOTH為參數(shù)巢钓。反走樣功能初始值為關(guān)閉。
如果線的反走樣功能被關(guān)閉谣膳,實際的寬度由設(shè)定寬度的最近整數(shù)值決定竿报。(如果這個整數(shù)是0,則按照1來處理)如果|deltax| >= |delta y|继谚,每個被光柵化的列的i個像素會被填充,i是指寬度的整數(shù)話的值阵幸。否則花履,沒行的的i個像素點會被填充。
如果反走樣功能啟用的話挚赊,線光柵化時會為每個像素區(qū)產(chǎn)生一個片段诡壁,這些像素區(qū)以矩形形式貫穿這個區(qū)域,矩形的寬度等于當前的線寬荠割,長度等于線的真實長度妹卿,并以該線段為中心。每個片段的覆蓋值是矩形區(qū)域相應(yīng)的像素區(qū)域的坐標區(qū)域蔑鹦。這個值被保存起來夺克,在光柵化時使用。
當反走樣功能開啟時嚎朽,不是所有的寬度都被支持铺纽。如果設(shè)置了一個不不被支持的值,將會使用離這個值最近的被支持的值哟忍。只有1可以保證是被支持的值狡门,其他值要依據(jù)相應(yīng)的應(yīng)用平臺來確定陷寝。同樣的,對于走樣的線寬度也有一個范圍其馏。想詢問被支持的線寬范圍以及這個范圍內(nèi)被支持線寬的大小不同處凤跑,需要調(diào)用glGetIntegerv方法并以GL_ALIASED_LINE_WIDTH_RANGE,GL_SMOOTH_LINE_WIDTH_RANGE,GL_SMOOTH_LINE_WIDTH_GRANULARITY為參數(shù)。
注意:
沒有反走樣的線線寬可能會在由應(yīng)用平臺決定的最大值以內(nèi)叛复,可以使用glGetIntegerv方法并以GL_ALIASED_LINE_WIDTH_RANGE為參數(shù)來這個最大線寬仔引。
錯誤:
如果線寬小于等于0,將會產(chǎn)生GL_INVALID_VALUE致扯。
參數(shù):
width——指定光柵化時的線寬度肤寝,初始值為1。
glLoadIdentity
public void glLoadIdentity()
功能:
用特征矩陣代替當前矩陣抖僵。
詳細:
glLoadIdentity使特征矩陣代替當前矩陣鲤看。語義上等價于調(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)
功能:
指明哪個矩陣是當前矩陣义桂。
詳細:
glMatrixMode設(shè)置當前矩陣模式,mode允許的值有:
GL_MODELVIEW——應(yīng)用視圖矩陣堆的后續(xù)矩陣操作蹈垢。
GL_PROJECTION——應(yīng)用投射矩陣堆的后續(xù)矩陣操作慷吊。
GL_TEXTURE——應(yīng)用紋理矩陣堆的后續(xù)矩陣操作。
GL_MATRIX_PALETTE_OES(OES_matrix_palette擴展)——啟用矩陣調(diào)色板堆棧擴展曹抬,并應(yīng)用矩陣調(diào)色板堆棧后續(xù)矩陣操作溉瓶。
錯誤:
如果mode不是一個允許的值,將產(chǎn)生一個GL_INVALID_ENUM谤民。
參數(shù):
mode——指明哪一個堆允許后續(xù)的矩陣操作堰酿。允許的值有L_MODELVIEW,GL_PROJECTION和GL_TEXTURE,在有OES_matrix_palette擴展時张足,GL_MATRIX_PALETTE_OES也被允許触创,初始值是GL_MODELVIEW。
glRotatef
publicvoid glRotatef(float angle,float x,float y,float z)
功能:
用旋轉(zhuǎn)矩陣乘以當前矩陣为牍。
詳細:
glRotate將圍繞向量(x, y, z)產(chǎn)生一定角度的旋轉(zhuǎn)哼绑。由旋轉(zhuǎn)矩陣乘以當前矩陣(詳見glMatrixMode),并由其乘積代替當前矩陣碉咆。好像調(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方法后所有被繪對象將旋轉(zhuǎn)一個角度帽蝶。使用glPushMatrix方法和glPopMatrix方法儲存未旋轉(zhuǎn)坐標系統(tǒng)。
注意:
旋轉(zhuǎn)方式服從右手原則,所以如果一個向量(x, y, z)指向用戶方向励稳,將按逆時針方向旋轉(zhuǎn)佃乘。
參數(shù):
angle——指明旋轉(zhuǎn)的角度,單位為度驹尼。
x——指明旋轉(zhuǎn)向量的x坐標趣避。
y——指明旋轉(zhuǎn)向量的y坐標。
z——指明旋轉(zhuǎn)向量的z坐標新翎。
glRotatex
publicvoid glRotatex(int angle,int x,int y,int z)
功能:
glRotatef的修正方法伞芹。
glScalef
publicvoid glScalef(float x,float y,float z)
功能:
用縮放矩陣乘以當前矩陣笋敞。
詳細:
glScale沿著x、y、z坐標軸產(chǎn)生并不統(tǒng)一的縮放纸镊。三個參數(shù)表明沿著每個坐標軸想要的縮放因子构拳。
用縮放矩陣乘以當前矩陣(詳見glMatrixMode)抗俄,其乘積將代替當前矩陣裹刮,就好像調(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方法后所以被繪的對象將產(chǎn)生一個縮放惜论。
使用glPushMatrix方法和glPopMatrix方法儲存未縮放坐標系統(tǒng)。
注意:
如果不僅僅一個縮放矩陣應(yīng)用于模式視圖矩陣止喷,并且啟用光線效果馆类,光線常常出現(xiàn)錯誤。這種情況下弹谁,調(diào)用glEnable方法并以GL_NORMALIZE為參數(shù)乾巧,啟用法線自動格式化功能。
參數(shù):
x——指明x坐標軸上的縮放因子预愤。
y——指明y坐標軸上的縮放因子卧抗。
z——指明z坐標軸上的縮放因子。
glScalex
publicvoid glScalex(int x,int y,int z)
功能:
glScalef方法的修正方法鳖粟。
glShadeModel
public void glShadeModel(int mode)
功能:
選擇恒定或光滑著色模式。
詳細:
GL圖元可以采用恒定或者光滑著色模式拙绊,默認值為光滑著色模式向图。當圖元進行光柵化的時候,將引起插入頂點顏色計算标沪,不同顏色將被均勻分布到各個像素片段榄攀。恒定著色模式則選擇計算一個頂點的顏色并在光柵化一個圖元時分布到所有產(chǎn)生的像素片段。不管任何情況下金句,如果光照功能開啟的話頂點顏色計算時會有光照效果或者當光照效果關(guān)閉的話被指定的頂點計算顏色為那時的當前顏色檩赢。恒定和光滑著色模式不能區(qū)分點。在頂點矩陣開始時開始违寞,并開始頂點計數(shù)贞瞒,而圖元是從1開始的偶房。GL使恒定著色模式的線段i計算第i+1頂點的顏色,即它的第二個頂點军浆。計算同樣從1開始棕洋,GL使恒定著色模式的多邊形計算第i+2頂點的顏色,即指明多邊形的最后一個頂點乒融。
恒定和光滑著色模式由glShadeModel使用GL_FLAT和GL_SMOOTH參數(shù)來設(shè)定掰盘。
錯誤:
如果參數(shù)是GL_FLAT或GL_SMOOTH以外的值,將產(chǎn)生GL_INVALID_ENUM赞季。
參數(shù):
mode——指明一個符號常量來代表要使用的著色技術(shù)愧捕。允許的值有GL_FLAT 和GL_SMOOTH,初始值為GL_SMOOTH申钩。
glTranslatef
publicvoid glTranslatef(float x,float y,float z)
功能:
用平移矩陣乘以當前矩陣次绘。
詳細:
glTranslate通過向量(x, y, z) 產(chǎn)生平移,以平移矩陣乘以當前矩陣(見glMatrixMode)典蜕,用乘積代替當前矩陣断盛,就好像調(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方法后所繪的對象都將發(fā)生平移愉舔。
使用glPushMatrix方法和glPopMatrix方法來保存沒有平移的坐標系統(tǒng)钢猛。
參數(shù):
x——指明平移向量的x坐標。
y——指明平移向量的y坐標轩缤。
z——指明平移向量的z坐標命迈。
glTranslatex
publicvoid glTranslatex(int x,int y,int z)
功能:
glTranslatef方法的修正方法。
glVertexPointer
publicvoid glVertexPointer(int size,int type,int stride,Buffer pointer)
功能:
定義一個頂點坐標矩陣火的。
詳細:
glVertexPointer指明當渲染時一個頂點坐標矩陣的存儲單元和數(shù)據(jù)壶愤。
當一個頂點矩陣被指明時,size, type, stride和pointer保存為客戶端狀態(tài)馏鹤。
如果頂點矩陣功能啟用征椒,當調(diào)用glDrawArrays方法或glDrawElements方法時會使用。想要啟用或禁止頂點矩陣湃累,使用glEnableClientState或glDisableClientState方法勃救,并以GL_VERTEX_ARRAY為參數(shù)。頂點矩陣初始為禁止治力,調(diào)用glDrawArrays方法或glDrawElements方法時無效蒙秒。
調(diào)用glDrawArrays方法根據(jù)事先指明的點和頂點屬性矩陣創(chuàng)建一系列圖元(都有相同的類型)。調(diào)用glDrawElements方法根據(jù)頂點索引和頂點屬性創(chuàng)建一系列圖元宵统。
注意:
glVertexPointer在一般版本中是在客戶端的晕讲。
錯誤:
如果size不是2, 3或者4,將產(chǎn)生GL_INVALID_VALUE。
如果type不是允許的值瓢省,將產(chǎn)生GL_INVALID_ENUM弄息。
如果stride是負值,將產(chǎn)生GL_INVALID_VALUE净捅。
pointer必須是直接緩存疑枯,并且類型與type指明的類型相同。
參數(shù):
size——每個頂點的坐標維數(shù)蛔六,必須是2, 3或者4荆永,初始值是4。
type——指明每個頂點坐標的數(shù)據(jù)類型国章,允許的符號常量有GL_BYTE, GL_SHORT, GL_FIXED和GL_FLOAT具钥,初始值為GL_FLOAT。
stride——指明連續(xù)頂點間的位偏移液兽,如果為0骂删,頂點被認為是緊密壓入矩陣,初始值為0四啰。
pointer——指明頂點坐標的緩沖區(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è)置一個視口
詳細:
glViewport指明x匙赞、y從標準設(shè)備坐標到窗口坐標的仿射變換佛掖,使(xnd, ynd)為標準設(shè)備坐標,然后窗口坐標(xw, yw)由下列公式計算:
xw= ( xnd + 1 ) width/2 + x
yw= ( ynd + 1 ) height/2 + y
視口寬涌庭、高的范圍區(qū)間視版本而定芥被,想查詢此區(qū)間可使用方法glGetIntegerv,并以GL_MAX_VIEWPORT_DIMS為參數(shù)坐榆。
錯誤:
如果寬拴魄、高為負數(shù),將產(chǎn)生GL_INVALID_VALUE
參數(shù):
x——指明視口矩形的左下角x坐標席镀,初始值為0羹铅。
y——指明視口矩形的左下角y坐標,初始值為0愉昆。
width——指明視口的寬,如果GL上下文首次附于一個surface則寬麻蹋、高為這個surface大小跛溉。
height——指明視口的高,如果GL上下文首次附于一個surface則寬、高為這個surface大小芳室。