




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第七章第七章 多媒體開發多媒體開發本章主要內容本章主要內容u 音頻u 視頻u 使用Path類繪制2D圖形u 使用OpenGL ES繪制3D圖形多媒體開發 多媒體即Multimedia,它的含義是:在計算機系統中組合兩種或兩種以上媒體的一種人機交互式的信息交流方式,這些媒體包括文字、圖片、照片、聲音、動畫和影片等等。從多媒體的概念提出到今天,它的應用領域已經涉及了諸如廣告、藝術、教育、娛樂、工程、醫藥、商業及科學研究等行業,尤其是網絡技術日益發達的今天,多媒體在網頁上也得到了很多的應用,正因為有了多媒體的應用,使得應用程序從以前單調乏味的形式發展到今天這樣豐富多彩的形式。本章就是來介紹如何在An
2、droid上應用多媒體,達到讓應用程序美觀、易用并且具有吸引力的效果。音頻 在我們的世界里面,聲音是必不可少的元素,你能想象缺少聲音的世界嗎?顯然,沒有聲音的世界是黑白的,毫無精彩可言的。對于我們的Android開發也是同樣的道理,下面我們就學習如何在程序中加入音頻文件,使我們的程序精彩起來。 Android支持的音頻格有:AAC, WAV, MP3, WMA, OGG, MIDI。在模擬器上只支持OGG,WAV和MP3格式。播放音頻 借助于Android提供的MediaPlayer類可以快速的完成播放一段音頻的代碼實現,創建方式有兩種,第一種是使用靜態方法MediaPlayer.create
3、創建,通過參數使播放器與資源相關聯起來,再使用start()方法開始播放指定的音頻文件,代碼如下:MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.tmp); mediaPlayer.start();播放音頻 二是使用構造方法MediaPlayer()創建一個播放器對象,然后使用播放器的setDataSource()方法將音頻資源相關聯,與靜態方法創建播放器不同的是,使用構造方法創建的播放器還需要首先使用prepare()方法,然后再使用start()方法開始播放,否則會拋出一個播放器狀態不正常的異常。代碼如下:MediaPlay
4、er mp = new MediaPlayer();mp.setDataSource(PATH_TO_FILE);mp.prepare();mp.start();錄制音頻 錄制音頻資源最方便的方式是使用MediaRecorder類,通過設置錄制音頻來源(通常是設備默認的麥克風)就能方便的錄制語音,具體包括如下一些步驟:1. new一個android.media.MediaRecorder實例;2. 使用MediaRecorder.setAudioSource()方法來設置音頻資源;這將會很可能使用到MediaRecorder.AudioSource.MIC;3. 使用MediaRecorder
5、.setOutputFormat()方法設置輸出文件格式;4. 用MediaRecorder.setAudioEncoder()方法來設置音頻編碼;5. 使用setOutputFile()方法設置輸出的音頻文件;6. 最后,使用prepare()和start()方法開始錄制音頻,通過stop()和release()方法完成一段音頻的錄制。錄制音頻代碼示例/* 實例化MediaRecorder對象 */recorder = new MediaRecorder();/* 設置麥克風 */recorder.setAudioSource(MediaRecorder.AudioSource.MIC);/
6、* 設置輸出文件的格式 */recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);/* 設置音頻文件的編碼 */recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);/* 設置輸出文件的路徑 */recorder.setOutputFile(mRecAudioFile.getAbsolutePath();/* 準備 */recorder.prepare();/* 開始 */recorder.start();/* 停止錄音 */recorder.stop();/
7、* 釋放MediaRecorder */ recorder.release();錄制音頻注意 由于錄制音頻需要使用麥克風,因此需要在AndroidManifest.xml文件中聲明使用麥克風的權限:視頻 Android原生系統所支持解碼的視頻編碼格式有:H.263(后綴.3gp和.mp4)、H.264 AVC(3.0+版本,后綴.3gp和.mp4等等)、MPEG-4 SP(后綴.3gp)和VP8(2.3.3+版本,后綴.webm),其中H.263和H.264是Android支持的編碼格式。 與音頻的使用方式非常相似,不同點是音頻本身并不會表現為用戶界面,而視頻則需要成為用戶界面的一部分,視頻播
8、放只要使用VideoView類就可以實現,而視頻錄制也是借助于MediaRecorder類,不同之處是此處的數據來源由麥克風變為攝像頭,另外再將輸出格式及編碼方式做相應修改即可,當然,為了實現有實用性的視頻錄制功能,還需要增加一個用于顯示實時錄制圖像的視圖。播放視頻 使用VideoView播放視屏的代碼如下,還包括了使用系統提供的播放控制器MediaController與VideoView進行綁定,從而控制視頻的播放/暫停、快進/快退的簡單操作。Context context = getApplicationContext();VideoView mVideoView = new VideoV
9、iew(context);mVideoView = (VideoView) findViewById(R.id.surface_view);mVideoView.setVideoURI(Uri.parse(path);MediaController mc = new MediaController(this);mc.setAnchorView(mVideoView);mVideoView.setMediaController(mc);mVideoView.requestFocus(); mVideoView.start();錄制視頻 錄制視頻的基本實現與錄制音頻的方式相似,但是出于可用性方面的
10、考慮,需要提供一個實時觀察錄制區域的顯示。通過示例項目VideoRecordDemo來進行講解。 為了實現對攝像頭捕獲圖像的預覽,實現了一個Preview類,該類繼承自SurfaceView并實現了SurfaceHolder.Callback接口,SurfaceView可以理解為可嵌入到界面布局中的一塊用于圖像繪制的區域,這種View通常用于攝像頭預覽、游戲界面、3D繪圖等等,VideoView就是SurfaceView的一個子類。每一個SurfaceView都有一個與之綁定的SurfaceHolder類對象用于控制SurfaceView的一些屬性,可以通過SurfaceView的getHol
11、der()方法獲取到SurfaceHolder實例,SurfaceHolder.Callback接口則提供了用于在SurfaceView創建、更改和被銷毀時所調用的回調方法,通過實現這個接口來進行SurfaceView的初始化,更新及銷毀的工作。錄制視頻Preview類 Preview類主要就是實現了SurfaceHolder.Callback接口的三個回調方法,并且加入了用于監聽開始錄制和停止錄制的按鍵事件方法,以及用于控制視頻開始錄制和停止錄制的方法。下面是Preview類的一些變量和構造函數。publicpublic classclass Preview extendsextends S
12、urfaceView implementsimplements SurfaceHolder.Callback privateprivate SurfaceHolder holder = nullnull; privateprivate staticstatic booleanboolean isRecording = falsefalse; /* 錄制的視頻文件名及存放路徑 */ privateprivate File mRecVideoFile; privateprivate File mRecVideoPath; /* MediaRecorder對象 */ privateprivate M
13、ediaRecorder mMediaRecorder; /* 錄制視頻文件名的前綴 */ privateprivate String strTempFile = A_VideoRecordTest_; publicpublic Preview(Context context) supersuper(context); holder = thisthis.getHolder();/獲取SurfaceHolder對象 holder.addCallback(thisthis);/添加回調接口 holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFER
14、S);/緩沖類型 holder.setFixedSize(400, 300);/設置視圖大小 錄制視頻Preview類surfaceCreated()方法,初始化視頻預覽界面。publicpublic voidvoid surfaceCreated(SurfaceHolder holder) ifif(mMediaRecorder=nullnull)mRecVideoFile = newnew File(/mnt/sdcard/VideoRecordTempFile.3gp);mMediaRecorder = newnew MediaRecorder();mMediaRecorder.setV
15、ideoSource(MediaRecorder.VideoSource.CAMERA); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.
16、H263);mMediaRecorder.setOutputFile(mRecVideoFile.getAbsolutePath();mMediaRecorder.setPreviewDisplay(holder.getSurface();trytry mMediaRecorder.prepare(); catchcatch (IllegalStateException e) e.printStackTrace(); catchcatch (IOException e) e.printStackTrace(); 錄制視頻Preview類onKeyDown()方法,處理鍵被按下的事件。publi
17、cpublic booleanboolean onKeyDown(intint keyCode, KeyEvent event) switch switch(keyCode) casecase KeyEvent.KEYCODE_DPAD_CENTER: /方向導航鍵中鍵 if if(mMediaRecorder !=nullnull) ifif(isRecording) finishRecordVideo(); isRecording = falsefalse; elseelse startRecordVideo(); isRecording = truetrue; breakbreak; c
18、asecase KeyEvent.KEYCODE_BACK: System.exit(0); returnreturn supersuper.onKeyDown(keyCode, event); 錄制視頻Preview類startRecordVideo()方法,開始錄制視頻(保存視頻文件)。publicpublic voidvoid startRecordVideo() try try /* 創建視頻文件 */ mRecVideoFile = File.createTempFile(strTempFile, .3gp, mRecVideoPath); /* 設置輸出文件的路徑 */ mMedi
19、aRecorder.setOutputFile(mRecVideoFile.getAbsolutePath(); mMediaRecorder.setPreviewDisplay(holder.getSurface(); /* 準備 */ mMediaRecorder.prepare(); /* 開始 */ mMediaRecorder.start(); catchcatch (IOException e) e.printStackTrace(); 實現了Preview之后,在主Activity中使用setContentView()方法將視圖設置為Preview即可。使用Path類繪制2D圖形
20、 Android提供了Path類用于繪制2D圖形,Path類簡單來說就是封裝了一系列由線段(方形、多邊形等)、2次曲線(圓、橢圓等)和3次曲線復合而成的幾何軌跡集合的類,借助于Canvas的drawPath(path, paint)方法可以將這些軌跡集合繪制出來,這里面另外一個paint參數則是用于設置畫筆風格,例如當使用此方法繪制一個圓時,若paint的風格為filled,則會繪制一個實心圓,若風格為stroked,則會繪制一個空心圓,還可以使用paint在path中加入文字。Path類基本方法Path提供了很多繪制基本圖形的方法,例如:u addArc():用于繪制一段圓弧;u addCi
21、rcle():用于繪制圓形;u addOval():用于繪制橢圓;u addPath():用于繪制一組軌跡;u addRect():用于繪制矩形;u addRoundRect():用于繪制圓角矩形;可以使用這些提供好的方法為基礎通過組合繪制出各種圖形。另外Path還提供了一些直接操作元線段的方法,例如moveTo()、lineTo()等方法。Path繪制2D圖形示例畫出直線和圓初始界面通過點擊畫曲線Path繪制2D圖形代碼示例 為了實現能夠在一塊特定的區域內進行繪圖,項目首先實現了一個用于繪制圖像的視圖類PathView,該類實現了用于向Path中添加一條線段的方法drawLine();用于添
22、加一個圓形的方法drawCircle();用于繪制Path的方法showPath(),該方法在重寫的父類方法onDraw()中被調用;用于向Path中添加點的方法drawPoint();還通過重寫onTouchEvent()方法實現了對觸摸(點擊)事件的響應,從而可以通過觸摸(點擊)來繪制一系列的點。下面是PathView類的一些變量和構造函數。public class PathView extends View private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); /抗鋸齒 private Path mPath;/聲明Path類對象
23、 private boolean mCurDown;/指示屏幕是否被按下(點擊) private int mCurX;/被點擊點的坐標 private int mCurY; private final Rect mRect = new Rect();/該矩形用于控制局部更新區域 public PathView(Context context, AttributeSet attrs) super(context, attrs); setFocusable(true);/設置視圖可獲得焦點 setFocusableInTouchMode(true);/設置視圖可獲取觸摸事件 mPaint.setS
24、tyle(Paint.Style.STROKE);/繪制成線 mPaint.setStrokeWidth(3);/設置繪制線寬 mPath = new Path();/創建Path實例 Path繪制2D圖形代碼示例drawLine(),用于繪制直線的方法。publicpublic voidvoid drawLine()/向Path中添加一條線段供繪制 mPath.moveTo(20, 20); mPath.lineTo(120, 1200); invalidate();/立即更新視圖drawCircle(),用于繪制圓圈的方法。publicpublic voidvoid drawCircle(
25、)/向Path中添加一個圓形供繪制 mPath.addCircle(180, 180, 45, Path.Direction.CCW); invalidate();Path繪制2D圖形代碼示例showPath(),顯示繪制的圖形。privateprivate voidvoid showPath(Canvas canvas, intint x, intint y, Path.FillType ft, Paint paint) canvas.translate(x, y); canvas.clipRect(0, 0, 280, 300);/可以繪制圖形的區域 canvas.drawColor(Co
26、lor.WHITE);/為該區域著色 mPath.setFillType(ft);/設置fill方式 canvas.drawPath(mPath, paint);/繪制PathonDraw(),用于更新顯示。protectedprotected voidvoid onDraw(Canvas canvas) Paint paint = mPaint; canvas.drawColor(0 xFFCCCCCC);/為Canvas著色 canvas.translate(20, 20);/Canvas向左下方向偏移(20,20) paint.setAntiAlias(truetrue);/抗鋸齒 pa
27、int.setColor(Color.BLACK);/設置畫筆顏色 paint.setPathEffect(nullnull);/不采用特效 showPath(canvas, 0, 0, Path.FillType.WINDING, paintPath繪制2D圖形代碼示例onTouchEvent(),處理觸摸事件;drawPoint(),畫點。publicpublic booleanboolean onTouchEvent(MotionEvent event) intint action = event.getAction(); mCurDown = action = MotionEvent.
28、ACTION_DOWN | action = MotionEvent.ACTION_MOVE; intint N = event.getHistorySize(); forfor (intint i=0; iN; i+) drawPoint(event.getHistoricalX(i), event.getHistoricalY(i); drawPoint(event.getX(), event.getY();/添加當前被觸摸的點 returnreturn truetrue; privateprivate voidvoid drawPoint(floatfloat x, floatfloat
29、 y) mCurX = (intint)x - 20; mCurY = (intint)y - 20; ifif (mCurDown) /添加當前被觸摸點并刷新視圖顯示 mPath.addCircle(mCurX, mCurY, 1, Path.Direction.CCW); mRect.set(intint)x-3, (intint)y-3, (intint)x+3, (intint)y+3); invalidate(mRect); /只更新矩形區域 界面實現的注意事項 由于該示例中還需要在Activity中添加一些其他的UI控件,所以需要在布局文件中將PathView作為一個控件元素使用,
30、使之成為界面組成的一部分。 OpenGL簡介LogoOpenGL(Open Graphics Library)OpenGL是一個圖形編程接口規范標準,用于生成二維、三維圖像。特點:跨編程語言跨平臺OpenGL由近三百五十個不同的函數調用組成,用來從簡單的圖元繪制復雜的三維景象,它的主要用途在于:CAD虛擬現實科學可視化程序游戲程序設計OpenGL 發展歷程 OpenGL進化自SGI的早期3D接口IRIS GL。 1992年7月 發布了 OpenGL 1.0 版本,并與微軟共同推出 Windows NT 版本的 OpenGL 。 1995年 OpenGL 1.1 版本面市,加入了新功能,并引入了
31、紋理特性等等。 2003年的7月28日,SGI和ARB公布了OpenGL 1.5。OpenGL 1.5中包括OpenGL ARB的正式擴展規格繪制語言“OpenGL Shading Language”。OpenGL 1.5的新功包括:頂點Buffer Object、Shadow功能、隱蔽查詢、非乘方紋理等。OpenGL 發展歷程 2004年8月,OpenGL2.0版本由3Dlabs發布。opengl2.0支持OpenGL Shading Language、新的shader擴展特性以及其他多項增強特性。 2008年Khronos工作組推出OpenGL 3,增加了新版本的shader語言, Ope
32、nGL著色語言GLSL 1.30,可以充分發揮當前可編程圖形硬件的潛能。還引入了一些新的功能,例如頂點矩陣對象,全幀緩存對象功能,32bit浮點紋理和渲染緩存,基于阻塞隊列的條件渲染,緊湊行半浮點頂點和像素數據,四個新壓縮機制等等。OpenGL 發展歷程 2009年3月公布了升級版新規范OpenGL 3.1, OpenGL著色語言“GLSL”從1.30版升級到了1.40版,通過改進程序增強了對最新可編程圖形硬件的訪問,還有更高效的頂點處理、擴展的紋理功能、更彈性的緩沖管理等等。 OpenGL 3.1在3.0版的基礎上對整個API模型體系進行了簡化,可大幅提高軟件開發效率。OpenGL 發展歷程
33、 2009年8月Khronos小組發布了OpenGL 3.2。OpenGL3.2版本提升了性能表現、改進了視覺質量、提高了幾何圖形處理速度,而且使Direct3D程序更容易移植為OpenGL。 2010年3月10日, OpenGL同時推出了3.3和4.0版本,同年7月26日又發布了4.1版本,OpenGL4.1提高視覺密集型應用OpenCL的互操作性,并繼續加速計算剖面為核心的支持和兼容性,到目前(2011/6/11)OpenGL4.1仍是最新版本。OpenGL ES簡介LogoOpenGL ES (OpenGL for Embedded Systems) 它是OpenGL用于嵌入式系統的AP
34、I庫 是 OpenGL三維圖形API的子集 針對手機、PDA和游戲主機等嵌入式設備而設計OpenGL ES 與OpenGL的聯系 OpenGL ES 是從 OpenGL 裁剪定制而來的 去除了復雜圖元等許多非絕對必要的特性 OpenGL ES 1.0 以 OpenGL 1.3 規范為基礎 OpenGL ES 1.1 以 OpenGL 1.5 規范為基礎 OpenGL ES 2.0 則是參照 OpenGL 2.0 規范定義Android OpenGL ES簡介Android系統通過OpenGL ES API來提供對高性能3D圖形的支持。Android 3D 圖形系統分為兩部分: 本地代碼主要實現
35、的 OpenGL 接口的庫,在 Java框架層,javax.microedition.khronos.opengles 是 java 標準的 OpenGL 包,android.opengl包提供了 OpenGL 系統和 Android GUI 系統之間的聯系。 Java 框架 本地代碼Android OpenGL ES支持列表GL GL 10 GL 10 EXT GL 11 GL 11 EXT GL 11 ExtensionPack Android OpenGL ES開發入門Android OpenGL APIandroid.opengl接口:GLSurfaceView.EGLConfigCh
36、ooserAn interface for choosing an EGLConfig configuration from a list of potential configurations. GLSurfaceView.EGLContextFactoryAn interface for customizing the eglCreateContext and eglDestroyContext calls. GLSurfaceView.EGLWindowSurfaceFactoryAn interface for customizing the eglCreateWindowSurfac
37、e and eglDestroySurface calls. GLSurfaceView.GLWrapperAn interface used to wrap a GL interface. GLSurfaceView.RendererA generic renderer interface. 類:android.opengl概覽ETC1Methods for encoding and decoding ETC1 textures. ETC1UtilUtility methods for using ETC1 compressed textures. ETC1Util.ETC1TextureA
38、 utility class encapsulating a compressed ETC1 texture. GLDebugHelperA helper class for debugging OpenGL ES applications. GLES10 GLES10Ext GLES11 GLES11Ext 類(續):android.opengl概覽GLES20OpenGL ES 2.0 GLSurfaceViewAn implementation of SurfaceView that uses the dedicated surface for displaying OpenGL ren
39、dering. GLUA set of GL utilities inspired by the OpenGL Utility Toolkit. GLUtilsUtility class to help bridging OpenGL ES and Android APIs. MatrixMatrix math utilities. VisibilityA collection of utility methods for computing the visibility of triangle meshes. 異常:GLExceptionAn exception class for Open
40、GL errors. Android OpenGL入門GLSurfaceView 要在Android設備上顯示opengl圖像,首先需要在布局中加入一個用于顯示opengl圖形的視圖(View)。 類似于其他的一些View例如,GridView、ListView、MapView等等,Android提供了GLSurfaceView用于顯示opengl圖像。 我們可以通過繼承GLSurfaceView來實現自己的用于opengl的View,當然,最簡單的用法是直接使用它。用法如下,在對應Activity的onCreate()方法中加入:GLSurfaceView view = new GLSurf
41、aceView(this);view.setRenderer(new OpenGLRenderer();setContentView(view);一個簡單的Renderer矩形GLSurfaceViewRenderer的繪制結果Android OpenGL入門RendererGLSurfaceView view = new GLSurfaceView(this);view.setRenderer(new OpenGLRenderer();setContentView(view);GLSurfaceView只是在布局中加入了一塊View用于繪制圖形,而Renderer類就是用于繪制具體的圖形了,
42、如上段代碼的第二句就是給GLSurfaceView設置了一個用于繪圖的Renderer。GLSurfaceView.Renderer是Android提供的一個接口,所有用于繪制圖像的Renderer類都必須實現這個接口。Android OpenGL入門Renderer實現Renderer接口需要實現如下三個方法:該函數在視圖需要創建的時候調用。一些用于初始化的繪制代碼通常放在這里。該函數內是實現具體繪制業務的代碼。該函數在屏幕尺寸發生變化時調用,用于適應屏幕的調整。public void onSurfaceCreated(GL10 gl, EGLConfig config) public vo
43、id onDrawFrame(GL10 gl) public void onSurfaceChanged(GL10 gl, int width, int height)一個簡單的Renderer矩形要實現前面所示的白色矩形,我們通過實現Renderer接口來實現這個特定的RendererOpenGLRenderer為了讓結構變得清晰,首先把矩形的具體實現放在一個單獨的類中,命名為Square,這個類主要包括: 構造方法 提供一個特定矩形的數值信息(如定點,邊,面,顏色等) 實現一個方法draw(GL10 gl)供OpenGLRenderer調用一個簡單的Renderer矩形如圖所示,一個簡單的
44、矩形包括了四個頂點(v0, v1, v2, v3),通過一個數組來記錄:private float vertices = -1.0f, 1.0f, 0.0f, / v0 -1.0f, -1.0f, 0.0f, / v1 1.0f, -1.0f, 0.0f, / v2 1.0f, 1.0f, 0.0f, / v3;注:三維坐標,z軸全為0頂點數組一個簡單的Renderer矩形如圖所示,OpenGL默認的是逆時針的連接頂點來形成一個面,為此建立一個頂點序列數組:將頂點組合成面private short indices = 0, 1, 2, 0, 2, 3 ;一個簡單的Renderer矩形Squar
45、e構造方法public Square()主要用途為自身對象分配足夠的緩存空間public Square() / 頂點為浮點型,占用4個字節,所以乘以4ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);vbb.order(ByteOrder.nativeOrder();vertexBuffer = vbb.asFloatBuffer();vertexBuffer.put(vertices);vertexBuffer.position(0);/ 序列用短整型保存,短整型占用2個字節,所以乘以2ByteBuffer ibb
46、 = ByteBuffer.allocateDirect(indices.length * 2);ibb.order(ByteOrder.nativeOrder();indexBuffer = ibb.asShortBuffer();indexBuffer.put(indices);indexBuffer.position(0);一個簡單的Renderer矩形Square的draw(GL10 gl)方法繪制矩形public void draw(GL10 gl) gl.glFrontFace(GL10.GL_CCW); / 逆時針方向逆時針方向. gl.glEnable(GL10.GL_CULL
47、_FACE); / 使能面淘汰機制使能面淘汰機制. gl.glCullFace(GL10.GL_BACK); / 定制面淘汰機制定制面淘汰機制 / 使能頂點緩存使能頂點緩存 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); / 指定頂點緩存的位置以及頂點坐標數據的類型指定頂點緩存的位置以及頂點坐標數據的類型 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); / 指定序列緩存的位置以及序列數據的類型指定序列緩存的位置以及序列數據的類型 gl.glDrawElements(GL10.GL_TRIA
48、NGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer); / 清除頂點緩存清除頂點緩存 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); / 停止面淘汰機制停止面淘汰機制 gl.glDisable(GL10.GL_CULL_FACE);一個簡單的Renderer矩形完成了Square類,就可以在OpenGLRenderer中使用它了OpenGLRenderer主要包括如下一些方法: 構造方法 三個實現Renderer接口的方法本例中,構造方法很簡單,如下:public OpenGLRenderer() / 初始化待繪制的矩形對象初始化待繪制的矩形對象. square = new Square();一個簡單的Renderer矩形OpenGLRenderer. onSurfaceCreated(GL10 gl, EGLConfig config):public void onSurfaceCreated(GL10 gl, EGLCo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 04-01不定積分的概念與性質章節課件
- 2025年中小學教師資格考試試卷及答案
- 2025年公共衛生與安全知識測試卷及答案
- 2025年公共關系與傳播專業課程考試試卷及答案
- 合同管理制度培訓
- 2025年心理治療師資格考試試題及答案匯編
- 施工企業質量技術培訓
- 2025年海洋科學與技術基礎考試試卷及答案
- 鶴壁市重點中學2025屆八年級英語第二學期期末復習檢測試題含答案
- 公司線上培訓課件
- 《中華人民共和國職業分類大典》(2022年版)各行業職業表格統計版(含數字職業)
- 《銀行業金融機構安全評估標準》
- 企業內部培訓體系搭建及實施效果評估報告
- 湖南省首屆財會知識大賽競賽考試網絡答題題庫
- 國家開放大學-傳感器與測試技術實驗報告-實驗
- 經皮球囊壓迫術治療三叉神經痛中國專家共識(2022 版)
- 人工智能知到智慧樹章節測試課后答案2024年秋復旦大學
- 胸痛中心數據填報培訓
- 直臂式高空作業車安全管理
- 水毀道路修復工程項目可行性研究報告
- 教科版 六年級下冊 科學 2023-2024 溫州市小升初學業檢測
評論
0/150
提交評論