Разница между позиционным и прямым светом в С++ 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);

Может ли кто-нибудь объяснить?


person Dan299    schedule 06.05.2013    source источник
comment
Это помогает? okino.com/new/toolkit/image22.gif   -  person Pubby    schedule 07.05.2013
comment
Ага, теперь понял. Если вы сделаете ответ из этого комментария, я приму его за вас. Спасибо!   -  person Dan299    schedule 07.05.2013


Ответы (2)


В направленном свете свет исходит только из одного направления, в то время как точечный свет излучает свет во всех направлениях от него.

Направленный свет можно использовать для имитации точечного источника крайне далекого, например, солнца, падающего на землю.

http://www.okino.com/new/toolkit/image22.gif(изображение предоставлено okino.com )

person Pubby    schedule 06.05.2013

Различные 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

person silvesthu    schedule 06.05.2013