2011-06-02 92 views
1

我想了解圍繞OpenGL座標系的基本概念,所以我一直在製作來自在線指南的測試應用程序。Android OpenGL座標問題

目前我得出一個簡單的方形屏幕,使用簡單的座標:

  -1.0f, 1.0f, 0.0f, // 0, Top Left 
      -1.0f, -1.0f, 0.0f, // 1, Bottom Left 
      1.0f, -1.0f, 0.0f, // 2, Bottom Right 
      1.0f, 1.0f, 0.0f, // 3, Top Right 

在我的應用程序運行下面的代碼:

 GLU.gluPerspective(gl, 45.0f, (float) width/(float) height, 0.1f, 100.0f); 

我在這裏的基本瞭解該代碼將查看端口角度設置爲45度以及窗口大小的寬高比​​。

另一件事我做的是設定視位置-4單位在Z軸:gl.glTranslatef(0, 0, -4);

這是個什麼結果看起來像景觀...

Landscape

而且在肖像...

Portrait


我的問題是:

座標系是如何工作的,一個單元代表多少個像素?如何改變方向和寬高比影響方程?

如果我想繪製一個正方形的屏幕大小,45度視角和z-4視角位置......如何找出單位所需的寬度和高度?

回答

2

我會盡力回答最好的我可以。

不會有任何理由改變寬高比或45度角。按照您擁有的方式進行操作,可以防止水平或垂直伸展的方式不尋常。由於您使用的是透視圖,因此您可以將三維空間的深度設置爲無深度的正交視圖。在做glTranslatef(0,0,-4)時,你實際上做了什麼改變了MODELVIEW Matix,在負z方向移動它4,大概在實際繪製正方形之前。默認情況下,「相機」座標爲0,0,0,Y(向上)作爲向上方向。

您可能能夠將3D空間轉換爲像素,但是對於透視圖類型,我並不完全確定您確實需要或需要。儘管如此,2D Orthographic視圖將會是另外一回事,因爲許多人也將OpenGL用於2D遊戲。想要一個與屏幕尺寸完全相同的正方形,Orthographic可能是要走的路,而且您應該可以通過一些Google搜索功能來計算出您的像素密度,以便進行2D空間比較。

+0

謝謝,我想你已經指出了我的正確方向。我一直在閱讀有關不同投影類型(正交/透視)的資源,我發現正字法的工作方式至少我能理解。 – CatalystNZ 2011-06-02 21:48:16

+0

它可能不是一種流行的思維方式,但對我而言,「透視」視圖一直是一種反覆試驗和錯誤的東西。畫一個形狀,然後用不同的轉換進行演奏,直到它從我喜歡的角度觀看......然後從那裏開始。基本上,Orthographic就是如何用OpenGL做2D。 – Maximus 2011-06-02 22:01:02