1

我刚刚在 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);

有人可以解释一下吗?

4

2 回答 2

5

在定向中,光只来自一个方向,而点光从它向各个方向辐射光。

定向光可用于模拟远的点光,例如照在地球上的太阳。

http://www.okino.com/new/toolkit/image22.gif (图片来自 okino.com)

于 2013-05-06T20:46:17.123 回答
1

位置向量(xyzw)中的不同 w。

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

于 2013-05-06T20:46:14.623 回答