2012-12-28 28 views
1

可以說我的着色器程序包含頂點和片段着色器。將數據傳遞到不同的着色器

我該如何將信息直接傳遞給碎片生成器?

當我使用gl_uniform ......和specifiy我想解決的fragmet內部着色器,它拋出我這樣一個錯誤的varaible:

Using ShaderProgram: The fragment shader uses varying myVarHere, but previous 
shader doesnot write to it. 

因爲我第一次裝上vertexshader,我發現我需要通過頂點着色器「傳遞信息」。

我不確定這是否要走,所以我的問題:有沒有辦法告訴opengl在某個着色器中處理變量,或者我在做/理解可怕的錯誤?

VertexShader:

#version 130 

precision highp float; 

uniform mat4 projection; 
uniform mat4 view; 
uniform mat4 model; 

in vec3 vertexData; 
in vec3 normalData; 

out vec3 normal; 

void main(void) 
{ 
    normal = (model * view * vec4(normalData, 0)).xyz; 
    gl_Position = projection * model * view * vec4(vertexData, 1); 
} 

片段:

#version 130 

precision highp float; 

in vec3 light0; // <- this is what i want to fill with data 


const vec3 ambient = vec3(0.0, 0.0, 0.0); 

const vec3 lightColor = vec3(0.6, 0.0, 0.0); 

in vec3 normal; 
out vec4 out_frag_color; 

void main(void) 
{ 
    float diffuse = clamp(dot(normalize(light0), normalize(normal)), 0.5, 1.0); 
    out_frag_color = vec4(ambient + diffuse * lightColor, 1.0); 
} 

回答

1

似乎像你想light0爲均勻。

只是使它成爲一個統一的:

#version 130 

precision highp float; 

uniform vec3 light0; 

... 
+0

媽的,這樣,比我想的比較容易的方式。非常感謝你。 – CSharpie

相關問題