【问题标题】:Grayscaled texture rendered with color in OpenGL在 OpenGL 中用颜色渲染的灰度纹理
【发布时间】:2012-05-12 01:42:49
【问题描述】:

我在写Cocoa屏保,简单的opengl场景,没什么特别的。我有一堆带有图案的 rgb gif,除了一个之外,它们都很好用。

我在屏幕保护程序预览中看到的内容(渲染带有纹理的单个四边形):

纹理本身(相应缩放):

一些代码:

文本加载:

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);

【问题讨论】:

    标签: cocoa opengl textures screensaver


    【解决方案1】:

    看起来可能是像素包问题。

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

    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 字节的倍数,这在每个像素使用 1/2/3 字节时并不总是准确的。

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

    【讨论】:

    • 绝对是这样。非常感谢,你拯救了我的一天。并感谢您的链接,下次会知道的更好=)
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多