您的位置:首页 > 运维架构

创建第一个OpenGL窗口

2016-03-26 17:59 344 查看
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QtOpenGL/QtOpenGL>
#include <QWidget>

class GLWidget : public QGLWidget
{
Q_OBJECT

public:
GLWidget(QGLWidget *parent = 0);
~GLWidget();
protected:
void initializeGL();
void paintGL();
void resizeGL(int width ,int height);
void keyPressEvent(QKeyEvent *e);
bool fullscreen;
};

#endif // GLWIDGET_H


#include "glwidget.h"
#include <QtOpenGL/QtOpenGL>
#include <gl/glu.h>

GLWidget::GLWidget(QGLWidget *parent)
: QGLWidget(parent)
{
fullscreen = false;
setWindowTitle("NeHe's OpenGL Framework");
if (fullscreen)
showFullScreen();

}

GLWidget::~GLWidget()
{

}
void GLWidget::initializeGL()
{
glShadeModel(GL_SMOOTH);
glClearColor(0.0,0.0,0.0,0.0);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

//      glBegin(GL_TRIANGLES);//GL_TRIANGLES代表为画三角形
//        glVertex3f(0.0f, 0.0f, 0.0f);//上顶点坐标
//        glVertex3f(-0.2f, -0.2f, 0.0f);//左下角坐标
//        glVertex3f(0.2f, -0.2f, 0.0f);//右下角坐标
//        glEnd();//结束画完
//      glLoadIdentity();
}
void GLWidget::resizeGL(int width, int height)
{
if (0 == height)
{
height = 1;
}
glViewport(0,0,(GLint)width,(GLint)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0,(GLfloat)width/(GLfloat)height,0.1,100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

}
void GLWidget::keyPressEvent(QKeyEvent *e)
{
switch(e->key())
{
//F1键为全屏和普通屏显示切换键
case Qt::Key_F1:
fullscreen = !fullscreen;
if(fullscreen)
showFullScreen();
else
{
showNormal();
setGeometry(0,0, 640, 480);

}
updateGL();
break;
//Ese为退出程序键
case Qt::Key_Escape:
close();
}

}


参考资料: OpenGL教程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: