簡體   English   中英

iPhone OpenGLES紋理 - 彩色條紋

[英]iPhone OpenGLES textures - colour banding

我在iPhone上的openGL有問題,我肯定必須有一個簡單的解決方案!

當我加載紋理並顯示它時,我得到了許多我認為稱為“顏色條帶”的顏色,其中顏色,特別是漸變顏色,似乎會自動“優化”。

為了證明我的代碼沒有任何問題,我下載了iPhone'Crashlanding'應用程序並替換了背景圖像,正如您在下圖中所看到的(從模擬器中獲取),完全相同的事情發生。 左邊的圖像是原始的PNG,右邊的圖像是游戲中的圖像。 這幾乎就像它的調色板縮小到256色。

截圖

我確定這與我保存圖像的格式有關,雖然它不僅僅發生在PNG上,但無論我選擇何種圖像格式,它似乎都會發生。

盡我所能! 如果要重新創建此功能,只需下載崩潰登陸應用程序,然后替換背景。 非常感謝您的幫助。

iPhone不支持24位彩色格式(每種顏色8位) 它支持(未壓縮):

  • 565格式,紅色= 5位,綠色= 6位,藍色= 5位
  • 5551格式,紅色= 5位,綠色= 5位,藍色= 5位,alpha(透明度) - 1位
  • 4444格式,紅色/綠色/藍色/透明度為4位。

因此,如果您將以紅色繪制0到255之間的漸變,您將看到24位格式的256個漸變,但是565/5551格式中只有32個漸變,或者4444中只有16個漸變.24位色彩正在轉換為“飛“,所以它似乎得到了支持,但事實並非如此。

這就是為什么有色帶。

/這對於OpenGL ES 1.0來說是真的,不知道有關2.0的詳細信息/

更新 :我的錯誤。 iPhone支持其他格式(8888),但也許,應用程序本身有轉換?

更新2 :啊,你正在使用cocos2d。 並且不要在圖像中使用(我假設)透明度。 Cocos2d將這種圖像轉換為565格式。 如果您需要,我認為您必須將cocos2d修改為“unmpliment”此優化。

您應該更改Cocos2d的GLView的像素格式。 這是怎么做的。

如果您使用Cocos2d的模板來創建新項目,則會有一個名為AppDelegate.m的文件。 在該文件中找到此方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

然后在方法內你會發現:

CCGLView *glView = [CCGLView viewWithFrame:[_window bounds]
                               pixelFormat:kEAGLColorFormatRGB565
                               depthFormat:0
                        preserveBackbuffer:NO
                                sharegroup:nil
                             multiSampling:NO
                           numberOfSamples:0];

(可能會有點不同,具體取決於您的Cocos2d版本。我的是2.1)

無論如何,您只需要將pixelFormat從kEAGLColorFormatRGB565(紅色,綠色,藍色分量,每個5,6和5位)更改為kEAGLColorFormatRGBA8(紅色,綠色,藍色和alpha分量,每個8位)。 請注意,這意味着更多的內存使用(16位與24位),可能性能更低。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM