Opengl光线方向

时间:2013-11-24 17:33:45

标签: c++ opengl

我正在尝试在opengl中设置一个简单的定向灯。我的场景初始化代码:

float light_position[] = { 0, -1,0, 0.0f };
float light_ambient[] = {1.0f, 1.0f, 1.0f, 1.0f };
float light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };

float mat_ambient[] = { 1.0f, 0.0f, 0.0f, 1.0f };
float mat_diffuse[] = { 0.0f, 1.0f, 0.0f, 1.0f };

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glShadeModel(GL_SMOOTH);

然后我只渲染一个三角形:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);


glBegin(GL_TRIANGLES);
    glNormal3f(0,1,0);
    glVertex3f(0,-1,-2.0f);
    glNormal3f(0,1,0);
    glVertex3f(-1,-1,-1);
    glNormal3f(0,1,0);
    glVertex3f(1,-1,-1);
glEnd();

我除了光线像太阳一样,从上到下照射(朝向y轴的无穷大),所以我的三角形应该是黄色(红色环境材料+绿色漫射),但是我的三角形是红色的,就像是没有任何光明。如果我将灯光位置更改为{0,1,0,0},则三角形变为黄色。为什么?光线方向是从设置为(0,0,0)的位置?

1 个答案:

答案 0 :(得分:3)

解释恰恰相反。 { 0, -1,0, 0.0f, 0.0f }的轻微位置定义向下方向的光,向上照射。因此,此光不会显示您的三角形,而{ 0, 1,0, 0.0f, 0.0f }处的光会照亮。