OpenGL纹理未找到匹配的重载函数
首先是我的Fragmenshader的代码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
#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。。。。