以奇怪的颜色显示的图像

时间:2019-05-12 14:35:54

标签: java opengl lwjgl

我正在使用OpenGL在lwjgl 3中创建一个新的2d游戏引擎,以尝试lwjgl 3,因为这是我在所有其他项目中都使用lwjgl 3的第一个项目,但是当我使用图像渲染图像时新引擎的所有颜色都会改变,有些甚至不显示。

  

用于加载纹理的代码

    public Texture(String filename){
    IntBuffer width = BufferUtils.createIntBuffer(1);
    IntBuffer height = BufferUtils.createIntBuffer(1);
    IntBuffer comp = BufferUtils.createIntBuffer(1);

    ByteBuffer data = stbi_load(filename, width, height, comp, 4);

    id = glGenTextures();
    this.width = width.get();
    this.height = height.get();

    glBindTexture(GL_TEXTURE_2D, id);

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

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, this.width, this.height, 0, GL_RGBA, GL_BYTE, data);
    stbi_image_free(data);

}
  

我尝试渲染的纹理(分辨率为16x16)
  input

     

渲染
  result

如果您知道如何防止这种情况发生,请告诉我。

1 个答案:

答案 0 :(得分:4)

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, this.width, this.height, 0, GL_RGBA, GL_BYTE, data);
                                                                             ^^^^^^^

GL_BYTE是一个 signed 8位整数类型,因此所有> 127的值最终都将被解释为负值(假设您的平台至少使用标准的二进制补码表示),并且固定为0。

只需使用GL_UNSIGNED_BYTE