Изображения, показывающие в странных цветах - PullRequest
2 голосов
/ 12 мая 2019

Я создаю новый движок 2d игры в lwjgl 3, используя OpenGL, чтобы опробовать lwjgl 3, так как это первый проект, в котором я использую lwjgl 3, во всех других моих проектах был lwjgl 2. Но когда я рендерил изображение, используяВ этом новом движке все цвета меняются, а некоторые даже не отображаются.

Код для загрузки текстур

    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 Ответ

4 голосов
/ 12 мая 2019
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, this.width, this.height, 0, GL_RGBA, GL_BYTE, data);
                                                                             ^^^^^^^

GL_BYTE является целым типом со знаком 8 бит, поэтому все ваши значения> 127 будут интерпретироваться как отрицательные значения (при условии, что ваша платформа использует стандартные двадополняйте представление как минимум) и ограничитесь 0.

Просто используйте GL_UNSIGNED_BYTE.

...