
OpenGL有『平行投影』同『透視投影』, 2D相機係『平行投影』生成方盒『視體』, 愛蒞剪裁物體, 唔係『視體』內唔『渲染』. 愛蒞『等比例游戲』『平面游戲』
OpenGL『2D相機』原點『0,0』係『左下角』, z軸遠端係負,近端正.
Android『熒屏』原點『0,0』係『左上角』,
- 首先指定『矩陣堆棧』為『投影矩陣堆棧』
glMatrixMode(GL_PROJECTION); |
- 清除殘留矩陣并載入『單位矩陣』,.
glLoadIdentity(); |
- 重置視區尺寸,『視區』變換係『投影』變換之後,『x,y』左下角『0,0』. 『width,height』同視窗尺寸相應『熒屏像素』, 除非想係視窗一部分區域繪畫, 可設較定較細『視區』.
glViewport(x, y, window_width, window_height); |
- 『平行投影』定方盒『視體』愛蒞剪裁物體, 而唔係3D相機錐形.『left, bottom』指左下角『0, 0』,『right, top』指右上角『width, height』. 熒屏尺寸設『800,600』或『640,480』. 游戲世界尺寸設『80,60』或『64,48』. OpenGL會自動放大與視區相配.『near, far』z軸剪裁面『1, -1』
glOrthof (left,right,bottom,top,near,far); |
glOrthof (0, frustum_width, 0, frustum_height, 1, -1); |
- 指定『視體』中心『x, y』.移動2D相機
glOrthof (x- width/2, x+width/x, y-height/2, y+height/2, 1, -1); |
glOrthof() | |
『left, bottom』 | 左下角『0, 0』 |
『right, top』 | 右上角『width, height』 |
near | z軸近端剪裁面 |
far | z軸遠端剪裁面 |
- 恢復『矩陣堆棧』為『視圖矩陣堆棧』
glMatrixMode(GL_MODELVIEW); |
- 載入『單位矩陣』,清除殘留矩陣
glLoadIdentity(); |
示例
void Projection_Camera2D(CAMERA2D_PTR cam){
// 重置視區尺寸 ::glViewport(0,0,cam->real_width,cam->real_height); // 設爲投影矩陣 ::glMatrixMode(GL_PROJECTION); // 載入單位矩陣 ::glLoadIdentity(); // 正交投影 glOrthof (0, cam->frustum_width, 0, cam->frustum_height, 1, -1); // 設定模型視圖矩陣 ::glMatrixMode(GL_MODELVIEW); // 載入單位矩陣 ::glLoadIdentity(); } |
你必須 登入 才能發表評論。