2011-03-03 5 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; '를 사용하면 단색이 생성됩니까? –

답변

1

어쨌든 각 색상에 대한 확산 계수를 계산하고 있습니다 (적어도 올바른 것으로 가정하고 숙제입니다). 일정한 주변 요소도 추가 할 수 있습니다.