2011-03-03 37 views
0
 #version 150 core 
in vec3 pos; 
in vec3 vshade; 
in vec3 normal; 
out vec3 cshade; 
out float shadescale_o; 
out vec3 v_o; 
out vec3 locallight_o; 
out vec3 n; 
uniform float pscale; 
uniform mat3 rotation_projection; 
uniform vec3 objcentre_to_eye_projected; 
uniform vec3 light_in_object_coords; 
uniform vec3 view_in_object_coords; 
void main() 
{ 
//do it all without homogenous co-ords 
    vec3 transpos; 
    vec3 h,v; 
    vec3 locallight=light_in_object_coords-pos; //subtract because of light direction 
    transpos.xyz=rotation_projection*pos.xyz+objcentre_to_eye_projected; 
    gl_Position.w= transpos.z; 
    transpos.z-=pscale; 
    gl_Position.xyz=transpos; 
    v=view_in_object_coords+pos; 
    n=normal; 
    v_o=v; 
    v=normalize(v); 
    locallight_o=locallight; 
    locallight=normalize(locallight); 
    h=v-locallight; //light direction shines from source to object 
    h=normalize(h); 
    shadescale_o= dot(h,normal); //inward normal 
    if (shadescale_o<0) 
     shadescale_o=0; 
    shadescale_o*=shadescale_o; 
    shadescale_o*=shadescale_o; 

    shadescale_o= dot(locallight,normal);//diffuse 

    cshade=vshade;//*(shadescale_o); 

} 

這是我的着色器代碼,它以字符串的形式輸入到程序中,基本上只是顯示一個帶有本地光的立方體。一些着色器代碼中的環境照明

我需要知道如何通過此代碼實現環境照明,以點亮整個立方體(以及場景中的其他任何東西)。

它基於openGL框架,顯示的所有內容都受此代碼影響...是的,它是作業!

+0

'vshade'是你的環境光顏色嗎?是否使用'cshade = vshade;'產生單一顏色? – 2011-03-03 12:08:00

回答

1

無論如何,你正在計算每種顏色的漫反射因子(至少我假設這是正確的,這是你的家庭作業),所以你可以添加一個恆定的環境因子。