android opengl------------------ gl10方法解析

javax.microedition.khronos.opengles

接口GL10

上級接口:GL

下級接口:GL11

公共接口GL10繼承於GL

GL10接口包含了JavaTM)程序語言爲OpenGL綁定的核心功能。OES_byte_coordinates,OES_single_precision,OES_fixed_point,OES_read_format,以及OES_compressed_paletted_texture等擴展功能也是這個接口的一部分。

一個以xxv爲後綴的方法是屬於OES_fixed_point擴展功能的,並且需要一個或更多的修正的點爲參數。這些修正的點可能是浮點點派生出來的值通過乘以65536後再取最接近整數得到。

爲了使用方便起見,這個接口記錄了OpenGL ES各版本包括1.1及其擴展版本的方法。當運行一個OpenGL ES 1.0的應用程序時,被標爲(僅1.1可以被忽略。

查看GL接口描述,瞭解如何獲取該接口實例。

方法的詳細描述:

glActiveTexture

public void glActiveTexture(int texture)

功能

選擇服務端活動的紋理單元

詳細glActiveTexture選擇哪一個紋理在後面的紋理狀態改變時有效,紋理單元的數量是依據該紋理單元所被支持的具體實現。在OpenGL ES 1.0中至少一個,在OpenGL ES 1.1中至少兩個。

注意

常常會這樣GL_TEXTUREi = GL_TEXTURE0 + i

一個紋理單元由紋理可用狀態、紋理矩陣堆、紋理環境以及當前渲染紋理組成。修改其中任一成分均會改變當前活動紋理單元。

點陣是客戶端GL資源,它通過glClientActiveTexture程序獲取。

錯誤

0<= i < GL_MAX_TEXTURE_UNITS 時,如果紋理不是一個GL_TEXTUREiGL_INVALID_ENUM(錯誤枚舉)會產生。

相關獲取

利用glGetIntegerv處理GL_MAX_TEXTURE_UNITS

參數

texture——指定哪一個紋理單元爲活動。必須是一個GL_TEXTUREi,其中0 <= i < GL_MAX_TEXTURE_UNITS,初始值爲GL_TEXTURE0


glAlphaFunc

public void glAlphaFunc(int func,float ref)

功能

指定Alpha測試功能。

詳細

Alpha測試依據結果捨棄片段,該結果由引入片段的alpha值與參照值常量進行比較得到。glAlphaFunc指定參照值與比較方法。只有當alpha測試有效時,比較纔有用。使alpha測試有效或無效可以利用glEnableglDisable方法,它們都是以GL_ALPHA_TEST爲參數的,alpha測試初始爲無效。

funcref指明像素被繪出的條件。引入的alpha值通過func指明的方法與ref指明的參照值進行比較。如果該值通過比較並且通過隨後的模型測試與深度緩衝區測試,則將引入的片段繪出。如果該值未通過比較,則該像素區的幀緩衝區不會發生任何變化。比較方法如下:

GL_NEVER:不會通過。

GL_LESS:如果引入的alpha值比參照值小則通過。

GL_EQUAL:如果引入的alpha值與參照值相等則通過。

GL_LEQUAL:如果引入的alpha值小於或等於參照值則通過。

GL_GREATER:如果引入的alpha值比參照值大則通過。

GL_NOTEQUAL:如果引入的alpha值與參照值不相等則通過。

GL_GEQUAL:如果引入的alpha值大於或等於參照值則通過。

GL_ALWAYS:總是通過。(初始設定)

對所有的像素寫入操作進行glAlphaFunc操作,包括那些從點、線、多邊形的掃描轉換得到的結果。glAlphaFuncglClear無影響。

錯誤

func不是被允許的值會產生GL_INVALID_ENUM(錯誤枚舉)。

參數

func——指明alpha比較方法,被允許的符合常量有GL_NEVER,GL_LESS,GL_EQUAL, GL_LEQUAL, GL_GREATER, GL_NOTEQUAL, GL_GEQUAL, GL_ALWAYS。初始值爲GL_ALWAYS

ref——指明與引入的alpha值比較的參照值,這個值的屬於區間[0, 1],初始值爲0


glAlphaFuncx

public void glAlphaFuncx(int func,int ref)

功能:glAlphaFunc的修正版本,僅僅參數類型由float ref變爲int ref


glBindTexture

public void glBindTexture(int target,int texture)

功能

將一個已命名的紋理與一個紋理目標綁定。

詳細glBindTexture可以讓你創建或使用一個已命名的紋理,調用glBindTexture方法並將target設置爲GL_TEXTURE_2D,將texture設置爲你想要綁定的新紋理的名稱。當一個紋理與目標綁定時,該目標之前的綁定關係將自動被釋放。

紋理的名稱是一個無符號的整數。在每個紋理目標中,0被保留用以代表默認紋理。紋理名稱與相應的紋理內容被保留在當前GL rendering上下文的共享的紋理對象空間中(參照eglCreateContext

你可以使用glGenTextures來設置一個新的紋理名稱。

當一個紋理被綁定時,對於其目標的GL操作將作用於該綁定的紋理之上。如果被綁定的紋理的目標的維度的紋理映射是活動的,則綁定的紋理被使用。實際上,紋理目標成爲當前被綁定紋理的別名,並且紋理名稱0指的是在初始化時被綁定的默認紋理。

通過glBindTexture綁定的紋理仍舊是活動的直到同一個目標被其他紋理綁定或者該綁定紋理通過glDeleteTextures刪除爲止。

一旦創建,一個已命名的紋理可能經常需要與維度匹配的目標多次綁定。這樣利用glBindTexture來將一個已命名的紋理與一個紋理目標綁定,比利用glTexImage2D進行紋理圖像的重載要快的多。

錯誤

當目標不是一個被允許的值時,會產生GL_INVALID_ENUM(錯誤枚舉)。

參數

target——指明紋理要綁定的目標,必須是GL_TEXTURE_2D

texture——指明紋理的名稱。


glBlendFunc

public void glBlendFunc(int sfactor,int dfactor)

功能

指明像素算法。

詳細

像素可以通過函數操作後被繪出,該函數的功能是將引入的值與顏色緩衝中已有的值混合。使用glEnable方法與glDisable方法以GL_BLEND爲參數,決定是否開啓混合功能,該功能初始爲關閉的。

當混合功能開啓時glBlendFunc定義混合功能的操作。sfactor指明十一中方法中的哪一種用來衡量源顏色要素,dfactor指明十種方法中的哪一種用來衡量目的顏色要素。十一種可能的方法將在下面進行介紹。每一種方法定義了四個衡量元素,分別是紅、綠、藍和alpha

在後面的內容中,源與目的顏色要素被指爲(Rs, Gs, Bs, As)(Rd, Gd, Bd, Ad),它們的值爲0(kR, kG, kB, kA)之間的整數,其中kc = 2mc – 1,並且(mR, mG, mB, mA)是紅、綠、藍和alpha位平面的數量。

源和目標比例係數由(sR, sG, sB, sA)(dR, dG, dB, dA)指定。比例係數用(fR, fG, fB, fA)表示,代表既不是源也不是目標因素,所有比例係數屬於區間[0, 1]

參數                   (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

爲了確定像素的混合值,系統利用下列等式。

Rd = min( kR, RssR + Rd dR )

Gd = min( kG, GssG + Gd dG )

Bd = min( kB, BssB + Bd dB )

Ad = min( kA, AssA + Ad dA )

儘管從表面上看混合算法並沒有指明上述等式的精度,因爲混合操作是採用不精確的整型顏色值。然而應當等於1的混合因素要被確保沒有修改它的被乘數,並且一個等於0的混合因素要降低它的被乘數至0。舉一個例子,當sfactorGL_SRC_ALPHAdfactor GL_ONE_MINUS_SRC_ALPHA並且As等於kA時,等式進行簡單替換。

Rd = Rs

Gd = Gs

Bd = Bs

Ad = As

對於所有像素元素的寫入操作進行glBlendFunc操作時,包括對於點、線、多邊形的掃描轉換,都不影響glClear方法。

舉例

爲了渲染物體從遠到近排列的效果,最好應用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)處理透明度。請注意這個透明度計算不要求存在顏色緩衝區中的alpha位面數。

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)對於渲染抗鋸齒的點和線也很有效。

注意

引入的(源)alpha被認爲是不透明的,範圍是1.0 (kA),表明完全不透明,而0表明完全透明。

錯誤

sfactordfactor爲不允許的值時,產生GL_INVALID_ENUM(錯誤枚舉)。

參數

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

網絡解釋

第一個參數指出源圖元的alpha的取值計算方法,第二個參數指出目標處的alpha的計算方法。

兩個參數的取值都可以是如下常量之一:

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表示取目標區域的顏色值,GL_SRC_ALPHA表示取源區域的alpha值等等。例如:

glBlendFunc(GL_SRC_ALPHA,GL_ONE);

表示把渲染的圖像疊加到目標區域,也就是說源的每一個像素的alpha都等於自己的alpha,目標的每一個像素的alpha等於1。這樣疊加次數越多,疊加的圖元的alpha越高,得到的結果就越亮。因此這種融合用於表達光亮效果。

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

表示把渲染的圖像融合到目標區域。也就是說源的每一個像素的alpha都等於自己的alpha,目標的每一個像素的alpha等於1減去該位置源像素的alpha。因此不論疊加多少次,亮度是不變的。


glClear

public void glClear(int mask)

功能

清理緩衝區,並設置爲預設值。

詳細

glClear設置窗口位面區的值,該值由glClearColor, glClearDepth glClearStencil等方法選擇出。

像素所有權測試、裁剪測試、抖動、顏色緩衝區掩飾將影響glClear操作,裁剪盒綁定清理區域。Alpha功能、混合功能、邏輯操作、建模、紋理映射以及深度緩衝區會被glClear操作忽略。

glClear可以使參數爲多個值按位與後的結果,以表明那個緩衝區需要清理。

有如下值:

GL_COLOR_BUFFER_BIT:表明顏色緩衝區。

GL_DEPTH_BUFFER_BIT:表明深度緩衝區。

GL_STENCIL_BUFFER_BIT:表明模型緩衝區。

注意

如果緩衝區並沒有呈現出來,則glClear對指向的緩衝區無效果。

錯誤

如果使用任一非已定義的值將產生GL_INVALID_VALUE(錯誤枚舉)。

參數

mask——允許的值有GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, and GL_STENCIL_BUFFER_BIT

網絡解釋

glClear()語句的作用是用當前緩衝區清除值,也就是glClearColor或者glClearDepth等函數所指定的值來清除指定的緩衝區。比如:

glClearColor0.00.00.00.0;

glClearGL_COLOR_BUFFER_BIT;

第一條語句表示清除顏色設爲黑色,第二條語句表示把整個窗口清除爲當 前的清除顏色,glClear()的唯一參數表示需要被清除的緩衝區。


glClearColor

public void glClearColor(float red,float green,float blue,float alpha)

功能:指定顏色緩衝區的清理值

詳細glClearColor指明紅、綠、藍、alpha的值並通過glClear來清理顏色緩衝區,被glClearColor指明的值屬於區間[0, 1]

參數

red——指明顏色緩衝區被清理時紅色的值,初始值爲0

green——指明顏色緩衝區被清理時綠色的值,初始值爲0

blue——指明顏色緩衝區被清理時藍色的值,初始值爲0

alpha——指明顏色緩衝區被清理時alpha的值,初始值爲0


glClearColorx

public void glClearColorx(int red,int green,int blue,int alpha)

功能glClearColor的修正方法。


glClearDepthf

public void glClearDepthf(float depth)

功能:指明深度緩衝區的清理值。

詳細glClearDepth方法指明深度值,並通過glClear來清理深度緩衝區。glClearDepth指明的值屬於區間[0, 1]

參數

depth——指明深度緩衝區被清理時的深度值,初始值爲1


glClearDepthx

public void glClearDepthx(int depth)

功能glClearDepth的修正方法。


glClearStencil

public void glClearStencil(int s)

功能:指明模板緩衝區的清理值。

詳細glClearStencil指明glClear清理模板緩衝區時的索引,s2m-1,其中m是模板緩衝區中的bit數。

相關獲取

glGetIntegerv方法,並以GL_STENCIL_BITS爲參數。

參數

s——指明glClear清理模板緩衝區時的索引,初始值爲0


glClientActiveTexture

public void glClientActiveTexture(int texture)

功能:選擇客戶端活動紋理單元。

glClientActiveTexture選擇頂點矩陣,客戶狀態參數由glTexCoordPointer方法修改。可用性由glEnableClientStateglDisableClientState決定,參數爲GL_TEXTURE_COORD_ARRAY

注意

總有GL_TEXTUREi = GL_TEXTURE0 + i

錯誤

如果texture不是一個GL_TEXTUREi這裏0 <= i < GL_MAX_TEXTURE_UNITS,則產生一個GL_INVALID_ENUM(錯誤矩陣)。

相關獲取

glGetIntegerv方法,並以GL_MAX_TEXTURE_UNITS爲參數。

參數

texture——指定哪一個紋理單元爲活動。紋理個數至少一個(對於1.0)或兩個(對於1.1)紋理必須是一個GL_TEXTUREi,其中0 <= i < GL_MAX_TEXTURE_UNITS,初始值爲GL_TEXTURE0


glColor4f

public void glColor4f(float red,float green,float blue,float alpha)

功能:設置當前顏色。

詳細GL儲存當前四值的RGBA顏色,glColor可以設置新的四值的RGBA顏色。

當前顏色值被儲存爲整型或浮點型,如果值被儲存爲浮點型,尾數和指數的大小未指明。

在當前顏色更新之前整型與浮點型都不屬於區間[0, 1],然而顏色元素在修改或寫入顏色緩衝區前會屬於該區間。

參數

red——爲當前顏色指明一個新的紅色值,初始值爲1

green——爲當前顏色指明一個新的綠色值,初始值爲1

blue——爲當前顏色指明一個新的藍色值,初始值爲1

alpha——爲當前顏色指明一個新的alpha值,初始值爲1


glColor4x

public void glColor4x(int red,int green,int blue,int alpha)

功能glColor4f的修正方法。


glColorMask

public void glColorMask(boolean red,boolean green,boolean blue,boolean alpha)

功能:開啓與禁止顏色元素的寫入操作。

詳細glColorMask指明單獨的顏色元素是否可以被寫入。舉一個例子,如果redfalse,則顏色緩衝區中的任何像素的顏色的紅色元素將不會發生變化,忽略企圖的繪畫操作,包括glClear

不可以控制元素單個位的改變,只能控制整個元素是否可以改變。

參數

red——指明紅色元素是否可以寫入顏色緩衝區,初始值爲ture,表明可以寫入。

green——指明綠色元素是否可以寫入顏色緩衝區,初始值爲ture,表明可以寫入。

blue——指明藍色元素是否可以寫入顏色緩衝區,初始值爲ture,表明可以寫入。

alpha——指明alpha元素是否可以寫入顏色緩衝區,初始值爲ture,表明可以寫入。


glColorPointer

public void glColorPointer(int size,int type,int stride,Buffer pointer)

功能

定義一個顏色矩陣。

詳細

glColorPointer指明渲染時使用的顏色矩陣。size指明每個顏色的元素數量,必須爲4type指明每個顏色元素的數據類型,stride指明從一個顏色到下一個允許的頂點的字節增幅,並且屬性值被擠入簡單矩陣或存儲在單獨的矩陣中(簡單矩陣存儲可能在一些版本中更有效率)。

當一個顏色矩陣被指定,size, type, stridepointer將被保存在客戶端狀態。

如果顏色矩陣被啓用,當使用glDrawArrays方法或glDrawElements方法時被調用。利用glEnableClientState方法與glDisableClientState方法以GL_COLOR_ARRAY爲參數來啓用和禁止顏色矩陣,顏色矩陣初始值爲禁用,不允許glDrawArrays方法和glDrawElements方法調用。

使用glDrawArrays方法依據事先指明的頂點和頂點矩陣構建一系列圖元(都是同種類型的),使用glDrawElements方法依據頂點索引和頂點屬性構建一系列圖元。

注意

glColorPointer在客戶端應用。

錯誤

size 不是4時將產生GL_INVALID_VALUE

type不是一個允許的值時將產生GL_INVALID_ENUM

stride爲負數時將產生GL_INVALID_VALUE

pointer參數必須是直接緩存並且類型與type指定的類型相同。

參數

size——指明每個顏色的元素數量,必須爲4

type——指明每個矩陣中顏色元素的數據類型,允許的符號常量有GL_UNSIGNED_BYTE, GL_FIXEDGL_FLOAT,初始值爲GL_FLOAT

stride——指明連續的點之間的位偏移,如果stride0時,顏色被緊密擠入矩陣,初始值爲0

pointer——指明包含顏色的緩衝區,如果pointernull,則爲設置緩衝區。

拋出

java.lang.IllegalStateException——如果是OpenGL ES 1.1並且VBOsVertex Buffer Object即頂點緩衝對象)啓用。

java.lang.IllegalArgumentException——如果pointer不是直接緩存。

網絡解釋

頂點數組的概念如此的簡單,如其名,就是將原來由一系列的glVertex*指定的頂點放在一個數組中,(其意思就是頂點數據組成的數組)由頂點數組處理函數一次性指定。事實上,不僅如此,其一次性指定的不僅僅是數組,還可以是其他系列的東西,比如表面發現,RGBA顏色,輔助顏色等。


glCompressedTexImage2D

public void glCompressedTexImage2D(int target,

                                  int level,

                                  int internalformat,

                                  int width,

                                  int height,

                                  int border,

                                  int imageSize,

                                  Buffer data)

功能

指明一個二維的壓縮的紋理圖像。

詳細

glCompressedTexImage2D定義一個壓縮格式的二維紋理圖像。

調色板紋理是被支持的壓縮格式,一個壓縮圖像的佈局是一個調色板,調色板由用以查找調色板的多層級數的紋理引用決定。調色板的格式可以爲R5_G6_B5, RGBA4,RGB5_A1, RGB8, 或者RGBA8,紋理引用的分辨率可以爲4位或8位。結果,調色板條目不是16就是256。如果level0,數據中僅有一個紋理引用的層級數會被描述。否則,level爲負值指明描述紋理直到哪一個層級數。可能會有剩餘爲最低分辨率填補的半個字節會被忽略。

注意

glPixelStore對於壓縮紋理圖像無影響。

glCompressedTexImage2D指明當前綁定紋理的二維紋理以及當前紋理單元,分別通過glBindTexture方法和glActiveTexture方法。

錯誤

如果target不是GL_TEXTURE_2D,將會產生GL_INVALID_ENUM(錯誤枚舉)。

如果level大於0或者絕對值大於log_2(max),這裏的maxGL_MAX_TEXTURE_SIZE的返回值。則產生GL_INVALID_VALUE

(1.0)internalformat不是允許的符號常量,將產生GL_INVALID_VALUE(錯誤值)。

(1.1)internalformat不是允許的符號常量,將產生GL_INVALID_ENUM(錯誤枚舉)。

如果width或者height小於0或大於2 +GL_MAX_TEXTURE_SIZE,或者其中一個不能表示爲2^k+ 2*borderk爲整數,將產生GL_INVALID_VALUE(錯誤值)。

如果border不是0則產生GL_INVALID_VALUE(錯誤值)。

如果圖像不符合格式、尺寸及壓縮圖像的內容,則產生GL_INVALID_VALUE(錯誤值)。

參數

target——指明目標紋理,必須爲GL_TEXTURE_2D

level——指明具體數值的等級數,必須小於等於00表明只有一種層級數,負數表明有多少被數據描述的層級數。

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, and GL_PALETTE8_RGB5_A1_OES.

width——指明紋理圖像的寬度,必須是2^k + 2*borderk爲整數,所有版本支持的紋理圖像至少時64像素寬。

height——指明紋理圖像的高度,必須是2^k + 2*borderk爲整數,所有版本支持的紋理圖像至少時64像素高。

border——指明邊界寬度,必須爲0

imageSize——指明壓縮紋理圖像的大小,單位爲byte

data——指明一個包含壓縮紋理圖像數據的緩衝區。

拋出

java.lang.IllegalArgumentException——如果data爲空。

java.lang.IllegalArgumentException——如果data.remaining()小於imageSize

網絡解釋

功能: 使用壓縮過的紋理圖像定義一個二維紋理.
level:
提供多種分辨率的紋理. 如紋理只有一種分辨率,level則設置爲0.
internalformat:
紋理圖像的壓縮格式, 必須是當前OpenGL實現支持的壓縮格式, 否則導致GL_INVALID_ENUM錯誤.
width, height, depth:
指定二維紋理圖像的大小. 參數值的必須爲 2m次方 + 2b.
border: b
的值, 必須是0

mipmap: 多個明細等級(即上面的層級數)

mipmap:一系列預先通過濾波生成的, 分辨率遞減的紋理圖.
功能: 使用mipmap技術時, OpenGL根據物體的大小(以像素爲單位)自動確定應使用哪個紋理圖像.
方法: 必須提供從最大尺寸到1 x 1, 大小爲2的冪的各種紋理圖.例如最大分辨率爲64 X 16, 就必須提供32X8, 16X4, 8X2, 4X1, 2X1, 1X1的紋理
原理: 小的紋理圖通常是通過對最大的紋理圖進行濾波處理得到的,每個紋素的值是前一個紋理圖中4個相應紋素的平均值.
使用: 用函數glTexImage2D()指定使用哪些紋理. 將參數level, width,heightimage設置成不同的值.
level
的示例: 例如最大分辨率爲64 X 16,level0表示64X16,level1表示32X8, 以此類推(有些問題)


glCompressedTexSubImage2D

public void glCompressedTexSubImage2D(int target,

                                     int level,

                                     int xoffset,

                                     int yoffset,

                                     int width,

                                     int height,

                                     int format,

                                     int imageSize,

                                     Buffer data)

功能

指明二維壓縮紋理子圖。

詳細

glCompressedTexSubImage2D在已存在的二維壓縮圖像的子區域重新定義紋理子圖。子圖將替換已存在紋理圖像的子區域。範圍是x方向從xoffsetxoffset+ width –1y方向從yoffsetyoffset + height – 1。寬、高都爲0不是錯誤,但沒有意義。

現在沒有支持該方法的壓縮格式。

注意

glPixelStore對於壓縮紋理圖像無效果。

glCompressedTexImage2D指明當前綁定紋理的二維紋理以及當前紋理單元,分別通過glBindTexture方法和glActiveTexture方法。

錯誤

如果target不是GL_TEXTURE_2D,將會產生GL_INVALID_ENUM(錯誤枚舉)。

如果紋理矩陣沒有被之前的glCompressedTexImage2D操作定義則產生GL_INVALID_OPERATION

如果level小於0或者絕對值大於log_2(max),這裏的maxGL_MAX_TEXTURE_SIZE的返回值。則產生GL_INVALID_VALUE

如果xoffset < -b, xoffset + width > (w - b), yoffset< -b, or yoffset + height > (h - b),這裏w紋理的寬度,h是紋理的高度,b是被修改的紋理圖像的邊界,則產生GL_INVALID_VALUE。注意w h包含2倍的邊界寬。

如果寬、高小於0則產生GL_INVALID_VALUE

如果type不是類型常量則產生GL_INVALID_ENUM

如果typeGL_UNSIGNED_SHORT_5_6_5並且format不是GL_RGB則產生GL_INVALID_OPERATION

如果typeGL_UNSIGNED_SHORT_4_4_4_4GL_UNSIGNED_SHORT_5_5_5_1並且format不是GL_RGB則產生GL_INVALID_OPERATION

如果不是上述的情形則產生GL_INVALID_OPERATION

相關獲取:

利用glGetIntegerv方法,參數爲GL_MAX_TEXTURE_SIZE

參數

target——指明目標紋理,必須是GL_TEXTURE_2D

level——指明層級數。

xoffset——指明在紋理矩陣中在X方向上的偏移量。

yoffset——指明在紋理矩陣中在Y方向上的偏移量。

width——指明紋理子圖的寬。

height——指明紋理子圖的高。

format——指明像素數據的格式,現在沒有支持的格式。

imageSize——指明壓縮圖像的大小,以byte爲單位。

data——指明包含壓縮紋理圖像的緩衝區。

拋出

java.lang.IllegalArgumentException——如果data爲空。

java.lang.IllegalArgumentException——如果data.remaining()小於imageSize

網絡解釋

功能: 用一個二維紋理圖像替換當前二維紋理圖像中的一個(矩形)區域.
target:
取值與函數glCopyTexImage2D()中相同.
level, format, type: level
mipmap明細等級. formattype描述了紋理圖像數據的格式和數據類型.
子圖像受函數glPixelStore*()glPixelTransfer*()設置的模式以及其他像素轉移操作的影響.
xoffset, yoffset:
要替換的子區域左下角相對於當前紋理左下角的位置.
width, height:
要替換的子區域的寬度和高度.
texels:
子圖像的紋理數據.


glCopyTexImage2D

public void glCopyTexImage2D(int target,

                            int level,

                            int internalformat,

                            int x,

                            int y,

                            int width,

                            int height,

                            int border)

功能

指明一個像素從顏色緩衝區獲得的二維紋理圖像。

詳細

glCopyTexImage2D定義一個像素從顏色緩衝區獲得的二維紋理圖像。

獲取紋理數據的矩形,xy代表矩形的左下角,寬爲width+ 2*border,高爲height of height+ 2*border,分辨率爲level指明的分辨率,internalformat指明紋理的顏色元素。

每一個被讀取的像素的紅、綠、藍、alpha元素被轉換爲未指明精度的內部整型或浮點型格式。轉換機構將元素最大值映射爲1.0,元素值爲0時映射爲0.0。然後值再被轉換爲紋理內部格式並儲存在像素矩陣中。

必須事先確定內部格式以使顏色緩衝區元素在轉換時進行處理。但新的顏色元素不能添加。舉一個例子,一個RGB顏色緩衝區可以被用來創建一個LUMINANCERGB紋理,不能是ALPHALUMINANCE_ALPHA或者RGBA紋理。

像素排列時,下面的xy座標與紋理的下面的st座標相對應。

如果指明的顏色緩衝區矩形位於當前渲染的窗口的外面,則那些獲取的值是未定義的。

注意

一個寬、高均爲0的圖像表示無紋理。

錯誤

如果target不是GL_TEXTURE_2D,將會產生GL_INVALID_ENUM(錯誤枚舉)。

如果internalformat不與顏色緩衝區格式相匹配,將會產生GL_INVALID_OPERATION

如果level小於0或者絕對值大於log_2(max),這裏的maxGL_MAX_TEXTURE_SIZE的返回值。則產生GL_INVALID_VALUE

如果寬、高小於0或大於GL_MAX_TEXTURE_SIZE或不滿足2^k + 2*borderk爲整數,將產生GL_INVALID_VALUE

如果border不是0,將產生GL_INVALID_VALUE

(1.0)internalformat不是允許的符號常量,將產生GL_INVALID_VALUE(錯誤值)。

(1.1)internalformat不是允許的符號常量,將產生GL_INVALID_ENUM(錯誤枚舉)。

相關獲取

glGetIntegerv方法,參數爲GL_MAX_TEXTURE_SIZE

參數

target——指明目標紋理,必須爲GL_TEXTURE_2D

level——指明詳細層數,level 0是基本圖像levellevel n是第n層級數壓縮圖像。

internalformat——指明圖像的顏色元素,允許的符號常量有GL_ALPHA,GL_LUMINANCE,GL_LUMINANCE_ALPHA, GL_RGB以及GL_RGBA

x——複製矩形的左下角x座標。

y——複製矩形的左下角y座標。

width——指明紋理圖像寬度,必須是0 或者 2^n + 2*bordern爲整數。

height——指明紋理圖像高度,必須是0 或者 2^n + 2*bordern爲整數。

border——指明邊界寬度。必須爲0

網絡解釋

功能:複製幀緩存爲紋理數據
target:
必須爲常量GL_TEXTURE_2D
level, internalFormat, border:
同函數glTexImage2D()
x,y:
屏幕座標的左下點
width, height:
矩形的寬和高.


glCopyTexSubImage2D

public void glCopyTexSubImage2D(int target,

                               int level,

                               int xoffset,

                               int yoffset,

                               int x,

                               int y,

                               int width,

                               int height)

功能:指明一個像素從顏色緩衝區獲得的二維紋理圖像子圖。

詳細:glCopyTexSubImage2D


glCullFace

public void glCullFace(int mode)

功能

指明多邊形的前面或後面是否被揀選。

詳細

glCullFace指明多邊形的前面或後面是否被揀選(當mode被指明時)當揀選功能開啓。開啓或禁止揀選功能,調用glEnable方法和glDisable方法並以GL_CULL_FACE爲參數。揀選功能初始值爲禁止。

glFrontFace指明順時針和逆時針繪出多邊形,哪一個是前面,哪一個是背面。

注意

如果modeGL_FRONT_AND_BACK,多邊形不會被繪出,但是其他圖元像點、線會被繪出。

錯誤

如果mode不是被允許的值,將會產生GL_INVALID_ENUM

參數

mode——指明多邊形的前面或後面是否被揀選。允許的符號常量有:GL_FRONT,GL_BACKGL_FRONT_AND_BACK。初始值爲GL_BACK


glDrawArrays

public void glDrawArrays(int mode,int first,int count)

功能:

由矩陣數據渲染圖元。

詳細

glDrawArrays通過很少的子程序調用指明多層幾何圖元。你可以設置獨立的頂點、法線、顏色矩陣,以及紋理座標,並僅需調用glDrawArrays就可以通過它們構建一系列圖元。

glDrawArrays被調用,它從被允許訪問的矩陣中計算連續count個元素來構建一系列幾何圖元,從first元素開始。mode指明哪一種圖元將被構建及矩陣元素怎樣構建這些圖元。如果GL_VERTEX_ARRAY沒有啓用,則不會有圖元產生。

glDrawArrays返回後,由glDrawArrays改變的頂點屬性會得到一個未指明的值。舉個例子,如果GL_COLOR_ARRAY被啓用,則glDrawArrays執行後當前顏色的值是未定義的。未改變的屬性仍然是已定義的。

錯誤

如果mode不是被允許的值,將會產生GL_INVALID_ENUM

如果count是負數,將會產生GL_INVALID_VALUE

參數

mode——指明渲染哪一種圖元。允許的符號常量有GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP,GL_LINES, GL_TRIANGLE_STRIP,GL_TRIANGLE_FANGL_TRIANGLES

first——指明在允許訪問的矩陣中的起始索引。

count——指明要渲染的索引的數量。

拋出:

java.lang.ArrayIndexOutOfBoundsException——如果序列中任一索引firstfirst + count –1,導致引用出界。這個序列包括當前頂點、顏色、法線、紋理座標,點大小,矩陣索引,或加權矩陣。


glDrawElements

public void glDrawElements(int mode,int count,int type,Buffer indices)

功能

由矩陣數據渲染圖元。

詳細

glDrawElements用少量調用指明多重幾何圖元,你可以事先指明獨立的頂點、法線、顏色和紋理座標矩陣並且可以通過調用glDrawElements方法來使用它們創建序列圖元。

glDrawElements被調用,它會使用有序索引來查詢可用矩陣中的元素,並以此創建序列幾何圖元,如果GL_VERTEX_ARRAY被禁用,則不會創建。

頂點屬性由glDrawElements修改,glDrawElements在返回後會有一個未指明的值。舉一個例子,如果GL_COLOR_ARRAY啓用,當執行glDrawElements方法後,當前顏色的值是未定義的,屬性不會維持它之前的值。

錯誤

如果mode的值不被允許,將產生GL_INVALID_ENUM

如果type的值不被允許,將產生GL_INVALID_ENUM

如果count是負數,將產生GL_INVALID_VALUE

參數

mode——指明被渲染的是哪種圖元,被允許的符號常量有GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FANGL_TRIANGLES

count——指明被渲染的元素個數。

type——指明索引指的類型,不是GL_UNSIGNED_BYTE就是GL_UNSIGNED_SHORT

indices——指明存儲索引的位置指針。

拋出

java.lang.IllegalStateException——如果最近一次調用glBindBuffer方法以GL_ELEMENT_ARRAY_BUFFER爲目標時,有一個非0緩衝區參數。

java.lang.IllegalArgumentException——如果索引爲空。

java.lang.ArrayIndexOutOfBoundsException——如果索引序列中從0count-1中任意索引超出現有索引或數據矩陣範圍。


glEnable

public void glEnable(int cap)

功能

啓用服務器端GL功能。

詳細

glEnable方法和glDisable方法可以啓用和禁止各種功能,各種功能(除了GL_DITHERGL_MULTISAMPLE)的初始值爲GL_FALSE

glEnable方法和glDisable方法都只有一個參數,它可以採用下列值中的一個:GL_ALPHA_TEST——如果啓用,將進行alpha測試,詳見glAlphaFunc

GL_BLEND——如果啓用,將引入的值與顏色緩衝區中的值混合,詳見glBlendFunc

GL_COLOR_LOGIC_OP——如果啓用,允許(apply)引入的顏色與顏色緩衝區中的值進行邏輯運算。詳見glLogicOp

GL_COLOR_MATERIAL——如果啓用,得到當前顏色的周圍散開的痕跡。

GL_CULL_FACE——如果啓用,基於窗口座標採集多邊形。詳見glCullFace

GL_DEPTH_TEST——如果啓用,做深度比較和更新深度緩存。值得注意的是即使深度緩衝區存在並且深度mask不是0,如果深度測試禁用的話,深度緩衝區也無法更新。詳見glDepthFunc,glDepthMaskglDepthRange

GL_DITHER——如果啓用顏色元素或索引將在被寫入顏色緩衝區之前進行dither

GL_FOG——如果啓用,將霧的顏色效果與顯示紋理顏色混合。詳見glFog

GL_LIGHTi——如果啓用,包含光線i在光線方程的評價中,詳見glLightModelglLight

GL_LIGHTING——如果啓用,用當前光線參數計算頂點顏色。否則僅僅簡單將當前顏色與每個頂點關聯。詳見glMaterial,glLightModelglLight

GL_LINE_SMOOTH——如果啓用,畫線時使用調整過濾。否則,畫aliased線,詳見glLineWidth

GL_MULTISAMPLE——如果啓用,爲單程反鋸齒和其他效果顯示多樣本片段,詳見glSampleCoverage

GL_NORMALIZE——如果啓用,法向量被計算爲單位向量,詳見glNormalglNormalPointer

GL_POINT_SMOOTH——如果啓用,使用調整過濾器描繪點,否則,畫aliased點,詳見glPointSize

GL_POLYGON_OFFSET_FILL——如果啓用,在深度比較進行前多邊形片段的深度值會進行移位。

GL_RESCALE_NORMAL——如果啓用,法向量的刻度由視圖模型矩陣中的元素確定,詳見glNormalglNormalPointer

GL_SAMPLE_ALPHA_TO_MASK(僅1.0——如果啓用,將alpha值轉變爲多樣本範圍修正碼。詳見glSampleCoverage

GL_SAMPLE_ALPHA_TO_COVERAGE(僅1.1——如果啓用,將會產生一個範圍值,它的每個bit都是由相應的樣本位置的alpha值決定的。

GL_SAMPLE_ALPHA_TO_ONE——如果啓用,在計算完多樣本範圍修正碼後將片段alpha值設爲被允許的最大值。詳見glSampleCoverage

GL_SAMPLE_MASK(僅1.0——如果啓用,在進行多樣本時,申請一個碼來修改片段範圍。

GL_SAMPLE_COVERAGE(僅1.1——如果啓用,片段範圍會與另一個臨時的範圍值進行與運算。這個臨時的範圍值與上文中GL_SAMPLE_ALPHA_TO_COVERAGE描述的範圍值的確定方式相同。但是作爲GL_SAMPLE_COVERAGE_VALUE的值的功能,如果GL_SAMPLE_COVERAGE_VALUEGL_TRUE,在它與片段範圍值進行與運算前,這個臨時的範圍值是倒置的(所以bit的值都是倒置的),詳見glSampleCoverage

GL_SCISSOR_TEST——如果啓用,丟棄裁剪矩形外的片段。詳見glScissor

GL_STENCIL_TEST——如果啓用,做模板測試並更新模板緩衝區,詳見glStencilFuncglStencilMaskglStencilOp

GL_TEXTURE_2D——如果啓用,當前活動紋理單元爲二維紋理。詳見glActiveTexture,glTexImage2D,glCompressedTexImage2DglCopyTexImage2D

GL_CLIP_PLANEi——如果啓用,裁剪面i可用。詳見glClipPlane

GL_POINT_SPRITE_OES1.1 + OES_point_sprite 擴展)——如果啓用,點塊紋理可用,詳見glPointSizeglTexEnv

錯誤:

如果參數不是前面列表中的值,將會產生一個GL_INVALID_ENUM

參數

cap——指定一個在GL空間中聲明的符號常量。


glEnableClientState

public void glEnableClientState(int array)

功能

啓用客戶端的某項功能。

詳細

glEnableClientStateglDisableClientState啓用或禁用客戶端的單個功能。默認的,所有客戶端功能禁用。

array可以是下列符號常量:

GL_COLOR_ARRAY——如果啓用,顏色矩陣可以用來寫入以及調用glDrawArrays方法或者glDrawElements方法時進行渲染。詳見glColorPointer

GL_NORMAL_ARRAY——如果啓用,法線矩陣可以用來寫入以及調用glDrawArrays方法或者glDrawElements方法時進行渲染。詳見glNormalPointer

GL_TEXTURE_COORD_ARRAY——如果啓用,紋理座標矩陣可以用來寫入以及調用glDrawArrays方法或者glDrawElements方法時進行渲染。詳見glTexCoordPointer

GL_VERTEX_ARRAY——如果啓用,頂點矩陣可以用來寫入以及調用glDrawArrays方法或者glDrawElements方法時進行渲染。詳見glVertexPointer

GL_POINT_SIZE_ARRAY_OES(OES_point_size_arrayextension)——如果啓用,點大小矩陣控制大小以渲染點和點sprites。這時由glPointSize定義的點大小將被忽略,由點大小矩陣提供的大小將被用來渲染點和點sprites。詳見glPointSize

注意

啓用和禁用GL_TEXTURE_COORD_ARRAY將會影響活動的客戶紋理單元,活動的客戶紋理單元由glClientActiveTexture控制。

錯誤

如果array不是被允許的值,將產生GL_INVALID_ENUM

參數

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組成的場景中,多邊形的背面永遠不會被看到。剔除這些不能顯示出來的面可以加速渲染器渲染圖像的時間。開啓和禁用剔除功能,調用glEnableglDisable方法並以GL_CULL_FACE爲參數。剔除功能初始值爲禁止。

如果一個虛擬的對象從第一個頂點,到第二個頂點,等等,直到最後一個頂點,這個多邊形頂點移動的方向是按順時針移動的,則這個多邊形窗口座標上的投影被認爲是按順時針繪出的。如果一個虛擬的對象從第一個頂點,到第二個頂點,等等,直到最後一個頂點,這個多邊形頂點移動的方向是按逆時針移動的,則這個多邊形窗口座標上的投影被認爲是按逆時針繪出的。glFrontFace指明多邊形在窗口座標中是順時的還是逆時針被作爲正面。傳遞GL_CCWmode則選擇逆時針多邊形爲正面,GL_CW則選擇順時針多邊形爲正面。默認逆時針多邊形爲正面。

錯誤:

如果mode不是被允許的值,將產生GL_INVALID_ENUM

參數:

mode——多邊形正面的方向。GL_CWGL_CCW被允許,初始值爲GL_CCW


glHint

public void glHint(int target,int mode)

功能

控制GL某些行爲。

詳細

當擁有解釋的空間時,GL某些方面的行爲可以由hints控制。一個hints由兩個參數指明。target是一個由常量符號描述的用以被控制的行爲。mode是另一個由符號常量描述的想要執行的行爲。target的初始值是GL_DONT_CAREmode允許的符號常量有:

GL_FASTEST——選擇最有效率的選項。

GL_NICEST——選擇最正確或質量最好的選項。

GL_DONT_CARE——無任何傾向。

儘管hints控制實現的方面可以很好的定義,但hints的解釋仍依賴於具體的實現。hints控制的方面由target指明,允許的符號常量有:

GL_FOG_HINT——表明霧效果計算的精確度,如果每個像素的霧效果計算不能被GL效率支持的話,那麼GL_DONT_CAREGL_FASTEST可以用於每個每個頂點的霧效果計算。

GL_LINE_SMOOTH_HINT——表明直線抗鋸齒的效果。如果應用一個大的過濾函數, GL_NICEST可以應用於更多的在光柵化時產生的像素上。

GL_PERSPECTIVE_CORRECTION_HINT——表明顏色和紋理座標插值的效果。如果遠點修正插入不能被GL有效支持的話,那麼GL_DONT_CARE或者GL_FASTEST可以應用於顏色的線性插值或是紋理座標。

GL_POINT_SMOOTH_HINT——表明反走樣點的效果。如果應用一個大的過濾函數,GL_NICEST可以應用於更多的在光柵化時產生的像素上。

GL_GENERATE_MIPMAP_HINT(僅1.1——表明自動生成的mipmap的質量和性能。

注意

hints的解釋基於具體的實現。一些實現會忽略glHint設置。

錯誤

target——指明一個符號常量來表明被控制的行爲。有GL_FOG_HINT,GL_LINE_SMOOTH_HINT,GL_PERSPECTIVE_CORRECTION_HINT,GL_POINT_SMOOTH_HINT,在1.1還有GL_GENERATE_MIPMAP_HINT

mode——指明一個符號常量來表明想要執行的行爲。有GL_FASTEST,GL_NICESTGL_DONT_CARE

網絡解釋

voidglHint(GLenum target, GLenum hint);    // 控制OpenGL的某些行爲
參數target是要控制的行爲
參數hint可以是GL_FASTEST,GL_NICEST,GL_DONT_CARE.(效率最高, 質量最好, 沒有選擇)
參數target的取值及其含義:
GL_POINT_SMOOTH_HINT, GL_LINE_SMOOTH_HINT, GL_POLYGON_SMOOTH_HINT----
反走樣操作中, 直線,點或多邊形的採樣質量.
GL_FOG_HINT----
對每個像素(GL_NICEST)還是每個頂點(GL_FASTEST)執行霧效計算.
GL_PERSPECTIV_CORRECTION_HINT----
顏色和紋理座標插值的質量
GL_GENERATE_MIPMAP_HINT----
自動生成的mipmap的質量和性能
GL_TEXTURE_COMPRESSION_HINT----
紋理圖案的壓縮質量和性能.


glLineWidth

publicvoid glLineWidth(float width)

功能

指明光柵化線段的寬度。

詳細

glLineWidth指明可走樣或反走樣線的寬度。使用不是1的線寬會不會有不同的效果,取決與是否開啓反走樣功能。開啓和關閉反走樣功能需調用glEnable glDisable並以GL_LINE_SMOOTH爲參數。反走樣功能初始值爲關閉。

如果線的反走樣功能被關閉,實際的寬度由設定寬度的最近整數值決定。(如果這個整數是0,則按照1來處理)如果|deltax| >=|delta y|,每個被光柵化的列的i個像素會被填充,i是指寬度的整數話的值。否則,沒行的的i個像素點會被填充。

如果反走樣功能啓用的話,線光柵化時會爲每個像素區產生一個片段,這些像素區以矩形形式貫穿這個區域,矩形的寬度等於當前的線寬,長度等於線的真實長度,並以該線段爲中心。每個片段的覆蓋值是矩形區域相應的像素區域的座標區域。這個值被保存起來,在光柵化時使用。

當反走樣功能開啓時,不是所有的寬度都被支持。如果設置了一個不不被支持的值,將會使用離這個值最近的被支持的值。只有1可以保證是被支持的值,其他值要依據相應的應用平臺來確定。同樣的,對於走樣的線寬度也有一個範圍。想詢問被支持的線寬範圍以及這個範圍內被支持線寬的大小不同處,需要調用glGetIntegerv方法並以GL_ALIASED_LINE_WIDTH_RANGE,GL_SMOOTH_LINE_WIDTH_RANGE,GL_SMOOTH_LINE_WIDTH_GRANULARITY爲參數。

注意

沒有反走樣的線線寬可能會在由應用平臺決定的最大值以內,可以使用glGetIntegerv方法並以GL_ALIASED_LINE_WIDTH_RANGE爲參數來這個最大線寬。

錯誤

如果線寬小於等於0,將會產生GL_INVALID_VALUE

參數

width——指定光柵化時的線寬度,初始值爲1


glLoadIdentity

public void glLoadIdentity()

功能:

用特徵矩陣代替當前矩陣。

詳細:

glLoadIdentity使特徵矩陣代替當前矩陣。語義上等價於調用glLoadMatrix方法並以特徵矩陣爲參數。

(1       0       0      0 )

(0       1      0      0 )

(0       0      1      0 )

(0       0      0      1 )

但在一些情況下它更高效。


glMaterialfv

public void glMaterialfv(int face,

                        int pname,

                        float[] params,

                        int offset)

功能

爲光線模式指明材質參數(矩陣版本)。

詳細

glMaterial分配值給材質參數。有兩個匹配的材質參數。一個是正面設置,用於給點、線、多邊形(當兩面光線被禁用時)着色或者是正面多邊形(當兩面光線啓用時)。另一個是背面設置,用於爲背面多邊形,僅當兩面光線被啓用時。關於一面和兩面光線計算的內容參考glLightModel

glMaterial有三個參數,第一個,face,必須是GL_FRONT_AND_BACK並且指明正面和背面想要修改成的材質。第二個,pname,指明幾個參數中的哪一個在一或兩個設置中將要被更改。第三個,params,指明已指明的參數的值。

材質參數被用於可以應用於每個頂點的光線方程式。方程式將在glLightModel相關文檔中討論。這些參數可以利用glMaterial來指明,下面是光線方程式的解釋。

GL_AMBIENT——參數包括4個整數或單精度值用以指明材質的環境RGBA反射比。這個值並沒有範圍,初始環境反射比爲(0.2, 0.2, 0.2,1.0)

GL_DIFFUSE——參數包括4個整數或單精度值用以指明材質的散射RGBA反射比。這個值並沒有範圍,初始散射反射比爲(0.8, 0.8, 0.8,1.0)

GL_SPECULAR——參數包括4個整數或單精度值用以指明材質的鏡面反射RGBA反射比。這個值並沒有範圍,初始鏡面反射反射比(0, 0, 0, 1)

GL_EMISSION——參數包括4個整數或單精度值用以指明材質的RGBA發射光強度。這個值並沒有範圍,初始值爲(0, 0, 0, 1)

GL_SHININESS——參數包括一個整數或單精度值用以指明材質的RGBA鏡面反射指數。範圍是[0, 128]。初始值爲0

GL_AMBIENT_AND_DIFFUSE——相當於以相同的參數值調用glMaterial方法兩次。一次是以GL_AMBIENT爲第二參數,一次是以GL_DIFFUSE爲第二參數。

注意

改變每個頂點的散射和環境反射材質,可以使用顏色材質。開啓與禁用GL_COLOR_MATERIAL調用glEnableglDisable方法並以GL_COLOR_MATERIAL爲參數,顏色材質初始是禁用的。

錯誤

如果facepname不是被允許的值,將會產生GL_INVALID_ENUM

如果鏡面反射指數不在範圍[0, 128]中,將會產生GL_INVALID_VALUE

參數:

face——指明哪個或哪些面需要更新。必須是GL_FRONT_AND_BACK

pname——指明指明需要更新的面的材質參數。必須是GL_AMBIENT,GL_DIFFUSE, GL_SPECULAR,GL_EMISSION, GL_SHININESSGL_AMBIENT_AND_DIFFUSE中的一個。

params——指明要賦予pname的值的索引。

offset——參數矩陣中的開始偏移量。

拋出:

java.lang.IllegalArgumentException——如果paramsnull

java.lang.IllegalArgumentException——如果offset小於0

java.lang.IllegalArgumentException——如果params.length- offset小於參數要求的值的個數。


glMaterialfv

public void glMaterialfv(int face,int pname,FloatBuffer params)

功能

glMaterial的單精度緩衝區版本。

拋出:

java.lang.IllegalArgumentException——如果paramsnull

java.lang.IllegalArgumentException——如果offset小於0

java.lang.IllegalArgumentException——如果params.length- offset小於參數要求的值的個數。


glMaterialx

public void glMaterialx(int face,int pname,int param)

功能

glMaterial的整數版本。


glMaterialxv

public void glMaterialxv(int face,

                        int pname,

                        int[] params,

                        int offset)

功能

glMaterial的整數矩陣版本。

拋出:

java.lang.IllegalArgumentException——如果paramsnull

java.lang.IllegalArgumentException——如果offset小於0

java.lang.IllegalArgumentException——如果params.length- offset小於參數要求的值的個數。


glMaterialxv

public void glMaterialxv(int face,int pname,IntBuffer params)

功能

glMaterial的整數緩衝區版本。

拋出:

java.lang.IllegalArgumentException——如果paramsnull

java.lang.IllegalArgumentException——如果offset小於0

java.lang.IllegalArgumentException——如果params.length- offset小於參數要求的值的個數。


glMatrixMode

public void glMatrixMode(int mode)

功能

指明哪個矩陣是當前矩陣。

詳細

glMatrixMode設置當前矩陣模式,mode允許的值有:

GL_MODELVIEW——應用視圖矩陣堆的後續矩陣操作。

GL_PROJECTION——應用投射矩陣堆的後續矩陣操作。

GL_TEXTURE——應用紋理矩陣堆的後續矩陣操作。

GL_MATRIX_PALETTE_OESOES_matrix_palette 擴展)——啓用矩陣調色板堆棧擴展,並應用矩陣調色板堆棧後續矩陣操作。

錯誤

如果mode不是一個允許的值,將產生一個GL_INVALID_ENUM

參數

mode——指明哪一個堆允許後續的矩陣操作。允許的值有L_MODELVIEW,GL_PROJECTIONGL_TEXTURE,在有OES_matrix_palette擴展時,GL_MATRIX_PALETTE_OES也被允許,初始值是GL_MODELVIEW


glNormalPointer

public void glNormalPointer(int type,int stride,Buffer pointer)

功能

定義一個法線矩陣。

詳細

glNormalPointer指明在渲染時的位置和法線矩陣中的數據。type指明法線座標的數據類型,stride給出從一個法線到下一個法線的字節幅度,允許頂點和屬性被裝在單獨的矩陣中或存儲在分開的矩陣中。(單獨矩陣在某些版本更有效率)。當一個法線矩陣被指明則type , stride pointer被存在客戶端狀態。

如果法線矩陣被啓用,它會在調用glDrawArraysglDrawElements方法時被調用。啓用和禁用法線矩陣需調用glEnableClientStateglDisableClientState並以GL_NORMAL_ARRAY,法線矩陣初始爲禁用,並且當調用glDrawArraysglDrawElements方法時不允許調用。

注意

glNormalPointer在客戶端運行。

錯誤

type不是被允許的值,將產生GL_INVALID_ENUM

stride是負數,將產生GL_INVALID_VALUE

pointer必須是類型匹配的直接緩衝區。類型由type指明。

參數

type——指明矩陣中每個座標的數據類型,符號常量有GL_BYTE,GL_SHORT, GL_FIXEDGL_FLOAT,初始值爲GL_FLOAT

stride——指明連續法線之間的位偏移量。如果stride0,則法線被緊密封裝在矩陣中,初始值是0

pointer——指明一個指針,指針指向矩陣中第一個法線的第一個座標。初始值爲0,如果指針不是null,將不會設置緩衝區。

拋出

java.lang.IllegalStateException——如果爲OpenGL ES 1.1並啓用VBOs

java.lang.IllegalArgumentException——如果指針不是直接的。


glRotatef

public void glRotatef(float angle,float x,float y,float z)

功能

用旋轉矩陣乘以當前矩陣。

詳細

glRotate將圍繞向量(x, y, z)產生一定角度的旋轉。由旋轉矩陣乘以當前矩陣(詳見glMatrixMode),並由其乘積代替當前矩陣。好像調用glMultMatrix方法,並以下列矩陣爲參數:

( 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,調用glRotate方法後所有被繪對象將旋轉一個角度。使用glPushMatrix方法和glPopMatrix方法儲存未旋轉座標系統。

注意

旋轉方式服從右手原則,所以如果一個向量(x, y, z)指向用戶方向,將按逆時針方向旋轉。

參數

angle——指明旋轉的角度,單位爲度。

x——指明旋轉向量的x座標。

y——指明旋轉向量的y座標。

z——指明旋轉向量的z座標。


glRotatex

public void glRotatex(int angle,int x,int y,int z)

功能

glRotatef的修正方法。


glScalef

public void glScalef(float x,float y,float z)

功能

用縮放矩陣乘以當前矩陣。

詳細

glScale沿着xyz座標軸產生並不統一的縮放。三個參數表明沿着每個座標軸想要的縮放因子。

用縮放矩陣乘以當前矩陣(詳見glMatrixMode),其乘積將代替當前矩陣,就好像調用glMatrixMode方法,並以下列矩陣爲參數:

(x       0      0      0 )

(0       y      0      0 )

( 0      0       z      0 )

(0       0      0      1 )

如果矩陣模式不是GL_MODELVIEW就是GL_PROJECTION的話,則調用glScale方法後所以被繪的對象將產生一個縮放。

使用glPushMatrix方法和glPopMatrix方法儲存未縮放座標系統。

注意

如果不僅僅一個縮放矩陣應用於模式視圖矩陣,並且啓用光線效果,光線常常出現錯誤。這種情況下,調用glEnable方法並以GL_NORMALIZE爲參數,啓用法線自動格式化功能。

參數

x——指明x座標軸上的縮放因子。

y——指明y座標軸上的縮放因子。

z——指明z座標軸上的縮放因子。


glScalex

public void glScalex(int x,int y,int z)

功能

glScalef方法的修正方法。


glShadeModel

publicvoid glShadeModel(int mode)

功能

選擇恆定或光滑着色模式。

詳細

GL圖元可以採用恆定或者光滑着色模式,默認值爲光滑着色模式。當圖元進行光柵化的時候,將引起插入頂點顏色計算,不同顏色將被均勻分佈到各個像素片段。恆定着色模式則選擇計算一個頂點的顏色並在光柵化一個圖元時分佈到所有產生的像素片段。不管任何情況下,如果光照功能開啓的話頂點顏色計算時會有光照效果或者當光照效果關閉的話被指定的頂點計算顏色爲那時的當前顏色。恆定和光滑着色模式不能區分點。在頂點矩陣開始時開始,並開始頂點計數,而圖元是從1開始的。GL使恆定着色模式的線段i計算第i+1頂點的顏色,即它的第二個頂點。計算同樣從1開始,GL使恆定着色模式的多邊形計算第i+2頂點的顏色,即指明多邊形的最後一個頂點。

恆定和光滑着色模式由glShadeModel使用GL_FLATGL_SMOOTH參數來設定。

錯誤

如果參數是GL_FLATGL_SMOOTH以外的值,將產生GL_INVALID_ENUM

參數

mode——指明一個符號常量來代表要使用的着色技術。允許的值有GL_FLAT GL_SMOOTH,初始值爲GL_SMOOTH


glTranslatef

public void glTranslatef(float x,float y,float z)

功能

用平移矩陣乘以當前矩陣。

詳細

glTranslate通過向量(x, y, z) 產生平移,以平移矩陣乘以當前矩陣(見glMatrixMode),用乘積代替當前矩陣,就好像調用glMultMatrix方法並以下列矩陣爲參數:

(1       0      0      x )

(0       1      0      y )

(0       0      1      z )

(0       0      0      1 )

如果矩陣模式是GL_MODELVIEWGL_PROJECTION,則調用glTranslate方法後所繪的對象都將發生平移。

使用glPushMatrix方法和glPopMatrix方法來保存沒有平移的座標系統。

參數

x——指明平移向量的x座標。

y——指明平移向量的y座標。

z——指明平移向量的z座標。


glTranslatex

public void glTranslatex(int x,int y,int z)

功能

glTranslatef方法的修正方法。


glVertexPointer

public void glVertexPointer(int size,int type,int stride,Buffer pointer)

功能

定義一個頂點座標矩陣。

詳細

glVertexPointer指明當渲染時一個頂點座標矩陣的存儲單元和數據。

當一個頂點矩陣被指明時,size, type, stridepointer保存爲客戶端狀態。

如果頂點矩陣功能啓用,當調用glDrawArrays方法或glDrawElements方法時會使用。想要啓用或禁止頂點矩陣,使用glEnableClientStateglDisableClientState方法,並以GL_VERTEX_ARRAY爲參數。頂點矩陣初始爲禁止,調用glDrawArrays方法或glDrawElements方法時無效。

調用glDrawArrays方法根據事先指明的點和頂點屬性矩陣創建一系列圖元(都有相同的類型)。調用glDrawElements方法根據頂點索引和頂點屬性創建一系列圖元。

注意

glVertexPointer在一般版本中是在客戶端的。

錯誤:

如果size不是2, 3或者4,將產生GL_INVALID_VALUE

如果type不是允許的值,將產生GL_INVALID_ENUM

如果stride是負值,將產生GL_INVALID_VALUE

pointer必須是直接緩存,並且類型與type指明的類型相同。

參數

size——每個頂點的座標維數,必須是2, 3或者4,初始值是4

type——指明每個頂點座標的數據類型,允許的符號常量有GL_BYTE, GL_SHORT, GL_FIXEDGL_FLOAT,初始值爲GL_FLOAT

stride——指明連續頂點間的位偏移,如果爲0,頂點被認爲是緊密壓入矩陣,初始值爲0

pointer——指明頂點座標的緩衝區,如果爲null,則沒有設置緩衝區。

拋出

java.lang.IllegalStateException——如果是OpenGL ES 1.1並且VBOs可用。

java.lang.IllegalArgumentException——如果pointer不是直接緩存。

 


glViewport

public void glViewport(int x,int y,int width,int height)

功能

設置一個視口

詳細

glViewport指明x、y從標準設備座標到窗口座標的仿射變換,使(xnd, ynd)爲標準設備座標,然後窗口座標(xw, yw)由下列公式計算:

xw = ( xnd + 1 )width/2 + x

yw = ( ynd + 1 )height/2 + y

視口寬、高的範圍區間視版本而定,想查詢此區間可使用方法glGetIntegerv,並以GL_MAX_VIEWPORT_DIMS爲參數。

錯誤

如果寬、高爲負數,將產生GL_INVALID_VALUE

參數

——指明視口矩形的左下角x座標,初始值爲0。

——指明視口矩形的左下角y座標,初始值爲0。

width——指明視口的寬,如果GL上下文首次附於一個surface則寬、高爲這個surface大小。

height——指明視口的高,如果GL上下文首次附於一個surface則寬、高爲這個surface大小。

 

發佈了16 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章