Android圖形—OpenGL(三)

來源:互聯網
上載者:User

繪圖對象的座標映射

在Android裝置上顯示圖形中的基本問題之一就是它們的螢幕可能是各種尺寸和形狀的。OpenGL會假設一個方形地區,統一的座標地區,並且在預設情況下,在一些方形的螢幕能夠像在方形地區一樣,完美的繪製這些座標。

圖1. 預設的OpenGL座標系統(左)被映射到一個典型的Android裝置螢幕(右)。

上面的插圖示範了如何把左邊的OpenGL的統一座標系統映射到右邊橫屏裝置的實際座標上。使用GpenGL的投影模式,可以解決這個問題,並且照相視圖(Camera View)會變換座標,以便繪圖物件能夠按照正確的比例來顯示圖形。

為了應用投影和照相視圖,就要建立一個投影矩陣和一個照相視圖矩陣,並且把它們應用到OpenGL的呈現管道。投影矩陣會重新計算圖形的座標,以便讓圖形能夠正確的映射到Android裝置的螢幕上。照相視圖矩陣會從一個特殊的視角來建立一個要呈現的對象的變換。

在OpenGL ES 1.0中的投影和照相視圖

在ES 1.0 API中,要分別建立投影和照相視圖,並把它們添加到OpenGL的環境中。

1. 投影矩陣---為了重新計算繪圖物件的座標以便讓它們能夠按照正確的比例來繪製,就要使用裝置螢幕的幾何形狀來建立一個投影矩陣。下面的範例程式碼示範了如何編輯GLSurfaceView.Renderer的onSurfaceChanged()方法,來實現基於螢幕的外觀比率的投影矩陣的建立,並且把這個投影矩陣應用給OpenGL的呈現環境:

public void onSurfaceChanged(GL10 gl, int width, int height) {

     gl.glViewport(0, 0, width, height);

 

     // make adjustments for screen ratio

     float ratio = (float) width / height;

     gl.glMatrixMode(GL10.GL_PROJECTION);        // set matrix to projection mode

     gl.glLoadIdentity();                        // reset the matrix to its default state

     gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7);  // apply the projection matrix

 }

2. 照相變換矩陣---一旦使用一個投影矩陣調整了座標系統,就必須要使用一個照相視圖。下面的代碼顯示如何使用GLSurfaceView.Renderer的onDrawFrame()方法來實現一個模型視圖,並且使用GLU.gluLookAt()工具來建立一個類比照相機視角的視圖變換:

publicvoid onDrawFrame(GL10 gl){
    ...
        // Set GL_MODELVIEW transformation mode
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();                      // reset the matrix to its default state
 
        // When using GL_MODELVIEW, you must set the camera view
        GLU.gluLookAt(gl,0,0,-5,0f,0f,0f,0f,1.0f,0.0f);
        ...
    }

關於如何使用OpenGL ES 1.0投影和照相視圖的完整的例子,請看OpenGL ES 1.0指南(http://developer.android.com/training/graphics/opengl/index.html)

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.