当相机完全放在前面时看不到物体
Cannot see object when camera is placed perfectly in front
我正在尝试 运行 一个简单的 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
函数的方式有问题?
提前致谢。
gluLookAt
有 3 个参数:
- 相机位置
- 点看
- upvector
upvector 不能 平行于你正在寻找的方向(也就是第二个 - 第一个参数),这是你第一次调用的情况。
你的相机在 {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);
我正在尝试 运行 一个简单的 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
函数的方式有问题?
提前致谢。
gluLookAt
有 3 个参数:
- 相机位置
- 点看
- upvector
upvector 不能 平行于你正在寻找的方向(也就是第二个 - 第一个参数),这是你第一次调用的情况。
你的相机在 {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);