C++ 当相机完全放在前面时,无法看到对象

C++ 当相机完全放在前面时,无法看到对象,c++,opengl,qglwidget,C++,Opengl,Qglwidget,我正在尝试运行一个简单的OpenGL示例,我面临以下问题。 当我将相机完全放在我的对象的前面时,对象根本不会显示。 但当我移动相机时(即使是0.00001),对象也会显示出来 class GLWidget : public QGLWidget{ void initializeGL(){ glEnable(GL_DEPTH_TEST); update_timer_ = new QTimer(this); connect(update_timer_, SIGNAL

我正在尝试运行一个简单的OpenGL示例,我面临以下问题。 当我将相机完全放在我的对象的前面时,对象根本不会显示。 但当我移动相机时(即使是0.00001),对象也会显示出来

class GLWidget : public QGLWidget{
    void initializeGL(){

    glEnable(GL_DEPTH_TEST);

    update_timer_ = new QTimer(this);
    connect(update_timer_, SIGNAL(timeout()), this, SLOT(update()));
    update_timer_->start(0.017);
}

/// @note camera decides renderer size
void resizeGL(int width, int height){
    if (height==0) height=1;
    glViewport(0,0,width,height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
 }

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

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity( );

    gluLookAt(0,0, 10.0,0,0,0,0,0,1);
    glBegin(GL_QUADS);

    glColor3ub(255,0,0);

    glVertex3d(1,1,1);

    glVertex3d(1,1,-1);
    glVertex3d(-1,1,-1);
    glVertex3d(-1,1,1);

    glColor3ub(0,255,0);
    glVertex3d(1,-1,1);
    glVertex3d(1,-1,-1);
    glVertex3d(1,1,-1);
    glVertex3d(1,1,1);

    glColor3ub(0,0,255);
    glVertex3d(-1,-1,1);
    glVertex3d(-1,-1,-1);
    glVertex3d(1,-1,-1);
    glVertex3d(1,-1,1);

    glColor3ub(255,255,0);
    glVertex3d(-1,1,1);
    glVertex3d(-1,1,-1);
    glVertex3d(-1,-1,-1);
    glVertex3d(-1,-1,1);

    glColor3ub(0,255,255);
    glVertex3d(1,1,-1);
    glVertex3d(1,-1,-1);
    glVertex3d(-1,-1,-1);
    glVertex3d(-1,1,-1);

    glColor3ub(255,0,255);
    glVertex3d(1,-1,1);
    glVertex3d(1,1,1);
    glVertex3d(-1,1,1);
    glVertex3d(-1,-1,1);

    glEnd();

    glFlush();
}
private:
    QTimer* update_timer_;
};

int main(int argc, char *argv[]){
    QApplication app(argc, argv);
    GLWidget widget;
    widget.resize(800,600);
    widget.show();
    return app.exec();
}
在这种情况下,我看不到对象,但如果我使用:

gluLookAt(0,0.00001, 10.0,0,0,0,0,0,1);

在这种情况下,我可以看到立方体(并且它看起来完全在屏幕中间)。< /P> 我是否忘记启用OpenGL中的某些功能,或者我使用

gluLookAt
函数的方式是否有问题?
提前感谢。

gluLookAt采用3个参数:

  • 摄像机位置
  • 指向看
  • 上向量
上方向向量不得与您第一次调用时所看到的方向(即第2-1个参数)平行

你的相机在
{0,0,10}
上,你看
{0,0,0}
所以你看-z方向。您的上方向向量是
{0,0,1}
,与您所面对的方向相同(
*-1

试试看(0.0,0.0,10.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0)