0

我知道,歸一化座標應該是-1(左)和+1(右)和1(底部)和+1(上)應用正交投影或平截頭體影響標準化座標?

這樣的:

enter image description here

但經過應用此:

從我onSurfaceChanged方法

GLES20.glViewport(0, 0, width, height); 
float ratio = (float) width/height; 
Matrix.orthoM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7); 

//The above line can be replaced with: 
//Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7); 
//But I get the same results with either frustumM or otrhoM 

而這在我的onDrawFrame方法

Matrix.setLookAtM(mVMatrix, 0, 0, 0, 3, 0f, 0f, 0f, 0f, 1.0f, 0.0f); 
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0); 

(然後我通過mMVPMatrix到我的自定義類的抽籤方法,在那裏旋轉和平移)。

但是,我的座標似乎改變 - 這大約發生了什麼:

enter image description here

正如你所看到的,X座標都有些改變,-1和+1沒有更長的屏幕邊緣(我現在使用的設備上,外邊緣變爲-1.7和+1.7)

Y座標保持不變。

如果有人能指出我要出錯的地方,會很感激嗎?我需要它應該是-1到+1。

謝謝

回答

0

我的眼睛看起來正確。如果你的屏幕不是一個正方形,那麼你確定你想要你的x軸伸展,所以它的行爲就像一個方形屏幕?因爲如果你這樣做了,那麼如果你告訴OpenGL繪製一個正方形,它將在屏幕上顯示爲一個矩形,而不是當你的屏幕寬度比你的屏幕寬度寬時,你的x軸邊緣大於你的y軸邊緣您的屏幕高度,如圖片所示。這就是爲什麼你通過ratio到投影,所以它知道如何正確繪製東西。

當你在屏幕上畫一個正方形時發生了什麼?它顯示爲正方形還是矩形?

+0

嗯,是啊我明白你的意思了,我寫了一個四色渲染方法,你通過座標(如drawQuad(x,y)),其中x和y被指定爲'普通'屏幕座標在左上角0,0)。該方法然後轉換這些以便它們可以被繪製。但是,自從應用投影后,如果我指定0,0,它不會在左上角畫出來,如果你看到我的意思,所以我試圖理解爲了解決這個問題。基本上,如果我將0指定爲X座標,那麼我需要渲染方法以某種方式將其解釋爲屏幕的左側。除非有更簡單的方法去做..... – Zippy 2013-04-07 10:23:28

+0

感謝您的答案,但它解釋得很好。我會問另一個關於開發不同資源/比率的問題。我習慣於通過基於屏幕寬度和高度來縮放我的精靈來開發它們,因此它們相對於任何屏幕顯示相同的大小。 (即無論遊戲運行的屏幕分辨率或屏幕比例如何,遊戲的尺寸都是相同的) - 但我看到人們在更寬的屏幕上展示了「在遊戲區域展示更多內容」,這是我正在尋找的一個概念很難把握。 – Zippy 2013-04-07 10:27:51