GLSL纹理无法正确应用

时间:2018-12-01 22:30:38

标签: opengl glsl uv-mapping

我一直在关注模型加载教程here,但在正确显示模型(尤其是正确应用纹理)方面遇到问题。

我正在使用以下代码将漫反射纹理发送到数组中的着色器

    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

感谢您的帮助。

0 个答案:

没有答案