2012-03-15 35 views
0

我正在爲iOS,Android和BADA編寫一個小型的跨平臺遊戲引擎。無論屏幕分辨率和比率如何,我都有一個關於將視角設置爲一致的問題。使用glOrthof的OpenglES多平臺屏幕比例解決方案

我有以下設置爲我翻轉標準化正投影的正常工作:

glViewport(0, 0, mWidth, mHeight); 

glMatrixMode(GL_PROJECTION); 

glOrthof(-1.0,     //LEFT 
      1.0,     //RIGHT 
      -1.0 * mHeight/mWidth, //BOTTOM 
      1.0 * mHeight/mWidth, //TOP 
      -2.0,     //NEAR 
      100.0);    //FAR 

在我的iPhone的,這是好的,我得到世界對象的期望的位置,但在一些Android設備和iPad在保持正確比例時的位置。

所有的網格都是正確的比例,但位置明顯改變,所以如果有東西與屏幕底部對齊,則在iPad上呈現時,對象將被部分地從屏幕上畫出。

所以問題:

這是正確的,我需要將對象相對於視口的寬度和高度?

或者

是否有建立正交透視這樣不管屏幕比的定位將而不損壞世界對象的角度保持恆定的方法?

我從我所知道的和數學的角度思考我做了第二個不是一個選項,因爲透視是基於比率定義的。

+0

在你的頭銜中,你的意思是_solution_或_resolution_? – 2017-08-23 01:40:00

回答

2

iPad和iPhone的屏幕有不同的比例。 iPhone是3:2,iPad是4:3。 Android手機的列表範圍太廣泛,我不想評論Bada。因此,除非您要在信箱或郵箱中展示您的圖像,或者將其展開以使各個設備之間的寬高比發生變化,那麼您可見的內部世界的數量將在設備之間發生變化。

當您根據屏幕比例計算頂部和底部時,您已經修復了左側和右側參數。因此,您將在每臺設備上的屏幕上獲得與您的世界完全相同的數量,但垂直數量會發生變化。

如果你的遊戲涉及到一臺以3d拍攝的照相機,那麼你真的可以做很多事情。但既然你說的是與屏幕兩側對齊的東西,我猜攝像機在2D中移動了?

作爲一般規則,如果攝像機沿着垂直方向移動,那麼您可能希望保留所擁有的東西。您的級別佈局恰好是屏幕寬度,將是每個人屏幕的寬度。更寬的設備將能夠看到更遠或更遠的地方,但你去。

如果攝像機沿着水平方向移動,那麼您可能需要切換到爲頂部和底部提供固定值,並根據縱橫比計算左側和右側。所以我想這會是:

glOrthof(-1.0 * mWidth/mHeight, //LEFT 
      1.0 * mWidth/mHeight, //RIGHT 
      -1.0 ,     //BOTTOM 
      1.0 ,     //TOP 
      -2.0,     //NEAR 
      100.0);     //FAR 

在能夠關閉該關閉所有圖書館內的術語,你可能只需要接受一個標誌作爲邏輯視口寬度是否應該是固定的和高度適應屏幕或高度固定和寬度適應。

+0

乾杯湯米,這是我想的只是需要澄清。該引擎主要是3D,但其UI元素需要夾緊到相對位置。這可以克服購買按比例放置在屏幕上,而不是相對立的。我想知道是否有一個聰明的數學我從來沒有讀過關於這個線程。再次感謝澄清。 – Dev2rights 2012-03-16 14:31:37

相關問題