OpenGL / Glut:与声明的

时间:2015-10-06 09:07:44

标签: c opengl glut mesh light

我在Mac OS X Yosemite上用OpenGL / GLUT编写练习,我必须在用网格绘制对象后设置灯光位置。一开始我宣布:

lightPos[0] =  0.60;
lightPos[1] =  0.50;
lightPos[2] =  2.20;
lightPos[3] =  0;

然后,以下是我在绘制网格后在display()函数中所做的事情:

glEnable(GL_LIGHTING);
glEnable( GL_LIGHT0 );
glLightfv( GL_LIGHT0, GL_POSITION, lightPos );

glDisable(GL_LIGHTING);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glColor3f(1.0, 1.0, 0.0);

glPushMatrix();
    glTranslated(lightPos[0], lightPos[1], lightPos[2]);
    glutSolidSphere(0.1, 12, 12);
glPopMatrix();

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_LIGHTING);

根据lightPos数组,黄色圆圈显示在正确的位置,但实际光位置是反向值:-0.60,-0.50,-2.20 我不明白为什么会这样。也许Mac OS X的OpenGL / GLUT实现有一个"奇怪的"执行?

更新 设置lightPos [3] = -1它有效,我不知道为什么。有人说lightPos的第4维是方向,我不知道为什么应该用-1设置。现在黄色的cyrcle和光的位置一致但是如果我把猪移到光线之外,那么猪和光的一面的阴影就不再一致了。请参阅2个屏幕截图:

enter image description here enter image description here

0 个答案:

没有答案