前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt Creator OPenGL实例

Qt Creator OPenGL实例

作者头像
sofu456
发布2019-07-09 14:00:16
1.3K0
发布2019-07-09 14:00:16
举报
文章被收录于专栏:sofu456

1.坐标系变换

main.cpp

代码语言:javascript
复制
#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();
}
代码语言:javascript
复制
代码语言:javascript
复制

mainwindow.cpp

代码语言:javascript
复制
#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

代码语言:javascript
复制
代码语言:javascript
复制
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QGLWidget> #include <QOpenGLFunctions_3_0> class MainWindow : public QGLWidget,QOpenGLFunctions_3_0 { Q_OBJECT public: 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
代码语言:javascript
复制

2.纹理

main.cpp

代码语言:javascript
复制
#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();
}
代码语言:javascript
复制
代码语言:javascript
复制

mainwindow.h

代码语言:javascript
复制
代码语言:javascript
复制
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QGLWidget> #include <QOpenGLFunctions_3_0> class MainWindow : public QGLWidget,QOpenGLFunctions_3_0 { Q_OBJECT public: 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

代码语言:javascript
复制
#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);
}
代码语言:javascript
复制
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年09月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.坐标系变换
  • 2.纹理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档