Я закончил добавлять свет к моему объекту. Но у меня есть большая часть примера интернета, и я хочу понять, что я делаю. Может кто-нибудь объяснить мне подробно, что делает каждый шаг в коде?Применить свет к объекту в openGL
Фрагмент программы,
- Lightcolor: свет, который нам нужен (я взял здесь красный в качестве примера)
- Блеск: сколько света мы хотим использовать, можно также изменить картину в темному
- gl_FragColor = написать общий цвет. Но почему мы делаем texture2D (..) + faceRatio * ...?
Vertex Программа,
-Почему gl_MultiTexCoord0.xy? - А может кто-нибудь объяснить, как рассчитывается световое направление?
varying vec2 Texcoord;
uniform sampler2D baseMap;
uniform vec4 lightColor;
uniform float shininess;
varying vec3 LightDirection;
varying vec3 Normal;
void main(void)
{
float facingRatio = dot(normalize(Normal), normalize(LightDirection));
gl_FragColor = texture2D(baseMap, Texcoord) + facingRatio * lightColor * shininess;
}
varying vec2 Texcoord;
uniform mat4 modelView;
uniform vec3 lightPos;
varying vec3 Normal;
varying vec3 LightDirection;
void main(void)
{
gl_Position = gl_ProjectionMatrix * modelView * gl_Vertex;
Texcoord = gl_MultiTexCoord0.xy;
Normal = normalize(gl_NormalMatrix * gl_Normal);
vec4 objectPosition = gl_ModelViewMatrix * gl_Vertex;
LightDirection = (gl_ModelViewMatrix * vec4(lightPos, 1)).xyz - objectPosition.xyz;
}