Qt Creator OPenGL实例

来源:互联网 发布:tab在vb中什么意思 编辑:程序博客网 时间:2024/05/21 09:24

1.坐标系变换

main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.resize(800,400);    w.show();    return a.exec();}

mainwindow.cpp

#include "mainwindow.h"#include <QTimer>#include <math.h>MainWindow::MainWindow(QWidget *parent) :    QGLWidget(parent){    angle = 0;}MainWindow::~MainWindow(){}void MainWindow::resizeGL(int w, int h){    Q_UNUSED(w);Q_UNUSED(h);    glViewport(0,0,width(),height());}void MainWindow::paintGL(){    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glRotated(angle+10,1,0,0);    glRotated(angle+10,0,1,0);    glRotated(angle+10,0,0,1);    glBegin(GL_QUADS);        glColor3f(1,0,1);glVertex3f(0.9,0.9,0.0);        glColor3f(0,0,1);glVertex3f(-0.9,0.9,0.0);        glColor3f(1,0,0);glVertex3f(-0.9,-0.9,0.0);        glColor3f(1,1,0);glVertex3f(0.9,-0.9,0.0);    glEnd();    glFlush();}void MainWindow::initializeGL(){    initializeOpenGLFunctions();        timer();    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 MainWindow::timer(){    angle++;    updateGL();    const int interval = 100;    QTimer::singleShot(interval, this, SLOT(timer()));}

mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QGLWidget>#include <QOpenGLFunctions_3_0>class MainWindow : public QGLWidget,QOpenGLFunctions_3_0{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    void paintGL();    void initializeGL();    void resizeGL(int w, int h);    ~MainWindow();public slots:    void timer();private:    GLdouble angle;};#endif // MAINWINDOW_H


2.纹理

main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.resize(800,400);    w.show();    return a.exec();}
mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QGLWidget>#include <QOpenGLFunctions_3_0>class MainWindow : public QGLWidget,QOpenGLFunctions_3_0{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    void paintGL();    void initializeGL();    void resizeGL(int w, int h);    ~MainWindow();private:    GLubyte Point[136][136][3];    ///< 五角星坐标};#endif // MAINWINDOW_H
mainwindow.cpp
#include <QTimer>#include <math.h>const GLfloat PI = 3.1415926536f;MainWindow::MainWindow(QWidget *parent) :    QGLWidget(parent){    for(short i=0;i<136;++i)    {        for(short j=0;j<136;++j)        {            Point[i][j][0] = cos(i * PI/18)*255;            Point[i][j][1] = sin(j * PI/18)*255;            Point[i][j][2] = 0.4*255;      // Z值        }    }}MainWindow::~MainWindow(){}void MainWindow::resizeGL(int w, int h){    Q_UNUSED(w);Q_UNUSED(h);    glViewport(0,0,width(),height());}void MainWindow::paintGL(){    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glBegin(GL_QUADS);        glTexCoord2f(0,0);glVertex3f(1,1,0.0);        glTexCoord2f(1,0);glVertex3f(-1,1,0.0);        glTexCoord2f(1,1);glVertex3f(-1,-1,0.0);        glTexCoord2f(0,1);glVertex3f(1,-1,0.0);    glEnd();    glFlush();}void MainWindow::initializeGL(){    initializeOpenGLFunctions();        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);    glTexImage2D(GL_TEXTURE_2D,0,3,136,136,0,GL_RGB,GL_UNSIGNED_BYTE,&Point[0][0]);    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);    glEnable(GL_TEXTURE_2D);}

0 0
原创粉丝点击