基本的OpenGL照明无法在我的Mac上运行

时间:2012-03-31 19:15:24

标签: macos qt opengl lighting

我已经使用OpenGL几个月了。我们已经开始在课堂上编写基本着色器,我们有一个Qt + OpenGL项目。这是一个简单的:交互式3D场景查看器。我们已经获得了加载.obj文件的起始代码,将它们放在场景中然后让我们用鼠标旋转。

我有一个非常奇怪的问题,我的老师无法解释。我们使用GL_LIGHT0及其默认参数:

glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT0);

这是唯一的反对。光的方向和位置应与眼睛的方向和位置相同。这是我在Ubuntu中运行程序时的工作方式;我加载一个杯子的模型,当我旋转时,光线随着我的眼睛旋转,我可以看到它的所有面部都被点亮了。 但是,在Mac OS X 10.6.8下,它无法正常工作。灯保持固定,所有面向其他方向的面都是黑色的。 我尝试了其他灯光,我尝试在MODELVIEW中加载身份然后自己指定位置和方向,我尝试重新下载代码,重新编译并运行它仍然是同样的错误。

程序需要一些我使用软链接链接的.dylib文件(不过我认为这不是问题)。问题不在代码中,因为它适用于其他系统。 Mac实现可能有所不同吗?我该怎么测试呢?谢谢!

编辑:这是一段更大的代码:

void GLWidget::initializeGL() {
    glClearColor(0.8f, 0.8f, 1.0f, 1.0f);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING); 
    glEnable(GL_LIGHT0);

    resetCamera();  // sets VRP, OBS...
}

void GLWidget::paintGL( void ) { 
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    setProjection();
    setModelview();

    drawAxes();

    pscene.render();
}

void drawAxes() {
    float L = DRAW_AXES_LENGTH;
    glDisable(GL_LIGHTING);
    glBegin(GL_LINES);
    glColor3f(1,0,0); glVertex3f(0,0,0); glVertex3f(L,0,0); // X
    glColor3f(0,1,0); glVertex3f(0,0,0); glVertex3f(0,L,0); // Y
    glColor3f(0,0,1); glVertex3f(0,0,0); glVertex3f(0,0,L); // Z
    glEnd();
    glEnable(GL_LIGHTING);
}

这些是与照明相关的功能。正如我所说,LIGHT0在initializeGL中设置一次。我试图在paintGL中设置它的位置,但它也没有用。

-----编辑2 ----- 我找到了解决方案。在drawAxes中,就在返回之前,添加:

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
GLfloat pos[] = {0.0f, 0.0f, 1.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glPopMatrix();

这是为什么?禁用并重新启用后,它会停止工作吗?

0 个答案:

没有答案