2012-05-11 48 views
1

我在写可可屏幕保护程序,简单的opengl场景,没什么特别的。我有一大堆模式的rgb gif,除了一个外,它们都很棒。用OpenGL中的颜色呈现的灰度纹理

我看到在屏幕预览什么(渲染单颗上有一个纹理):

Screensaver preview

本身的质感(相应的缩放):

enter image description here

一些代码:

Tex loading:

NSBitmapImageRep *bitmap = [NSBitmapImageRep imageRepWithData:[texImg TIFFRepresentation]]; 
if(bitmap) { 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, (GLsizei)[texImg size].width, 
       (GLsizei)[texImg size].height, 0, GL_RGB, GL_UNSIGNED_BYTE, 
       [bitmap bitmapData]) ; 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
} 

GL初始化:

glEnable(GL_TEXTURE_2D); 
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); 

回答

2

好像它可能是一个像素包的问题。

你可以尝试在创建纹理之前设置这一行吗?

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

你可以阅读一下这个是干什么的位置:

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml

http://www.opengl.org/archives/resources/features/KilgardTechniques/oglpitfall/(读第8节)

但基本上默认的OpenGL预计行像素为4字节的倍数,这在使用时并不总是准确的g每像素1/2/3字节。

建议在创建纹理后将其设回4(默认)。

+0

绝对是这样。非常感谢,你救了我的一天。并感谢您的链接,下次会知道更好=) – Stormherz