OpenGL 纹理未找到匹配的重载函数
OpenGL texture no matching overload function found
首先是我的 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);
}
如果我想编译我得到错误:
'texture': 未找到 mathcing 重载函数(使用隐式转换)
我查看了 GLSL 文档,但我看起来是正确的。之后我在我的 OpenGL 文件中搜索了一个错误...但我看起来还不错。
您正在尝试使用 3D 坐标从 2D 采样器读取数据。将 in vec3 TexCoords
更改为 in vec2 TexCoords
或将纹理查找从 texture(material.diffuse, TexCoords)
更改为 texture(material.diffuse, TexCoords.xy)
首先是我的 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);
}
如果我想编译我得到错误: 'texture': 未找到 mathcing 重载函数(使用隐式转换) 我查看了 GLSL 文档,但我看起来是正确的。之后我在我的 OpenGL 文件中搜索了一个错误...但我看起来还不错。
您正在尝试使用 3D 坐标从 2D 采样器读取数据。将 in vec3 TexCoords
更改为 in vec2 TexCoords
或将纹理查找从 texture(material.diffuse, TexCoords)
更改为 texture(material.diffuse, TexCoords.xy)