【问题标题】:OpenGL is averaging all colors in the texture?OpenGL正在平均纹理中的所有颜色?
【发布时间】:2014-10-17 18:18:21
【问题描述】:

我在 opengl 中这样设置纹理参数:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);`

//glGenerateMipmap(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);

我的纹理数据是这样的:

checker[0] = checker[1] = checker[2] = 255;
checker[3] = checker[4] = checker[5] = 0;
checker[6] = checker[7] = checker[8] = 255;
checker[9] = checker[10] = checker[11] = 0;

我的纹理是 GL_RGB 并采用 GL_UNSIGNED_BYTE。我将纹理的宽度和高度设置为 2,放置纹理的坐标由两个三角形组成,它们构成一个正方形并填满整个屏幕。

但是,我得到的是灰色而不是两个黑色和两个白色像素。 RGB 中的灰色是 128,127,127。我读到我应该为每种颜色的检查器添加一个字节的填充,但这给了我一种桃色。

编辑:

我发现了一个错误,但现在我得到一个白屏。

所以我删除了

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

现在我黑屏了。

这是我的绘图功能:

glUseProgram(gfx->shaderProgramTexture);

glBindTexture(GL_TEXTURE_2D, tex);

glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0,
    2, 2, GL_RGB, GL_UNSIGNED_BYTE, data);

glBindBuffer(GL_ARRAY_BUFFER,
    gfx->vertexBufferTexture);

glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
gfx->clearScreen();
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindTexture(GL_TEXTURE_2D, 0);
glfwSwapBuffers(gfx->getWindow());

【问题讨论】:

  • 设置参数的时候确定贴图绑定了吗?我们需要更多代码来调试它。
  • @ColonelThirtyTwo 完成
  • 你把GL_UNPACK_ALIGNMENT设置成什么了?
  • 对于一个你应该将 min/mag 过滤器保持在GL_NEAREST 但你能告诉我们你的纹理坐标和着色器吗?
  • 另外,你正在做什么来使它成为“全屏四边形”而不是非常大的四边形?

标签: opengl colors shader


【解决方案1】:

你没有提到你的纹理坐标来自哪里。使用错误的纹理坐标可能会导致渲染完全白色或完全黑色的东西,例如,如果您总是对相同的像素进行采样。如果您的纹理坐标正好在像素之间,那么如果没有 GL_NEAREST,您可能会变灰。

【讨论】:

  • 不,使用GL_NEAREST 滤镜时,无论您使用什么纹理坐标,都不会在纹素之间产生任何混合。
  • 这就是为什么我说“没有 GL_NEAREST 你可能会变灰”,注意“没有”这个词。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多