QT笔记 -- opengl

Posted redips

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT笔记 -- opengl相关的知识,希望对你有一定的参考价值。

参考 http://blog.csdn.net/myths_0/article/details/24431597

用glut绘制一个茶壶

 

一句话,继承QGLWidget,实现下面三个函数,用子类定义窗口就行了。

三个函数:

    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);

 

下面是我的QGLWidget的子类的源码。

GLWidget.h

#pragma once
#include "qgl.h"
#include <gl/GLU.h>
#include <OpenGL/GLUT.H>

class GLWidget : public QGLWidget{
    Q_OBJECT

public:
    GLWidget(QWidget *parent = nullptr) :QGLWidget(parent){};
    ~GLWidget();

protected:
    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);

    void keyPressEvent(QKeyEvent *e);
};

GLWidget.cpp

#include "GLWidget.h"


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();
    glScalef(0.1,0.1,0.1);
    gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);
    glutWireTeapot(2);
}

void GLWidget::resizeGL(int width, int height){
    glViewport(0, 0, (GLint)width, (GLint)height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0, (GLfloat)width / (GLfloat)height, 0.1, 100.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void GLWidget::keyPressEvent(QKeyEvent *e){
    
}

 

以上是关于QT笔记 -- opengl的主要内容,如果未能解决你的问题,请参考以下文章

QT笔记 -- opengl

OpenGL_Qt学习笔记之_05(纹理映射)(转)

带有 OpenGL 的 Qt MDI 应用程序:如何获取有效的屏幕截图?

统一值和 OpenGL 着色器

OpenGL教程 学习笔记

OpenGL教程 学习笔记