OpenGL函數詳解



一.OPENGL函數詳解

glActiveTexture

publicvoid 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_TEXTUREi ,GL_INVALID_ENUM(錯誤枚舉)會產生。

相關獲取

利用glGetIntegerv處理GL_MAX_TEXTURE_UNITS

參數

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

glAlphaFunc

publicvoid 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

publicvoid glAlphaFuncx(int func,int ref)

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

glBindTexture

publicvoid 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

publicvoid 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, 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 )

儘管從表面上看混合算法並沒有指明上述等式的精度,因爲混合操作是採用不精確的整型顏色值。然而應當等於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。 因此不論疊加多少次,亮度是不變的。

glBindTexture

void glBindTexture(GLenum target, GLuint texture );

函數參數的含義:

target —— 紋理被綁定的目標,它只能取值GL_TEXTURE_1DGL_TEXTURE_2DGL_TEXTURE_3D或者GL_TEXTURE_CUBE_MAP

texture —— 紋理的名稱,並且,該紋理的名稱在當前的應用中不能被再次使用。

glBindTexture可以讓你創建或使用一個已命名的紋理,調用glBindTexture方法,將target設置爲GL_TEXTURE_1DGL_TEXTURE_2DGL_TEXTURE_3D或者GL_TEXTURE_CUBE_MAP,並將texture設置爲你想要綁定的新紋理的名稱,即可將紋理名綁定至當前活動紋理單元目標。當一個紋理與目標綁定時,該目標之前的綁定關係將自動被打破。紋理的名稱是一個無符號的整數。在每個紋理目標中,0被保留用以代表默認紋理。紋理名稱與相應的紋理內容位於當前GL rendering上下文的共享對象空間中。

 

glClear

publicvoid 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

publicvoid 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

publicvoid glClearColorx(int red,int green,int blue,int alpha)

功能glClearColor的修正方法。

glClearDepthf

publicvoid glClearDepthf(float depth)

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

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

參數

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

glClearDepthx

publicvoid glClearDepthx(int depth)

功能glClearDepth的修正方法。

glClearStencil

publicvoid glClearStencil(int s)

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

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

相關獲取

glGetIntegerv方法,並以GL_STENCIL_BITS爲參數。

參數

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

glClientActiveTexture

publicvoid 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

publicvoid 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

publicvoid glColor4x(int red,int green,int blue,int alpha)

功能glColor4f的修正方法。

glColorMask

publicvoid glColorMask(boolean red,boolean green,boolean blue,boolean alpha)

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

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

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

參數

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

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

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

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

glColorPointer

publicvoid 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並且VBOsVertexBuffer Object即頂點緩衝對象)啓用。

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

網絡解釋

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

glCompressedTexImage2D

publicvoid 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, andGL_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

publicvoid 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 > (hb),這裏w紋理的寬度,h是紋理的高度,b是被修改的紋理圖像的邊界,則產生GL_INVALID_VALUE。注意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: levelmipmap明細等級. formattype描述了紋理圖像數據的格式和數據類型.
子圖像受函數glPixelStore*()glPixelTransfer*()設置的模式以及其他像素轉移操作的影響.
xoffset, yoffset: 要替換的子區域左下角相對於當前紋理左下角的位置.
width, height: 要替換的子區域的寬度和高度.
texels: 子圖像的紋理數據.

glCopyTexImage2D

publicvoid 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——指明紋理圖像寬度,必須是或者 2^n + 2*bordern爲整數。

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

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

網絡解釋

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

glCopyTexSubImage2D

publicvoid glCopyTexSubImage2D(int target,

                                int level,

                                int xoffset,

                               int yoffset,

                                int x,

                                int y,

                                int width,

                               int height)

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

詳細:glCopyTexSubImage2D

glCullFace

public void glCullFace(int mode)

功能

剔除指定面mode不被繪製出來,mode = GL_FRONT則有glFrontFace()指定的正面不會被繪製出來,mode = GL_BACK,則glFrontFace指定的背面不被繪製出來

:glFrontFace(GL10.GL_CCW)選定逆時針(默認)繪製爲正面,則glCullFace(GL10.GL_FRONT)會使得正面圖形不被繪製出來,只可以繪製出背面。

詳細

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

glDrawElements

publicvoid 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

參數:

GL_ALPHA_TEST——如果啓用,將進行alpha測試,詳見glAlphaFunc

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

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

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

GL_CULL_FACE——開啓背面裁剪,即允許正反面的選取

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

publicvoid 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

glFrustumf

Public void glFrustumf(float left, float right, float bottom, float top, float zNear, float zFar)

功能:

透視投影的設置,可視區域爲[near,far],投影中心爲z軸上的點(00R

參數:

Left:視口左側對應的x座標

Rigth:視口右側對應的x座標

Top:視口上側對應的y座標

Bottom:視口下側對應的y座標

Near:最近端的z座標

Far:最遠端的z座標

相關計算:

水平方向的視角

a = 2arctg(left,near);//left/near的反切

垂直方向的視角

b = 2arctg(top,near)//

一般-left=right = ScreenWidth/ScreenHeight; -top = bottom = 1

注:

原理:視角變大,視野變大。系統應該調整視口中的圖像,即縮放。

如果水平即x軸的視角變大,則說明視野更加開闊,可見的東西應該要更多,所以視圖會進行調整,即當前視口中圖像按比例縮小,這樣就可以表現出視野開闊了的效果。a增大x軸上會進行縮放,b增大會在y軸上進行縮放,nearfar會在z軸上縮放。

如下的效果

       

  正常比例的三角形   水平視角增大則x軸上圖像縮小   垂直視角增大y軸圖像縮小

 

水平和垂直視角都增大

 

glGenTextures

public abstract void glGenTextures (int n, IntBuffer textures)

Parameters

n

指定要生成的紋理名數

textures

指定存儲生成紋理名的數組

Description

返回n個紋理名存於textures中。不保證這些紋理名是連續的整數,保證它是未被使用過的。生成的紋理是無維度的;他們假定第一次綁定至的紋理目標的維度爲自己的維度(先前調用glGenTextures產生的紋理索引集不會由後面調用的glGenTextures得到,除非他們首先被glDeleteTextures刪除。

Errors

GL_INVALID_VALUE :n爲負數

 

glHint

public void glHint(int target,int mode)

功能

控制GL某些行爲。可以去圖像走樣,即去鋸齒,或臺階

詳細

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

mode

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

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

GL_DONT_CARE——無任何傾向。

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

網絡解釋

void glHint(GLenum target,GLenum mode);    // 控制OpenGL的某些行爲
參數target是要控制的行爲
參數mode可以是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

public void 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

glLightf

Public void glLightf(int light,int pname,float []params,int offset)

參數light 表示要設置哪個燈光,有效值爲常量 GL10.GL_LIGHTn 。

參數pname 表示要設置的屬性,包括

 GL_POSITION:燈光的位置,值爲四元組 (x,y,z,w),光w爲0時表示平行光,xyz即變成了光源方向;光 w 不爲0時,表示(定位光-光源固定點光源或聚光燈的位置一般此時 w取值爲1.0f。

 GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR:燈光的顏色,分別代表環境光、漫射光、反射光。

 GL_CONSTANT_ATTENUATION,GL_LINEAR_ATTENUATION,GL_QUADRATIC_ATTENUATION:衰減,後兩個使燈光的強度隨距離變化,三者共同作用的最終衰減係數爲:1 / (kconstant + klinear * d + kquadratic * d2),其中d表示到光源的距離。

 GL_SPOT_EXPONENT:設置聚光燈光圈中心到邊緣的衰減程度。

 GL_SPOT_CUTOFF:設置聚光燈光錐的擴散角度。

 GL_SPOT_DIRECTION:設置聚光燈的照射方向。

參數param表示要設置的屬性的整數值或浮點值。

參數params表示要設置的屬性的序列值。

參數offset限定數組類型的params參數中要使用的部分的起始位置。

 

glLoadIdentity

public void glLoadIdentity()

功能:

將當前矩陣設置爲單位矩陣,用特徵舉證代替當前矩陣

詳細:

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

( 1       0      0       0 )

( 0       1      0       0 )

( 0       0      1       0 )

( 0       0      0       1 )

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

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

glOthof

Public void glOthof(float left, float right, float bottom, float top, float zNear, float zFar)

功能:

設置正交投影,即實物多大投影多大,不會有遠小近大的效果。

參數:

Left:視口左側對應的x座標

Rigth:視口右側對應的x座標

Top:視口上側對應的y座標

Bottom:視口下側對應的y座標

Near:最近端的z座標

Far:最遠端的z座標

相關計算:

水平方向的視角

a = 2arctg(left,near);//left/near的反切

垂直方向的視角

a = 2arctg(top,near)//

 

 

參數

glRotatef

publicvoid 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

publicvoid glRotatex(int angle,int x,int y,int z)

功能

glRotatef的修正方法。

glScalef

publicvoid 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

publicvoid glScalex(int x,int y,int z)

功能

glScalef方法的修正方法。

glShadeModel

public void 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

glTexCoordPointer

public abstract void glTexCoordPointer (int size, int type, int stride, Buffer pointer)

Parameters

size

指定每一個紋理座標的座標維數,必須是2,3,4,初始值是4.

type

指定每個紋理座標的數據類型。符號常量可以是 GL_BYTE, GL_SHORT, and GL_FIXED are accepted. 初始值是 GL_FLOAT.

一般是 GL_FLOAT 比較好

stride

位圖的寬度,可以理解爲相鄰的兩個紋理之間跨多少個字節,一般爲0,因爲一般不會在紋理中再添加其他的信息。The initial value is 0.

pointer

存放紋理座標的數組,初始值爲0.指明將繪製的第i個點(i<count)分別對應着貼圖的哪一個角,四個角分別用(0,1)(左上角)、(1,1)(右上角)(1,0)(右下角)、(00(左下角)表示

Description

當渲染的時候,紋理數組指定位置和數據 size指定座標維數,爲2,3,4.type指定數據類型,stride指定數組元素間的偏移量。Pointer指定紋理數組。當紋理數組指定後,size,type,stride,pointer被保存爲客戶端狀態。如果紋理座標數組使能,它就可以用glDrawArrays或glDrawElements調用繪製。通過glEnableClientState使能紋理數組,參數是GL_TEXTURE_COORD_ARRAY.紋理座標數組默認不是使能的,調用glDrawArray或glDrawElements不管用。 

Notes

glTexCoordPointer 通常在客戶端實現.

glTexCoordPointer 更新客戶端激活紋理單元的紋理座標數組狀態,通過glClientActiveTexture 。

Errors

GL_INVALID_VALUE is generated if size is not 2, 3, or 4.

GL_INVALID_ENUM is generated if type is not an accepted value.

GL_INVALID_VALUE is generated if stride is negative.

 

glTexParameterf

glTexParameterf(int target, int pname, float param)函數參數的含義:
target —— 目標紋理,必須爲GL_TEXTURE_1D或GL_TEXTURE_2D;
pname —— 用來設置紋理映射過程中像素映射的問題等,取值可以爲:GL_TEXTURE_MIN_FILTER、GL_TEXTURE_MAG_FILTER、GL_TEXTURE_WRAP_S、GL_TEXTURE_WRAP_T,詳細含義可以查看MSDN;
param —— 實際上就是pname的值,可以參考MSDN

glTexParameterf 是設置紋理貼圖的參數屬性
比如target,表示你使用的1d紋理還是2d紋理,就是一維的,還是二維的,在pc上,還有3d紋理,立方體貼圖和球面貼圖等,手機上估計只有1d和2d;
pname設置環繞方式;
param紋理過濾方式,如線性過濾和雙線性插值等

pname:
GL_TEXTURE_MIN_FILTER 設置最小過濾,
GL_TEXTURE_MAG_FILTER設置最大過濾,

GL_TEXTURE_WRAP_S;紋理座標一般用str表示,分別對應xyz,2d紋理用st表示,基本是GL_REPEAT的值
GL_TEXTURE_WRAP_T   接上面,紋理和你畫的幾何體可能不是完全一樣大的,在邊界的時候如何處理呢?就是這兩個參數決定的,wrap表示環繞,可以理解成讓紋理重複使用,直到全部填充完成;基本是GL_REPEAT
param;與第二個參數配合使用,一般取GL_LINEAR和GL_NEAREST,過濾形式

GL_LINEAR:像素中心最近4個紋理座標元素的加權平均值

GL_NEAREST:返回舉例紋理像素中心最近的紋理元素

 

glTranslatef

publicvoid 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

publicvoid glTranslatex(int x,int y,int z)

功能

glTranslatef方法的修正方法。

glVertexPointer

publicvoid 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

publicvoid 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——指明視口矩形的左下角x座標,初始值爲0。

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

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

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

gluLookat

public static void gluLookAt (GL10 gl, float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ)

Added in API level 1

根據視角點。視圖中心,和觀察者本身的方向來定義一個視圖轉化。

Parameters

gl

a GL10 interface

eyeX

 

eyeY

 

eyeZ

(eyeX,eyeY,eyeZ)爲眼睛即視角點的位置

centerX

 

centerY

 

centerZ

(centerX,centerY,centerZ)爲所要觀察的視圖的一箇中心點

upX

 

upY

 

upZ

(upX,upY,upZ)表示的是觀察者人的方向,如(0,1,0)表示人是正立方向,y軸方向表示人是站立的方向

 

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