定義2D相機即設定『投影矩陣』與『視口』
『視口』用於控制輸出圖像尺寸與渲染幀緩存位置.OpenGL ES使用『視口』將投影到『近裁剪面』點座標變換為『幀緩存』像素座標
GL10.glViewport(int x,int y,int width,int height);
x和y座標為幀緩存區視口左上角.width和height為視口大小.單位為像素.幀緩存座標原點為屏幕左下角.通常將x和y設為0.width和height設為屏幕分辨率.即設為全屏.
gl.glViewport(0, 0, view.getWidth(), view.getHeight());
『投影矩陣』在2D相機中只使用『平行投影』.首先將當前矩陣設為『投影矩陣』
gl.glMatrixMode(GL10.GL_PROJECTION);
載入單位矩陣
gl.glLoadIdentity();
設置正交投影矩陣
GL10. glOrthof(int left,int right,int bottom,int top,int near,int far);
OpenGL ES座標系統正X軸指向右,正Y軸指向上.正Z軸指向我.left與right為X軸左右兩條邊.bottom與 top為Y軸上下兩條邊.near為近端裁剪面.far為遠端裁剪面.若設2D橫向相機左下角(0,0)右上角(480,320)視錐深度為2
gl.glOrthof(0,480,0,320,1, -1);
重設為模型視圖矩陣
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
2D相機將『觸屏』坐標轉『世界』坐標.首先設定視錐體寬為15高為10.
float frustum_width = 15;
float frustum_height = 10;
設縮放係數為1.用於放大屏幕大於1,縮小屏幕小於1
float zoom = 1;
首先將『觸屏』位置歸範圍(0~1).然後乘以視錐體寬和高
touch.x = (touch.x / view.getWidth()) * frustum_width * zoom;
因為觸屏座標原點位於屏幕左上角.需倒轉Y軸
touch.y = (1-touch.y /view.getHeight()) * frustum_height * zoom;
與相機位置相機
touch.add(position);
最後減於視錐體中心位置.得到遊戲『世界』坐標
touch.x = touch.x – frustum_width*zoom/2f;
touch.y = touch.y – frustum_height*zoom/2f;