Я только что сделал учебник от videotutorialsrock.com по освещению в C ++ OpenGL. Я понимаю окружающий свет, но не понимаю разницы между позиционным и прямым светом, поскольку идея и код обоих выглядели очень похоже. Вот мой код для позиционированного света:
//Add positioned light
GLfloat lightColor0[] = {.6, .6, .6, 1};
GLfloat lightPos0[] = {4, 0, 8, 1};
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor0);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos0);
И для направленного света:
//Add direct light
GLfloat lightColor1[] = {.5, .2, .2, 1};
GLfloat lightPos1[] = {-1, .5, .5, 0};
glLightfv(GL_LIGHT1, GL_DIFFUSE, lightColor1);
glLightfv(GL_LIGHT1, GL_POSITION, lightPos1);
Может кто-нибудь объяснить?
В направлении света свет идет только в одном направлении, в то время как точечный свет излучает свет во всех направлениях от него.
Направленный свет может быть использован для имитации точечного света очень далеко, как солнце, сияющее на земле.
(изображение предоставлено okino.com)
Разные w в векторе положения (xyzw).
GLfloat lightPos0[] = {4, 0, 8, 1};
w = 1 означает точку (положение 3d)
GLfloat lightPos1[] = {-1, .5, .5, 0};
W = 0 означает вектор (направление 3d)
https://gamedev.stackexchange.com/questions/14115/do-i-need-the-w-component-in-my-vector-class