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 프레임 워크를 기반으로 표시되며 모든 내용이이 코드에 의해 영향을받습니다 ... 예 숙제입니다 !!
'vshade'는 주위의 밝은 색상입니까? 'cshade = vshade; '를 사용하면 단색이 생성됩니까? –