2015-05-15 57 views
1

首先我的Fragmenshader的代碼。OpenGL紋理找不到匹配的超載函數找到

#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); 

} 

如果我想要編譯我得到的錯誤: 「紋理」:不mathcing發現 重載函數(使用隱式轉換)我看着GLSL文檔,但我看起來是正確的。之後,我在我的OpenGL文件中搜索了一個錯誤...但我看起來沒問題。

+1

是否使用'TexCoords.xy'幫助切斷'TexCoords'的Z座標?現在你試圖用'vec3'來抽樣'sampler2D'。 – genpfault

+0

謝謝...... –

回答

1

您正嘗試使用3D座標從2D採樣器讀取數據。將in vec3 TexCoords更改爲in vec2 TexCoords或將紋理查找從texture(material.diffuse, TexCoords)更改爲texture(material.diffuse, TexCoords.xy)

+0

謝謝:D多麼愚蠢的錯誤。在fragshader中定義爲out vec2 TexCoords .... –