Не может видеть объект, когда камера идеально расположена спереди - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь запустить простой пример 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);

В этом случае я вижу куб (и он отлично смотрится в середине экрана).

Я забыл включить что-то в OpenGL или что-то не так в том, как я использую функцию gluLookAt? Заранее спасибо.

1 Ответ

0 голосов
/ 19 ноября 2018

gluLookAt принимает 3 параметра:

  • положение камеры
  • точка для просмотра
  • upvector

Upvector не должен быть параллельным направлению, в котором вы смотрите (иначе 2-й - 1-й аргумент), что имеет место в вашем первом вызове.

Ваша камера находится на {0,0,10}, и вы смотрите на {0,0,0}, поэтому вы смотрите в направлении -z.Ваш апвектор - {0,0,1} в том же направлении, что и вы (*-1).

Попробуйте gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

...