版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
androidopengles什么是OpenGLOpenGLESOpenGLforEmbeddedSystem)OpenGLOpenGLESOpenGL標準,以適應(yīng)如,PDA或其它消費者移動終端的顯示系統(tǒng)。KhronosGroupOpenGLESOpenGL與OpenGLES的關(guān)系OpenGLES是基于桌面版本OpenGLOpenGLES1.0基于OpenGL1.32003OpenGLES 基于OpenGL1.5,2004OpenGLES2.0基于 在2007年發(fā)OpenGL2.0向下兼容OpenGL1.5 而OpenGLES2.0和OpenGLES1.x不兼容,是兩種完全不同的實現(xiàn)。OpenGLES管道(Pipeline)OpenGLES1.x的工序是固定的,稱為Fix-FunctionPipeline,可以想象一個帶有很多控制開關(guān)的機器,盡管加工的工序是OpenGLES2.0允許提供編程來控制一些重要的工序,一些“繁瑣”的工序比如柵格化等仍然是固定的。(這些開關(guān)被就是state,注意應(yīng)該盡量少的改變state,以免影響性能)管道“工序”TransformationStageRasterizationOpenGLES支持的基本圖形為點Point,線Line,Triangle,其它所有圖形都是通過這幾種基本幾何圖形組合而成Rasterizer來生成像素信息,稱為”Fragments“。對于Fragment在經(jīng)過TextureProcessingColorSumFog等處理并將最終處理結(jié)果存放在內(nèi)存中(稱為FrameBuffer)。OpenGL2.0ProgrammableOpenGLESAPI命名習定義的常量都以GL_為前綴。比如OpenGLES指令以gl開頭,比如某些OpenGL3f4f結(jié)尾,34代表參數(shù)的個數(shù),f代表參數(shù)類型為浮點數(shù),如gl.glColor4f,i,x代表int如gl.glColor4x對應(yīng)以v結(jié)尾的OpenGLES(Vector),如8-bit整數(shù)對應(yīng)到byte類型,16-bit對應(yīng)到short類型,32-bit整數(shù)(包括GLFixed)int32-bit浮點數(shù)對應(yīng)到float類GL_TRUE,GL_FALSE對應(yīng)到booleanC字符串((char*))對應(yīng)到JavaUTF-8創(chuàng)建簡單的opengles
基本幾何圖形定義OpenGLES支持繪制的基本幾何圖形分為三類:點,線段,三角形。也就是說OpenGLES只能繪制這三種基本幾何圖2D3D圖形都是通過這三種幾何圖形構(gòu)造而成的。OpenGLES voidglDrawArrays(intmode,intfirst,intcount)使用VetexBuffer來繪制,頂點的順序由vertexBuffer中的順序 voidglDrawElements(intmode,intcount,inttype,Bufferindices),可以重新定義頂點的順序,頂點的順序由indicesBuffer指定。mode列表:GL_POINTS繪制獨立的點、GL_LINE_STRIP繪制一條線段、GL_LINE_LOOP繪制一條封閉線段(首位相連)、GL_LINES繪制多條線段、GL_TRIANGLES繪制多個三角形(兩兩不相鄰)、GL_TRIANGLE_STRIP繪制多個三角形(兩兩相鄰)、GL_TRIANGLE_FAN以一個點為頂點繪制多個相鄰的三角形glEnableClientStateglDisableClientState可以控制的pipeline開關(guān)可以有:GL_COLOR_ARRAY顏色),GL_NORMAL_ARRAY法線),GL_TEXTURE_COORD_ARRAY材質(zhì)GL_VERTEX_ARRAY(頂點),GL_POINT_SIZE_ARRAY_OES等。glColorPointer(intsize,inttype,intstride,Bufferpointer)glVertexPointer(intsize,inttype,intstride,Bufferpointer)glTexCoordPointer(intsize,inttype,intstride,Bufferpointer)glNormalPointer(inttype,intstride,Bufferpointer)OpenGLES內(nèi)部存放圖形數(shù)據(jù)的BufferCOLOR,DEPTH深度信息)COLOR和DEPTHBuffer。三維坐標系及坐標變換初步OpenGLES圖形庫最終的結(jié)果是在二維平3D物體,這個過程可以分成三個部分:坐標變換,坐標變換通過使用變換矩陣來描述,因此學習3D繪平移,縮放,正側(cè)投影,投影等。在最終繪制到顯示器(2D屏幕),需要建立起變換后的坐標和屏幕像間的對應(yīng)關(guān)系,這通常稱為“視窗”坐標變換(Viewport)如果我們使用照相機拍照的過程做類比,可以更好的理解3D坐標變換拍照時第一步是架起三角架并把相機的鏡頭指向需要拍攝的場3D變換為viewingtransforation(平移或是選擇mera)如攝影師給架好三角架后給你拍照時,可以要讓你調(diào)整站立3D繪制就是Modelingtransformation(調(diào)整3D繪圖則為Projectiontransformation(裁剪投影場景)。NDC),此時你可以使用縮放放大功能顯示的部分。對應(yīng)3D繪圖相當于viewporttransformation(可以對最終的圖像對于Viewingtransformation(平移,選擇相機)和Modeling在OpenGLES使用GL10.GL_MODELVIEW來同時指定viewingmatrixmodeling使用GL10.GL_PROJECTION指定投影變換,OpenGL支持透使用glViewportViewport通用的矩陣變換這里介紹對應(yīng)指定的坐標系(比如viewmodelprojection或是AndroidOpenGLES14X4IdentityMatrixglMultMatrix*()允許指定任意矩陣和當前矩陣glMatrixMode().OpenGLES可以運行指定GL_PROJECTION,GL_MODELVIEW等坐標系,后續(xù)的矩陣操glTranslatef(),glRotatef()方法public voidglTranslatef(floatx,floaty,floatz)用于方法public voidglRotatef(floatangle,floatx,floaty,floatz)用來實現(xiàn)選擇坐標變換,單位為角度。(x,y,z)定義旋轉(zhuǎn)的參照矢量方方法public voidglScalef(floatx,floaty,floatz)用于縮放 voidglLoadIdentity() void和 voidglPopMatrix()在進行坐標變換的一個好習慣是在變換前使用glPushMatrix保存當前矩陣,完成坐標變換操作后,再調(diào)用glPopMatrix恢復原先的矩陣設(shè)置。ViewingModeling(MODELVIEW)變ndroidOpenGLES的GLU包有一個輔助函數(shù)gluLookAt提供一個更直觀的方法來設(shè)置modelview變換矩陣:voidgluLookAt(GL10gl,floateyeX,floateyeY,floateyeZ,floatcenterX,floatcenterY,floatcenterZ,floatupX,floatupY,floatupZ)eyex,eyey,eyeztarx,tary,tarzupx,upy,upz指定觀測點方向為“上”的向量。下面代碼設(shè)置當前Matrix模式為Projection投影矩陣:OpenGLES可以使用兩種不同的投影變換:投影(Projection)和正側(cè)投影(OrthographicProjection)。AndroidOpenGLES提供了一個輔助方法glu()可以更簡單的來定GLU.glu(GL10gl,floatfovy,floataspect,floatzNear,floatzFar)fovy:定義視錐的viewaspect:zNear:zFar:正側(cè)投影(Orthographic定義3D模型的前面和后面下面代碼設(shè)置逆時針方法為面的“前面“后面”設(shè)置:gl.glEnable(GL10.GL_CULL_FACE);然后明確指FrameBuffer、DepthBufferOpenGLES中的FrameBuffer指的是存1280X1024,如果屏幕支持24位真彩色(RGB),則這個屏幕區(qū)域的內(nèi)存至少需要1024X1280X3個字節(jié)。此外如果需要支持(Alpha),4在最終OpenGLES寫入這些Buffer時,OpenGLES提供一些MaskColorBufferRGBADepthBuffer等,這些Mask函數(shù)可以打開或是關(guān)閉某個通道,只有通道打開后,對應(yīng)的分量才會寫入指定Buffer,比如你可以關(guān)閉紅色通道,這樣最后寫道ColorBuffer中就不含有紅色。OpenGLESDepthBuffer保存了像素與觀測點之間的距離信息,在3D圖形時,將只繪制可見的面而不去繪制隱藏的面,這個過程叫”Hiddensurfaceremoval”,采用的算法為”ThedepthbufferThedepthbufferalgorithm在OpenGLES3D繪制的過程中這個算法是自動被采用的,但是了解這個算法有助于理解OpenGLES部分API的使用。下面給出了OpenGLESDepthBuffergl.Clear(GL10.GL_DEPTH_BUFFER_BIT)DepthBuffer(1.0)DepthBufferColorBuffer同時進行。gl.glClearDepthf(floatdepth)DepthBuffer是使用的1.0,通常無需改變這個值,gl.glEnable(GL10.GL_DEPTH_TEST)打開depthgl.glDisable(GL10.GL_DEPTH_TEST)關(guān)閉depthOpenGL光照模3D效果,給場景中添加光源。如果沒有光照,繪出的球看OpenGL光照模型中最終的光照效果可以分為四個組成部分:Emitted(光源)ambient(環(huán)境光),diffuse(漫射光)specular(鏡面Emittedambient:環(huán)境光如果射到某個平面,其反射方向為所有方向。Ambientdiffuse:當一束平行的入射光線射到粗糙的表面時,因面上凹凸不平,向不同的方向無規(guī)則地反射,這種反射稱之為“漫反射”或“漫射”方向。diffuse只依賴于光源的方向和法線的方向。specular:一般指物體被光源直射的高亮區(qū)域,也可以成為鏡面反射區(qū),如金屬。specular依賴于光源的方向,法線的方向和視角的方向。設(shè)置光照效果SetLightingOpenGLESAPIOpenGLES07OpenGLES平行光源(Parallellightsource),代表由位于無限遠處均勻發(fā)光體,可以近似控制平行光源。點光源(Spotlightsource)如燈泡就是一個點光源,發(fā)出的光可360度,可以為點光源設(shè)置光衰減屬性(attenuation)或者0號光源:gl.glEnable(GL10.GL_LIGHT0);publicvoidglLightfv(intlight,intpname,FloatBufferpublicvoidglLightfv(intlight,intpname,float[]params,intpublicvoidglLightf(intlight,intpname,floatlight指光源的序號,OpenGLES07共八個光pname:光源參數(shù)名稱,可以有如下:GL_SPOT_EXPONENT,GL_CONSTANT_ATTENUATION,GL_LINEAR_ATTENUATION,GL_QUADRATIC_ATTENUATION,GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR,GL_SPOT_DIRECTION,params參數(shù)的值(數(shù)組或是Buffer類型)指定光源的位置的參數(shù)為GL_POSITION,值為(x,y,z,w)w設(shè)0.0,(x,y,z)為平行光的方向。法線是垂直于該平面的三維向量。曲面在某點P處的法線為垂直于該點切打開法線數(shù)組publicvoidglNormal3f(floatnx,floatny,floatnz)為某個頂點設(shè)置法線:publicvoidglNormalPointer(inttype,intstride,Bufferpointer)type為Buffer的類型,可以為GL_BYTEGL_FIXED,stride:pointer:設(shè)置gl.glEnable(GL10.GL_RESCALE_NORMAL);設(shè)置物體材料光GL10.GL_A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年獼猴桃樹種子種質(zhì)資源保護與利用合同4篇
- 二零二五年度面包磚市場推廣與銷售渠道建設(shè)合同4篇
- 二零二五年度環(huán)保設(shè)備技術(shù)改造與維護合同4篇
- 二零二五年度乘風破浪或有事的動態(tài)環(huán)保技術(shù)開發(fā)合同4篇
- 2025年度面包磚生產(chǎn)線自動化改造合同范本3篇
- 2025年度奶業(yè)廢棄物處理與資源化利用合同3篇
- 二零二五版智能門禁管理系統(tǒng)集成服務(wù)合同協(xié)議4篇
- 二零二五年度辦公用品采購合同范本樣本3篇
- 2025年度軟件質(zhì)量控制合同協(xié)議4篇
- 專屬2024版員工離職合同模板
- 2024年公證遺產(chǎn)繼承分配協(xié)議書模板
- 燃氣經(jīng)營安全重大隱患判定標準課件
- JB-T 8532-2023 脈沖噴吹類袋式除塵器
- 深圳小學英語單詞表(中英文)
- 護理質(zhì)量反饋內(nèi)容
- 山東省濟寧市2023年中考數(shù)學試題(附真題答案)
- 抖音搜索用戶分析報告
- 鉆孔灌注樁技術(shù)規(guī)范
- 2023-2024學年北師大版必修二unit 5 humans and nature lesson 3 Race to the pole 教學設(shè)計
- 供貨進度計劃
- 彌漫大B細胞淋巴瘤護理查房
評論
0/150
提交評論