我在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个屏幕截图: