Android OpenGL 入門之路(5.1視口Viewport 和 座標)

前期文章:

這篇文章主要說明OpenGL裏面視口和座標相關的知識,

Viewport 視口座標系

設置了MyRender,並實現內部的三個函數

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
   glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
}

	 @Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}

在onSurfaceChanged中,我們調用了glViewport方法,Viewport爲視口,其函數如下:

glViewport(x, y, width, height);

在渲染之前,我們必須告訴OpenGL渲染窗口的尺寸大小,即OpenGL應該把渲染之後的圖形繪製在窗口的哪個部位。

參數x,y指定了視見區域的寬度和高度,即窗口左下角的位置。width,height,參數控制渲染窗口的寬度和高度(像素)。

視口座標系是標準的笛卡爾直角座標系,如下圖:如果我們設置x,y爲0,0,寬度和高度爲屏幕的座標,那麼顯示的就是GLSurview所在的全部區域。
在這裏插入圖片描述
如果我們改變x = 50, y = 100那麼就會如下所示。
在這裏插入圖片描述

Window 窗口座標系

視口座標系和窗口座標系是不同的,窗口座標系的0,0位置是位於左上角的,對比如下圖1:窗口座標和 圖2: 視口座標
在這裏插入圖片描述
圖1:窗口座標

在這裏插入圖片描述
視口座標

在android,我們操作點擊位置的座標系爲窗口座標系,要和OpenGL顯示的視口座標系區分開。

OpenGL 程序座標

以上說的都是實際的屏幕的物理座標,在代碼處理中,無論是x座標還是y座標,OpenGL都會把屏幕映射到[-1,1]的範圍內。這意味着屏幕的座標對應x軸的-1,屏幕的右邊對應+1,屏幕的底邊對應y軸的-1,屏幕的頂邊對應+1。如下圖顯示:
在這裏插入圖片描述 因此,不管屏幕是什麼形狀和大小,始終都會映射到[-1,1]之間,實際在編寫相應代碼中,頂點位置的座標也始終在[-1,1]之間。