版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本章內(nèi)容OpenGL ES中的清屏函數(shù)glClear繪制三角形的方法:glVertexPointer,glDrawArrays第一個(gè)opengl es圖形Opengl ES投影和視窗的設(shè)置Opengl ES 中的矩陣分類矩陣操作相關(guān)的API:glLoadIdentity,glMatrixMode,glViewportOpengl ES中的透視投影:gluPerspective理解透視原理本章內(nèi)容Opengl ES能繪制的基本圖形繪制圖形的步驟繪制圖形API介紹:設(shè)置頂點(diǎn)緩存函數(shù)glVertexPointer開關(guān)頂點(diǎn)繪制狀態(tài)函數(shù)glEnableClientState,glDisableClien
2、tState圖形繪制函數(shù)glDrawArrays,glDrawElementsOpenGL ES中的清屏函數(shù)gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);函數(shù)說明:清除顏色緩沖以及深度緩沖參數(shù)解釋:GL_COLOR_BUFFER_BIT:顏色緩沖GL_DEPTH_BUFFER_BIT:深度緩沖繪制三角形的方法glVertexPointer(int size,int type,int stride,Buffer pointer)函數(shù)函數(shù) 指定頂點(diǎn)數(shù)組參數(shù)說明:size: 每個(gè)頂點(diǎn)坐標(biāo)維數(shù),可以為2,3,4。type
3、: 頂點(diǎn)的數(shù)據(jù)類型,可以為GL_BYTE, GL_SHORT, GL_FIXED,或 GL_FLOAT,缺省為浮點(diǎn)類型GL_FLOAT。stride: 每個(gè)相鄰頂點(diǎn)之間在數(shù)組中的間隔(字節(jié)數(shù)),缺省為0,表示頂點(diǎn)存儲(chǔ)之間無(wú)間隔。pointer: 存儲(chǔ)頂點(diǎn)的數(shù)組。應(yīng)用上可以將頂點(diǎn)的顏色值存放在對(duì)應(yīng)頂點(diǎn)后面,如下圖,RGB 采用4 字節(jié)表示,此時(shí)相鄰頂點(diǎn)就不是連續(xù)存放的,stride 值為4glDrawArrays(int mode,int first ,int count)參數(shù):mode 指定你要繪制何種圖元, opengl 中的圖元就這幾個(gè): GL_POINTS, GL_LINE_STRIP,
4、GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES. first 在已制定的數(shù)組中的開始位置(索引位置)count 點(diǎn)的繪制次數(shù), 比如我們繪制一個(gè)三角形,就是繪制三個(gè)頂點(diǎn),即此參數(shù)為 3。出于性能的考慮。繪制前先開啟glEnableClientState(GL10.GLVERTEXARRAY),不用了再關(guān)閉:, glDisableClientState(GL10.GLVERTEXARRAY).開啟頂點(diǎn)繪制狀態(tài)glEnableClientState(GL10.GL_VERTEX_ARRAY);Void
5、 glColorPointer(int size, int type, int stride, Buffer pointer)大小每種顏色組件的數(shù)量。 值必須為 3 或 4。類型 顏色數(shù)組中的每個(gè)顏色分量的數(shù)據(jù)類型。 使用下列常量指定可接受的數(shù)據(jù)類型: GL_BYTE GL_UNSIGNED_BYTE,GL_SHORT GL_UNSIGNED_SHORT,GL_INT GL_UNSIGNED_INT,GL_FLOAT,或 GL_DOUBLE。開啟頂點(diǎn)繪制狀態(tài)Void glColorPointer(int size, int type, int stride, Buffer pointer)跨越
6、 連續(xù)顏色之間的字節(jié)偏移量。 當(dāng) 邁進(jìn) 為零時(shí),緊緊地包裝顏色的數(shù)組中。指針 顏色顏色數(shù)組中的第一個(gè)元素的第一個(gè)組件的指針。第一個(gè)opengl es圖形OpenGL ES提供了兩類方法來(lái)繪制圖形:public void glDrawArrays(int mode, int first, int count) 使用VetexBuffer 來(lái)繪制,頂點(diǎn)的順序由vertexBuffer中的順序指定。public void glDrawElements(int mode, int count, int type, Buffer indices) ,可以重新定義頂點(diǎn)的順序,頂點(diǎn)的順序由indices B
7、uffer 指定。glDrawArrays(int mode,int first ,int count)參數(shù):mode 指定你要繪制何種圖元, opengl 中的圖元就這幾個(gè): GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES. 其中mode 為上述解釋頂點(diǎn)的模式。下面定義了OpenGL ES定義的幾種模式:GL_POINTS繪制獨(dú)立的點(diǎn)。GL_LINE_STRIP繪制一系列線段。GL_LINE_LOOP類同上,但是首尾相連,構(gòu)成一個(gè)封閉曲線。GL
8、_LINES頂點(diǎn)兩兩連接,為多條線段構(gòu)成。GL_TRIANGLES每隔三個(gè)頂點(diǎn)構(gòu)成一個(gè)三角形,為多個(gè)三角形組成。GL_TRIANGLE_STRIP每相鄰三個(gè)頂點(diǎn)組成一個(gè)三角形,為一系列相接三角形構(gòu)成。GL_TRIANGLE_FAN以一個(gè)點(diǎn)為三角形公共頂點(diǎn),組成一系列相鄰的三角形。 void glDrawElements(int mode, int count, int type, Buffer indices) ,可以重新定義頂點(diǎn)的順序,mode同glDrawArrays第一個(gè)參數(shù)count為頂點(diǎn)索引的個(gè)數(shù)type為索引值的類型,只能是下列值之一:GL_UNSIGNED_BYTE, GL_UN
9、SIGNED_SHORT,頂點(diǎn)索引的順序由indices Buffer 指定。比如繪制一個(gè)矩形:private short indices = 0, 1, 2, 0, 2, 3 ;ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);ibb.order(ByteOrder.nativeOrder();ShortBuffer indexBuffer = ibb.asShortBuffer();indexBuffer.put(indices);indexBuffer.position(0);gl.glDrawElements(
10、GL10.GL_TRIANGLES,6 , GL10.GL_UNSIGNED_SHORT, indexBuffer);關(guān)閉頂點(diǎn)繪制狀態(tài)glDisableClientState(GL10.GL_VERTEX_ARRAY);Opengl ES 中的矩陣分類GL_PROJECTION 投影矩陣GL_MODELVIEW 視景矩陣GL_TEXTURE 紋理矩陣glLoadIdentity()將當(dāng)前的用戶坐標(biāo)系的原點(diǎn)移到了屏幕中心:類似于一個(gè)復(fù)位操作1.X坐標(biāo)軸從左至右,Y坐標(biāo)軸從下至上,Z坐標(biāo)軸從里至外。2.OpenGL屏幕中心的坐標(biāo)值是X和Y軸上的0.0f點(diǎn)。3.x軸中心左面的坐標(biāo)值是負(fù)值,右面是正值
11、。 Y軸移向屏幕頂端是正值,移向屏幕底端是負(fù)值。 Z軸移入屏幕深處是負(fù)值,移出屏幕則是正值。glMatrixMode函數(shù)可設(shè)置當(dāng)前矩陣模式:glMatrixMode(int)GL_MODELVIEW,對(duì)模型視景矩陣堆棧應(yīng)用隨后的矩陣操作.GL_PROJECTION,對(duì)投影矩陣應(yīng)用隨后的矩陣操作.GL_TEXTURE,對(duì)紋理矩陣堆棧應(yīng)用隨后的矩陣操作.該函數(shù)一般與glLoadIdentity()一同使用glLoadIdentity():該函數(shù)的功能是重置當(dāng)前指定的矩陣為單位矩陣。Opengl ES中的透視投影OpenGL ES圖形庫(kù)最終的結(jié)果是在二維平面上顯示3D物體(常稱作模型Model)這是
12、因?yàn)槟壳暗拇蟛糠诛@示器還只能顯示二維圖形。但我們?cè)跇?gòu)造3D模型時(shí)必須要有空間現(xiàn)象能力,所有對(duì)模型的描述還是使用三維坐標(biāo)。也就是使用3D建模,而有OpenGL ES庫(kù)來(lái)完成從3D模型到二維屏幕上的顯示。如果我們使用照相機(jī)拍照的過程做類比,可以更好的理解3D模型到二維屏幕上的顯示過程。Viewportviewport(顯示區(qū)域)為一個(gè)長(zhǎng)方形區(qū)域,并且使用屏幕坐標(biāo)系來(lái)定義:OpenGL ES 中使用glViewport() 來(lái)定義顯示視窗的大小和位置:glViewport(int x, int y, int width, int height)一般情況下,將viewport 設(shè)置成和顯示屏幕大小一致
13、。gl.glViewport(0, 0, width, height);我們?cè)谑纠a的OpenGLRenderer的onSurfaceChanged 使用和屏幕一樣大小的區(qū)域作為Viewport,你也可以通過glViewport將視窗設(shè)成屏幕的局部某個(gè)區(qū)域。 透視投影的特點(diǎn)是“近大遠(yuǎn)小”,也就是我們眼睛日??吹降氖澜纭penGL ES定義透視投影的函數(shù)為glFrustum():Android OpenGL ES提供了一個(gè)輔助方法gluPerspective()來(lái)定義一個(gè)透視投影變換。注意:使用該函數(shù)時(shí),需要將矩陣切換為GL_PROJECTION。public static void glu
14、Perspective(GL10 gl, float fovy, float aspect, float zNear, float zFar)fovy: 定義視角的view angle.aspect: 定義視窗的寬高比。zNear: 定義裁剪面的近距離。zFar: 定義創(chuàng)建面的遠(yuǎn)距離。如果投影變換的寬度/高度比 (aspect) 和最后的Viewport 的width/height 比不一致的話,最后顯示的圖形就可能需要拉伸以適應(yīng)Viewport,從而可能造成圖像變形。比如:現(xiàn)在的電視的顯示模式有4:3 和 16:9 或是其它模式,如果使用16:9的模式來(lái)顯示原始寬高比為4:3的視頻,圖像就有
15、變形。一般設(shè)置為:GLU.gluPerspective(gl, 45.0f, (float)width / (float)height, 0.1f, 100.0f);理解透視原理理解透視原理我們知道,遠(yuǎn)處的東西看起來(lái)要小一些,近處的東西看起來(lái)會(huì)大一些,這就是透視原理假設(shè)那兩條線表示公路,理論上講,它們的兩條邊是平行的,但現(xiàn)實(shí)情況中,它們?cè)谶h(yuǎn)方(可以無(wú)限遠(yuǎn))總要相交于一點(diǎn),實(shí)際線段AB的長(zhǎng)度=CD的長(zhǎng)度,只是在此例中使用了透視角,故會(huì)有如上的效果。結(jié)合我們剛才這兩個(gè)函數(shù)zNear,眼睛距離近處的距離,假設(shè)為10米遠(yuǎn),請(qǐng)不要設(shè)置為負(fù)值z(mì)Far表示遠(yuǎn)處的裁面,假設(shè)為1000米遠(yuǎn),就是這兩個(gè)參數(shù)的意義了,再解釋下那個(gè)“眼睛睜開的角度”是什么意思,首先假設(shè)我們現(xiàn)在距離物體有50個(gè)單位距離遠(yuǎn)的位置,在眼睛睜開角度設(shè)置為45時(shí),如圖:我們可以看到,在遠(yuǎn)處一個(gè)球,現(xiàn)在我們將眼睛再?gòu)堥_點(diǎn)看,將眼睛睜開的角度設(shè)置為178(180度表示平角,那時(shí)候我們將什么也看不到,眼睛睜太大了)我們只看到一個(gè)點(diǎn) 因?yàn)槲覀兛吹姆秶罅?這個(gè)球本身大小沒有改變,但是它在我們的視界內(nèi)太小了,反之,我們將眼睛閉小些,改為1度看看會(huì)出現(xiàn)什么情況呢?public void onSurfaceChanged(GL10 gl, int width, int height) gl.glViewpo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新能源企業(yè)聘用合同范本4篇
- 二零二五年度人工智能輔助軟件服務(wù)合同模板2篇
- 二零二五美容院美容護(hù)理技術(shù)培訓(xùn)合同3篇
- 《短視頻編?。哼x題構(gòu)想+腳本制作+劇本策劃+鏡頭拍攝》課件 第5章 了解劇本:創(chuàng)作優(yōu)劇本的基礎(chǔ)
- 二零二五年度某局勞務(wù)分包結(jié)算與人才培養(yǎng)計(jì)劃合同4篇
- 二零二五農(nóng)機(jī)綠色生產(chǎn)技術(shù)研發(fā)與應(yīng)用合同4篇
- 二零二五年度棉被品牌授權(quán)生產(chǎn)及銷售合同4篇
- 二零二五年度智能制造名義合伙人合同4篇
- 二零二五版南京海事法院海洋石油開發(fā)合同4篇
- (必會(huì))公路水運(yùn)工程助理試驗(yàn)檢測(cè)師《交通工程》近年考試真題題庫(kù)(含答案解析)
- 安徽省定遠(yuǎn)重點(diǎn)中學(xué)2024-2025學(xué)年第一學(xué)期高二物理期末考試(含答案)
- 教育教學(xué)質(zhì)量經(jīng)驗(yàn)交流會(huì)上校長(zhǎng)講話:聚焦課堂關(guān)注個(gè)體全面提升教育教學(xué)質(zhì)量
- 2024人教新目標(biāo)(Go for it)八年級(jí)英語(yǔ)上冊(cè)【第1-10單元】全冊(cè) 知識(shí)點(diǎn)總結(jié)
- 劇本殺店長(zhǎng)合同范例
- 華中師范大學(xué)第一附中2025屆高考仿真模擬數(shù)學(xué)試卷含解析
- 農(nóng)村自建房施工合同模板
- GB/T 44731-2024科技成果評(píng)估規(guī)范
- 影視動(dòng)畫設(shè)計(jì)與制作合同
- 2023學(xué)年廣東省深圳實(shí)驗(yàn)學(xué)校初中部九年級(jí)(下)開學(xué)語(yǔ)文試卷
- 企業(yè)新員工培訓(xùn)師帶徒方案
- 2025屆河南省鄭州一中高三物理第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
評(píng)論
0/150
提交評(píng)論