2012-03-26 23 views
0

我最近意識到我們iOS開發人員現在擁有一組不同的屏幕尺寸/分辨率的小機組,可以適應。下表說明當前部署iOS設備的屏幕規格:如何在Open GL中保存不同iThings之間的物理尺寸?

http://en.wikipedia.org/wiki/List_of_displays_by_pixel_density

非常方便。現在這裏是connundrum:

我在我的iPad2上構建了一個簡單的Open GL視圖。我的代碼是製作iPhone/Pad(320x480,768x1024)的普通像素尺寸的 的OpenGL視口。我畫了一個白色的矩形到這個東西。我使它寬200px。這真好。好的iPad'。

我編譯相同的代碼(這是自動檢測屏幕尺寸)到我的iPhone4。我的白色矩形與寬度不同。很公平。我知道iPhone4的實際像素尺寸是640x960,而iPad的實際像素尺寸是768x1024,並考慮到每個設備的ppi。

爲我的測試矩形的寬度除以六百四十零分之七百六十八我在漂亮的縮放係數1.2來,我再乘以200,並重新編譯爲iPhone4的... ... Arrrgh它幾乎作品。這個矩形只比它的iPad少了幾個像素。

任何人都可以在我的推理中指出一個錯誤嗎?我希望能夠將可顯示對象標記爲「獨立於屏幕」,以便在iThings之間保留其物理尺寸。在任何地方寫入一次。是的。

我正在構建一款遊戲,當然iPad3有着令人難以置信的精彩分辨率。我試圖儘可能多地解析可能的解決方案陷阱。我可能在發佈之前沒有機會在iPad3上測試我的應用程序。這艘船上還有其他人嗎?

+0

我無法擴展它由小屏幕尺寸將更大屏幕尺寸的因素。我會用除PPI的因素來做。但是,我不擔心物理尺寸,只要比例好,就足夠了(除非你需要物理尺寸在設備之間保持不變,比如尺子應用) – EmilioPelaez 2012-03-27 00:57:51

回答

0

我想出了我的問題。我在最後一篇文章中解釋的解決方案完全似是而非。

當繪製我的測試矩形時,OpenGL不關心像素分辨率。它只關心你餵食它的座標系。和許多人一樣,毫無疑問,我使用方便的320x480/768x1024尺寸作爲OpenGL中的座標系統用於電話/鍵盤。

我錯過的是iPhone [320/480]系統中的200'OpenGL-land'單元與iPad [768/1024]系統中的200單元不同而不是,因爲屏幕分辨率不同,但是因爲320/760(或相當於480/1024)的比例與Phone/Pad的屏幕寬度或屏幕高度的比率不同。我拿出一把尺子爲自己衡量尺寸,因爲我無法在網上找到權威的,可信的數字。

iPhone屏幕寬度:5.05釐米 iPad屏幕寬度:14.8釐米

可以很容易地看到5.05/14.8是從七百六十八分之三百二十零不同。

無論如何,iPhone上的cm與OpenGL單位的「真實」比率爲5.05/320,而iPad的等效比率爲14.8/768。

這兩者之間的比例因子爲x:

14.8/768 = X(5。05/320)

0.01927083333333 = X * 0.01578125

= 1.221(千分之一最接近)

於是我又回到了我的iPhone的代碼,現在我的尺寸我的測試矩形1.221 * 200寬,離開了我在我的iPad代碼中測試矩形爲200。重新編譯這兩個。 時間,我的白色測試矩形是在我的iPad2和我的iPhone4上完全相同的寬度。

OpenGL沒有關注像素密度。它正在關注其座標系。這就是爲什麼這種技術有效。可能確實有點瘋狂,但我可以更輕鬆地睡上一覺,因爲知道如果我需要它,就有了解決方案。

千年隼號, 亞歷