OpenGL纹理未找到匹配的重载函数

OpenGL纹理未找到匹配的重载函数,opengl,textures,Opengl,Textures,首先是我的Fragmenshader的代码 #version 330 core struct Material{ sampler2D diffuse; }; struct Light{ vec3 position; vec3 ambient; vec3 diffuse; }; in vec3 Normal; in vec3 FragPos; in vec3 TexCoords; out vec4 color; uniform vec3 viewPos; unifor

首先是我的Fragmenshader的代码

#version 330 core
struct Material{
       sampler2D diffuse;
};

struct Light{
vec3 position;

vec3 ambient;
vec3 diffuse;

};

in  vec3 Normal;
in  vec3 FragPos;
in vec3 TexCoords;

out vec4 color;

uniform vec3 viewPos;
uniform Material material;
uniform Light light;

void main()
{
 //ambient
 vec3 ambient = light.ambient * vec3(texture(material.diffuse, TexCoords));
 //Diffuse
 vec3 norm = normalize(Normal);
 vec3 lightDir = normalize(light.position - FragPos);
 float diff = max(dot(norm,lightDir),0.0);
 vec3 diffuse = light.diffuse * diff *vec3(texture(material.diffuse,TexCoords));
 color = vec4(ambient+diffuse,1.0f);

 }
如果要编译,则会出现以下错误: “纹理”:未找到匹配重载函数(使用隐式转换)
我查看了GLSL文档,但看起来是正确的。之后,我在我的OpenGL文件中搜索了一个错误。。。但是我看起来没问题。

您正在尝试使用三维坐标从二维采样器读取数据。将vec3 TexCoords中的
更改为vec2 TexCoords中的
或将纹理查找从
纹理(material.diffuse,TexCoords)
更改为
纹理(material.diffuse,TexCoords.xy)

使用
TexCoords.xy
切割
TexCoords的Z坐标是否有帮助?现在你正试图用一个
vec3
对一个
sampler2D
进行采样。谢谢你:多愚蠢的错误。在fragshader中,其定义为out vec2 TexCoords。。。。