Разница между позиционным и прямым светом в C++ OpenGL?
Я только что сделал учебник от 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);
Может кто-нибудь объяснить?
2 ответа
В направлении света свет идет только в одном направлении, в то время как точечный свет излучает свет во всех направлениях от него.
Направленный свет может использоваться для имитации точечного источника света, находящегося очень далеко, например, когда солнце светит на землю.
(изображение предоставлено 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