程序运行截图如下:
抬头低头上看:
向四周看:
关键是放置摄像机,摄像机相关博文如下:
https://blog.csdn.net/qq78442761/article/details/81176920
为什么要加单位矩阵原因如下:
https://blog.csdn.net/qq78442761/article/details/81411959
重要伪代码如下:
void MyGLWidget::paintGL()
{
glLoadIdentity();
gluLookAt(0.0, 0.0, 0.0, m_x, m_y, -1.0f, 0.0f, 1.0f, 0.0f);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_textures);
glBegin(GL_QUADS);
glColor4ub(255, 255, 255, 255);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-0.5f, -0.5f, -0.5f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0.5f, -0.5f, -0.5f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0.5f, 0.5f, -0.5f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-0.5f, 0.5f, -0.5f);
glEnd();
}
void MyGLWidget::keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_Up:
m_y+=0.01;
break;
case Qt::Key_Left:
m_x-=0.01;
break;
case Qt::Key_Right:
m_x+=0.01;
break;
case Qt::Key_Down:
m_y-=0.01;
break;
default:
break;
}
update();
QOpenGLWidget::keyPressEvent(event);
}