cocoa - 在 OpenGL 中用颜色渲染的灰度纹理

标签 cocoa opengl textures screensaver

我正在写Cocoa屏幕保护程序,简单的opengl场景,没什么特别的。我有一堆带有图案的 rgb gif,除了一个之外,所有这些都效果很好。

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

Screensaver preview

纹理本身(相应缩放):

enter image description here

一些代码:

Tex 加载:

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

最佳答案

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

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

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(默认)。

关于cocoa - 在 OpenGL 中用颜色渲染的灰度纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555299/

相关文章:

macos - 如何在 Metal 的四边形中正确渲染纹理?

javascript - 在一页 session 中可以加载的 WebGL 纹理数量是否有限制?

objective-c - 打乱 NSMutableArray : calling the method

ios - 获取 Xcode 控制台输出以登录文件

swift - 使用 Swift 包管理器时出错

linux - 为什么我不能在分辨率为 800x600 的显示器上运行 Qt Qml 应用程序?

java - 纹理部分离开屏幕 - 性能差异

objective-c - 如何识别 NSTableView 中具有特定索引的行对象?

objective-c - WebView变化时调用函数

c++ - 为什么 glUseProgram 用 glUniform 调用每一帧?