成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android OpenGL ES 2.0繪圖:應用投影和相機視圖

移動開發 Android
這一節將描述如何創建一個投影和一個相機視圖,并將它們應用于你的GLSurfaceView的形狀繪制過程中。在OpenGL ES環境中,投影和相機視圖讓繪制對象以更接近于人們肉眼所看到的實物對象的樣子顯示。這項仿真技術是通過對繪制對象的坐標進行精確的數學變換而實現的。

在OpenGL ES環境中,投影和相機視圖讓繪制對象以更接近于人們肉眼所看到的實物對象的樣子顯示。這項仿真技術是通過對繪制對象的坐標進行精確的數學變換而實現的。

投影:這種變換是根據所在GLSurfaceView的寬和高調整繪制對象的坐標。

如果沒有此變換,對象會被不規則比例的視圖所扭曲變形。

通常一個投影變換只有當創建OpenGLView或你的renderer類的 onSurfaceChange()方法發生變化時才被計算,更多關于OpenGL ES預測和坐標映射的信息,請參閱代碼Mapping Coordinates for Drawn Objects。

相機視圖:這種變換是基于一個虛擬相機的位置來調整繪制對象的坐標。需要主要的 是,OpenGL ES并沒有定義一個真實的相機對象,而是提供了一些工具方法變換繪制對象的顯示來模擬一個相機。一個相機視圖變換可能在創建GLSurfaceView時 被計算一次,或根據用戶行為或應用程序功能動態地改變。

這一節將描述如何創建一個投影和一個相機視圖,并將它們應用于你的GLSurfaceView的形狀繪制過程中。

一、定義一個投影

一個投影變換的數據是在GLSurfaceView.Renderer類的 onSurfaceChanged()方法中計算得到的。下面的示例代碼演示了根據傳入GLSurfaceView的寬和高計算比例,并使用Matrix 類frustumM()方法來填充一個投影變換:

  1. [java] view plaincopyprint? 
  2. @Override 
  3. public void onSurfaceChanged(GL10 unused, int width, int height) { 
  4. GLES20.glViewport(00, width, height); 
  5. float ratio = (float) width / height; 
  6. // 在onDrawFrame()方法中,將投影矩陣應用到對象的坐標 
  7. Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1137); 

 這段代碼填充了一個投影矩陣:mProjMatrix,可以把它與一個相機視圖變換在onDrawFrame()方法中結合起來使用。

注:如果只是一個投影變換應用到你的繪制對象中,通常會導致什么也看不到。一般來說,你必須再申請一個相機視圖變換才能看到屏幕上的東東。

二、定義一個相機視圖

添加一個相機視圖變換讓你的繪制對象的變換流程變得更加完整。在下面的示例代碼中,使用Matrix.setLookAtM()方法來計算相機視圖變換,然后結合前面所計算的投影矩陣。將合并后的變換矩陣傳遞給繪制的形狀。

  1. [java] view plaincopyprint? 
  2. @Override 
  3. public void onDrawFrame(GL10 unused) { 
  4. ... 
  5. // 設置相機的位置(視圖矩陣) 
  6. Matrix.setLookAtM(mVMatrix, 000, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f); 
  7. // 計算投影和視圖變換 
  8. Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0); 
  9. // 繪制形狀 
  10. mTriangle.draw(mMVPMatrix); 

三、應用投影和相機視圖變換

為了使用合并后的投影和相機視圖變換矩陣,需要修改你的圖形對象的draw()方法,接收聯合變換矩陣并應用到你的形狀上:

  1. [java] view plaincopyprint? 
  2. public void draw(float[] mvpMatrix) { // 傳遞計算出的變換矩陣 
  3. ... 
  4. // 獲得形狀的變換矩陣的handle 
  5. mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix"); 
  6. // 應用投影和視圖變換 
  7. GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1false, mvpMatrix, 0); 
  8. // 繪制三角形 
  9. GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount); 
  10. ... 
  11. }

 

責任編輯:閆佳明 來源: bbs.9ria
相關推薦

2014-04-29 14:16:54

2014-04-29 14:27:59

OpenGL ES 2Android繪制紋理

2014-04-29 14:08:40

OpenGL ESAndroid應用投影

2014-04-24 11:16:00

OpenGL ES 2入門

2014-04-24 13:26:24

OpenGL ES2.iOSiPhone

2014-04-24 14:00:35

OpenGL ES 2編程

2013-04-26 10:26:08

2013-09-02 15:46:06

OpenGLWindows

2014-07-16 15:49:13

AndroidOpenGL 4.4

2014-04-29 14:05:02

OpenGL ESAndroid添加動作

2013-09-26 13:43:13

iOS開發OpenGL ES教程圖元

2010-02-14 15:27:25

2014-04-24 13:35:11

OpenGL ES2.iOSAndroid

2010-01-26 10:52:01

Android繪圖

2014-04-29 13:58:11

OpenGL ESAndroid響應觸屏事件

2011-07-29 10:51:41

iPhone 全屏顯示 視圖

2011-11-23 11:20:21

投影儀常見問題

2013-07-05 14:45:05

AndroidOpenGL ES開發

2017-07-04 12:26:14

ARARKit

2017-07-19 15:25:16

iOS開發ARKitOpen GL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区精品在线视频 | 欧美一区二区三 | 99影视| 黄色一级大片在线免费看产 | 久久精品国产久精国产 | 精品伊人| 国产一区二区毛片 | 欧美日韩一区在线 | 亚洲成av人片在线观看无码 | 91精品国产色综合久久 | 久久99精品久久久 | 国产一区2区 | 成人福利网站 | 久久看精品 | 青青草一区二区 | 亚洲精品2区 | 最新国产精品视频 | 色综合久| 97国产精品 | 精品欧美乱码久久久久久 | 国产精品久久二区 | 鲁大师一区影视 | 中文字幕一区二区三区乱码在线 | 巨大黑人极品videos精品 | 一区二区三区亚洲视频 | 免费在线观看av | 亚洲成人免费视频 | 欧美日韩手机在线观看 | 国产在线中文字幕 | 成人黄在线观看 | 国产精品视频在线播放 | 91porn国产成人福利 | 日本久久久久久 | 亚洲精品一区二区冲田杏梨 | 国产精品爱久久久久久久 | 欧美一区二区在线 | 国产精品二区三区在线观看 | 欧美久久久久久久久 | 精品不卡| 又黑又粗又长的欧美一区 | 国产亚洲欧美在线 |