版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
androidopengles什么是OpenGLOpenGLESOpenGLforEmbeddedSystem)OpenGLOpenGLESOpenGL標(biāo)準(zhǔn),以適應(yīng)如,PDA或其它消費(fèi)者移動(dòng)終端的顯示系統(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不兼容,是兩種完全不同的實(shí)現(xiàn)。OpenGLES管道(Pipeline)OpenGLES1.x的工序是固定的,稱為Fix-FunctionPipeline,可以想象一個(gè)帶有很多控制開(kāi)關(guān)的機(jī)器,盡管加工的工序是OpenGLES2.0允許提供編程來(lái)控制一些重要的工序,一些“繁瑣”的工序比如柵格化等仍然是固定的。(這些開(kāi)關(guān)被就是state,注意應(yīng)該盡量少的改變state,以免影響性能)管道“工序”TransformationStageRasterizationOpenGLES支持的基本圖形為點(diǎn)Point,線Line,Triangle,其它所有圖形都是通過(guò)這幾種基本幾何圖形組合而成Rasterizer來(lái)生成像素信息,稱為”Fragments“。對(duì)于Fragment在經(jīng)過(guò)TextureProcessingColorSumFog等處理并將最終處理結(jié)果存放在內(nèi)存中(稱為FrameBuffer)。OpenGL2.0ProgrammableOpenGLESAPI命名習(xí)定義的常量都以GL_為前綴。比如OpenGLES指令以gl開(kāi)頭,比如某些OpenGL3f4f結(jié)尾,34代表參數(shù)的個(gè)數(shù),f代表參數(shù)類型為浮點(diǎn)數(shù),如gl.glColor4f,i,x代表int如gl.glColor4x對(duì)應(yīng)以v結(jié)尾的OpenGLES(Vector),如8-bit整數(shù)對(duì)應(yīng)到byte類型,16-bit對(duì)應(yīng)到short類型,32-bit整數(shù)(包括GLFixed)int32-bit浮點(diǎn)數(shù)對(duì)應(yīng)到float類GL_TRUE,GL_FALSE對(duì)應(yīng)到booleanC字符串((char*))對(duì)應(yīng)到JavaUTF-8創(chuàng)建簡(jiǎn)單的opengles
基本幾何圖形定義OpenGLES支持繪制的基本幾何圖形分為三類:點(diǎn),線段,三角形。也就是說(shuō)OpenGLES只能繪制這三種基本幾何圖2D3D圖形都是通過(guò)這三種幾何圖形構(gòu)造而成的。OpenGLES voidglDrawArrays(intmode,intfirst,intcount)使用VetexBuffer來(lái)繪制,頂點(diǎn)的順序由vertexBuffer中的順序 voidglDrawElements(intmode,intcount,inttype,Bufferindices),可以重新定義頂點(diǎn)的順序,頂點(diǎn)的順序由indicesBuffer指定。mode列表:GL_POINTS繪制獨(dú)立的點(diǎn)、GL_LINE_STRIP繪制一條線段、GL_LINE_LOOP繪制一條封閉線段(首位相連)、GL_LINES繪制多條線段、GL_TRIANGLES繪制多個(gè)三角形(兩兩不相鄰)、GL_TRIANGLE_STRIP繪制多個(gè)三角形(兩兩相鄰)、GL_TRIANGLE_FAN以一個(gè)點(diǎn)為頂點(diǎn)繪制多個(gè)相鄰的三角形glEnableClientStateglDisableClientState可以控制的pipeline開(kāi)關(guān)可以有:GL_COLOR_ARRAY顏色),GL_NORMAL_ARRAY法線),GL_TEXTURE_COORD_ARRAY材質(zhì)GL_VERTEX_ARRAY(頂點(diǎn)),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。三維坐標(biāo)系及坐標(biāo)變換初步OpenGLES圖形庫(kù)最終的結(jié)果是在二維平3D物體,這個(gè)過(guò)程可以分成三個(gè)部分:坐標(biāo)變換,坐標(biāo)變換通過(guò)使用變換矩陣來(lái)描述,因此學(xué)習(xí)3D繪平移,縮放,正側(cè)投影,投影等。在最終繪制到顯示器(2D屏幕),需要建立起變換后的坐標(biāo)和屏幕像間的對(duì)應(yīng)關(guān)系,這通常稱為“視窗”坐標(biāo)變換(Viewport)如果我們使用照相機(jī)拍照的過(guò)程做類比,可以更好的理解3D坐標(biāo)變換拍照時(shí)第一步是架起三角架并把相機(jī)的鏡頭指向需要拍攝的場(chǎng)3D變換為viewingtransforation(平移或是選擇mera)如攝影師給架好三角架后給你拍照時(shí),可以要讓你調(diào)整站立3D繪制就是Modelingtransformation(調(diào)整3D繪圖則為Projectiontransformation(裁剪投影場(chǎng)景)。NDC),此時(shí)你可以使用縮放放大功能顯示的部分。對(duì)應(yīng)3D繪圖相當(dāng)于viewporttransformation(可以對(duì)最終的圖像對(duì)于Viewingtransformation(平移,選擇相機(jī))和Modeling在OpenGLES使用GL10.GL_MODELVIEW來(lái)同時(shí)指定viewingmatrixmodeling使用GL10.GL_PROJECTION指定投影變換,OpenGL支持透使用glViewportViewport通用的矩陣變換這里介紹對(duì)應(yīng)指定的坐標(biāo)系(比如viewmodelprojection或是AndroidOpenGLES14X4IdentityMatrixglMultMatrix*()允許指定任意矩陣和當(dāng)前矩陣glMatrixMode().OpenGLES可以運(yùn)行指定GL_PROJECTION,GL_MODELVIEW等坐標(biāo)系,后續(xù)的矩陣操glTranslatef(),glRotatef()方法public voidglTranslatef(floatx,floaty,floatz)用于方法public voidglRotatef(floatangle,floatx,floaty,floatz)用來(lái)實(shí)現(xiàn)選擇坐標(biāo)變換,單位為角度。(x,y,z)定義旋轉(zhuǎn)的參照矢量方方法public voidglScalef(floatx,floaty,floatz)用于縮放 voidglLoadIdentity() void和 voidglPopMatrix()在進(jìn)行坐標(biāo)變換的一個(gè)好習(xí)慣是在變換前使用glPushMatrix保存當(dāng)前矩陣,完成坐標(biāo)變換操作后,再調(diào)用glPopMatrix恢復(fù)原先的矩陣設(shè)置。ViewingModeling(MODELVIEW)變ndroidOpenGLES的GLU包有一個(gè)輔助函數(shù)gluLookAt提供一個(gè)更直觀的方法來(lái)設(shè)置modelview變換矩陣:voidgluLookAt(GL10gl,floateyeX,floateyeY,floateyeZ,floatcenterX,floatcenterY,floatcenterZ,floatupX,floatupY,floatupZ)eyex,eyey,eyeztarx,tary,tarzupx,upy,upz指定觀測(cè)點(diǎn)方向?yàn)椤吧稀钡南蛄俊O旅娲a設(shè)置當(dāng)前Matrix模式為Projection投影矩陣:OpenGLES可以使用兩種不同的投影變換:投影(Projection)和正側(cè)投影(OrthographicProjection)。AndroidOpenGLES提供了一個(gè)輔助方法glu()可以更簡(jiǎn)單的來(lái)定GLU.glu(GL10gl,floatfovy,floataspect,floatzNear,floatzFar)fovy:定義視錐的viewaspect:zNear:zFar:正側(cè)投影(Orthographic定義3D模型的前面和后面下面代碼設(shè)置逆時(shí)針?lè)椒槊娴摹扒懊妗昂竺妗痹O(shè)置:gl.glEnable(GL10.GL_CULL_FACE);然后明確指FrameBuffer、DepthBufferOpenGLES中的FrameBuffer指的是存1280X1024,如果屏幕支持24位真彩色(RGB),則這個(gè)屏幕區(qū)域的內(nèi)存至少需要1024X1280X3個(gè)字節(jié)。此外如果需要支持(Alpha),4在最終OpenGLES寫入這些Buffer時(shí),OpenGLES提供一些MaskColorBufferRGBADepthBuffer等,這些Mask函數(shù)可以打開(kāi)或是關(guān)閉某個(gè)通道,只有通道打開(kāi)后,對(duì)應(yīng)的分量才會(huì)寫入指定Buffer,比如你可以關(guān)閉紅色通道,這樣最后寫道ColorBuffer中就不含有紅色。OpenGLESDepthBuffer保存了像素與觀測(cè)點(diǎn)之間的距離信息,在3D圖形時(shí),將只繪制可見(jiàn)的面而不去繪制隱藏的面,這個(gè)過(guò)程叫”Hiddensurfaceremoval”,采用的算法為”ThedepthbufferThedepthbufferalgorithm在OpenGLES3D繪制的過(guò)程中這個(gè)算法是自動(dòng)被采用的,但是了解這個(gè)算法有助于理解OpenGLES部分API的使用。下面給出了OpenGLESDepthBuffergl.Clear(GL10.GL_DEPTH_BUFFER_BIT)DepthBuffer(1.0)DepthBufferColorBuffer同時(shí)進(jìn)行。gl.glClearDepthf(floatdepth)DepthBuffer是使用的1.0,通常無(wú)需改變這個(gè)值,gl.glEnable(GL10.GL_DEPTH_TEST)打開(kāi)depthgl.glDisable(GL10.GL_DEPTH_TEST)關(guān)閉depthOpenGL光照模3D效果,給場(chǎng)景中添加光源。如果沒(méi)有光照,繪出的球看OpenGL光照模型中最終的光照效果可以分為四個(gè)組成部分:Emitted(光源)ambient(環(huán)境光),diffuse(漫射光)specular(鏡面Emittedambient:環(huán)境光如果射到某個(gè)平面,其反射方向?yàn)樗蟹较?。Ambientdiffuse:當(dāng)一束平行的入射光線射到粗糙的表面時(shí),因面上凹凸不平,向不同的方向無(wú)規(guī)則地反射,這種反射稱之為“漫反射”或“漫射”方向。diffuse只依賴于光源的方向和法線的方向。specular:一般指物體被光源直射的高亮區(qū)域,也可以成為鏡面反射區(qū),如金屬。specular依賴于光源的方向,法線的方向和視角的方向。設(shè)置光照效果SetLightingOpenGLESAPIOpenGLES07OpenGLES平行光源(Parallellightsource),代表由位于無(wú)限遠(yuǎn)處均勻發(fā)光體,可以近似控制平行光源。點(diǎn)光源(Spotlightsource)如燈泡就是一個(gè)點(diǎn)光源,發(fā)出的光可360度,可以為點(diǎn)光源設(shè)置光衰減屬性(attenuation)或者0號(hào)光源:gl.glEnable(GL10.GL_LIGHT0);publicvoidglLightfv(intlight,intpname,FloatBufferpublicvoidglLightfv(intlight,intpname,float[]params,intpublicvoidglLightf(intlight,intpname,floatlight指光源的序號(hào),OpenGLES07共八個(gè)光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)為平行光的方向。法線是垂直于該平面的三維向量。曲面在某點(diǎn)P處的法線為垂直于該點(diǎn)切打開(kāi)法線數(shù)組publicvoidglNormal3f(floatnx,floatny,floatnz)為某個(gè)頂點(diǎn)設(shè)置法線:publicvoidglNormalPointer(inttype,intstride,Bufferpointer)type為Buffer的類型,可以為GL_BYTEGL_FIXED,stride:pointer:設(shè)置gl.glEnable(GL10.GL_RESCALE_NORMAL);設(shè)置物體材料光GL10.GL_A
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年外貿(mào)公司員工勞動(dòng)合同范本含社會(huì)保險(xiǎn)繳納
- 二零二五年度新材料研發(fā)項(xiàng)目投資合作居間協(xié)議合同范本
- 2025年度軟裝設(shè)計(jì)行業(yè)人才培養(yǎng)合同范本2篇
- 二零二五年度總經(jīng)理聘用合同:高端裝備制造業(yè)高層管理人員聘用合同
- 二零二五版農(nóng)村污水處理設(shè)施建設(shè)與運(yùn)維合同4篇
- 2025年度二零二五年度個(gè)人雇傭員工勞動(dòng)合同(遠(yuǎn)程工作)專項(xiàng)范本4篇
- 二零二五版門窗安裝與綠色建筑認(rèn)證合同7篇
- 2025年山地承包與生態(tài)保護(hù)一體化合同4篇
- 2025年度個(gè)人租賃合同規(guī)范樣本2篇
- 2025年度個(gè)人醫(yī)療貸款合同及費(fèi)用報(bào)銷清單4篇
- JB-T 8532-2023 脈沖噴吹類袋式除塵器
- 深圳小學(xué)英語(yǔ)單詞表(中英文)
- 護(hù)理質(zhì)量反饋內(nèi)容
- 山東省濟(jì)寧市2023年中考數(shù)學(xué)試題(附真題答案)
- 抖音搜索用戶分析報(bào)告
- 板帶生產(chǎn)工藝熱連軋帶鋼生產(chǎn)
- 鉆孔灌注樁技術(shù)規(guī)范
- 2023-2024學(xué)年北師大版必修二unit 5 humans and nature lesson 3 Race to the pole 教學(xué)設(shè)計(jì)
- 供貨進(jìn)度計(jì)劃
- 國(guó)際尿失禁咨詢委員會(huì)尿失禁問(wèn)卷表
- 彌漫大B細(xì)胞淋巴瘤護(hù)理查房
評(píng)論
0/150
提交評(píng)論