Текстура GLSL не применяется должным образом - PullRequest
0 голосов
/ 02 декабря 2018

Я следовал учебному руководству по загрузке модели здесь и у меня возникают проблемы с отображением модели правильно, в частности с корректным применением текстуры.

Я отправляю диффузные текстуры в шейдер в массивеиспользуя следующий код

    unsigned int diffuseNr = 0;
unsigned int specularNr = 0;
for (unsigned int i = 0; i < textures.size(); i++)
{
    glActiveTexture(GL_TEXTURE0 + i); // activate proper texture unit before binding
    // retrieve texture number (the N in diffuse_textureN)
    string number;
    string name = textures[i].type;
    if (name == "texture_diffuse")
        number = std::to_string(diffuseNr++);
    else if (name == "texture_specular")
        number = std::to_string(specularNr++);

    shader->setInt(name + "[" + number + "]", i);
    glBindTexture(GL_TEXTURE_2D, textures[i].id);
}
shader->setInt("material.diffuseCount", diffuseNr);
shader->setInt("material.specularCount", specularNr);
glActiveTexture(GL_TEXTURE0);

, и в своем шейдере я использую только первую диффузную текстуру (для тестирования), подобную этой.

#version 330 core
out vec4 FragColor;

in vec3 vert_normal;
in vec2 vert_texCoords;

struct Material {
    int diffuseCount;
    int specularCount;
};

uniform sampler2D texture_diffuse[2];

uniform Material material;

void main()
{
    FragColor = texture(texture_diffuse[0],vert_texCoords)*5.0;
}

Я получаю некоторые цвета на мою модель,так что я вижу, что текстуры отправляются и читаются шейдером правильно.Но результаты не такие, какими они должны быть

мой результат

enter image description here

ожидаемый результат с использованием шейдера, который выводит только диффузную текстуру каксогласно учебному пособию

enter image description here.

любая помощь приветствуется.

...