欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

QT+OpenGL實(shí)現(xiàn)簡(jiǎn)單圖形的繪制

 更新時(shí)間:2022年12月28日 09:11:37   作者:音視頻開發(fā)老舅  
這篇文章主要為大家詳細(xì)介紹了如何利用QT和OpenGL實(shí)現(xiàn)簡(jiǎn)單圖形的繪制,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下

繼承于QOpenGLWindow,描畫出來(lái)。新建類myopengl,頭文件如下:

#ifndef MYOPENGL_H
#define MYOPENGL_H
 
#include <QWidget>
#include <QOpenGLWidget>
#include <QOpenGLWindow>
#include <QGLWidget>
#include <QGLFunctions>
#include <QOpenGLFunctions>
#include <QtOpenGL>
#include <QOpenGLBuffer>
#include <QOpenGLShaderProgram>
#include <QMatrix4x4>
#include <GL/glu.h>
 
 
class myopenGL:public QOpenGLWindow, protected QOpenGLFunctions
{
    Q_OBJECT
    public:
        explicit myopenGL(QWindow *parent = 0);
        ~myopenGL();
 
 
    protected:
        void initializeGL() override;
        void paintGL() override;
        void resizeGL(int width, int height) override;
        void loadGLTextures();
    protected:
        GLfloat rTri;
        GLfloat rQuad;
        GLfloat xRot, yRot, zRot;
        GLuint texture[1];
    private:
 
 
 
 
 
};
 
#endif // MYOPENGL_H

myopengl.cpp 代碼如下:

#include "myopengl.h"
 
#include <QImage>
#include <QDebug>
 
myopenGL::myopenGL(QWindow *parent)
{
    rTri = 0.0;
    rQuad = 0.0;
    xRot = yRot = zRot = 0.0;
}
 
myopenGL::~myopenGL()
{
 
}
void myopenGL::loadGLTextures()
{
    QImage tex, buf;
    if ( !buf.load( "./msbg_blue.png" ) )
    {
      qWarning( "Could not read image file, using single-color instead." );
      QImage dummy( 128, 128, QImage::Format_RGB32 );
      dummy.fill( Qt::green );
      buf = dummy;
    }
    tex = QGLWidget::convertToGLFormat( buf );
 
    glGenTextures( 1, &texture[0] );
 
    glBindTexture( GL_TEXTURE_2D, texture[0] );
    glTexImage2D( GL_TEXTURE_2D, 0, 3, tex.width(), tex.height(), 0,
        GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );
 
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
}
//初始化opengl窗口部件
void myopenGL::initializeGL()
{
    initializeOpenGLFunctions();
    glClearColor(0.0,0.0,0.0,1.0);
    glShadeModel(GL_SMOOTH);
 
    glClearDepth(1.0);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
}
 
//繪制opengl窗口
void myopenGL::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(-1.5f,0.0f,-6.0f);
    glRotatef( rTri,  0.0,  1.0,  0.0 );
    glBegin(GL_TRIANGLES);
    glColor3f( 1.0, 0.0, 0.0 );
    glVertex3f(  0.0,  1.0,  0.0 );
    glColor3f( 0.0, 1.0, 0.0 );
    glVertex3f( -1.0, -1.0,  1.0 );
    glColor3f( 0.0, 0.0, 1.0 );
    glVertex3f(  1.0, -1.0,  1.0 );
 
    glColor3f( 1.0, 0.0, 0.0 );
    glVertex3f(  0.0,  1.0,  0.0 );
    glColor3f( 0.0, 0.0, 1.0 );
    glVertex3f(  1.0, -1.0,  1.0 );
    glColor3f( 0.0, 1.0, 0.0 );
    glVertex3f(  1.0, -1.0, -1.0 );
 
    glColor3f( 1.0, 0.0, 0.0 );
    glVertex3f(  0.0,  1.0,  0.0 );
    glColor3f( 0.0, 1.0, 0.0 );
    glVertex3f(  1.0, -1.0, -1.0 );
    glColor3f( 0.0, 0.0, 1.0 );
    glVertex3f( -1.0, -1.0, -1.0 );
 
    glColor3f( 1.0, 0.0, 0.0 );
    glVertex3f(  0.0,  1.0,  0.0 );
    glColor3f( 0.0, 0.0, 1.0 );
    glVertex3f( -1.0, -1.0, -1.0 );
    glColor3f( 0.0, 1.0, 0.0 );
    glVertex3f( -1.0, -1.0,  1.0 );
    glEnd();
 
    glTranslatef(3.0f,0.0f,-7.0f);
    glRotatef( rQuad,  0.0,  0.0,  1.0 );
    glRotatef( rTri,  0.0,  1.0,  0.0 );
    glRotatef( rQuad,  0.0,  0.0,  1.0 );
    glBegin(GL_QUADS);
    glColor3f( 0.0, 1.0, 0.0 );
    glVertex3f(  1.0,  1.0, -1.0 );
    glVertex3f( -1.0,  1.0, -1.0 );
    glVertex3f( -1.0,  1.0,  1.0 );
    glVertex3f(  1.0,  1.0,  1.0 );
 
    glColor3f( 1.0, 0.5, 0.0 );
    glVertex3f(  1.0, -1.0,  1.0 );
    glVertex3f( -1.0, -1.0,  1.0 );
    glVertex3f( -1.0, -1.0, -1.0 );
    glVertex3f(  1.0, -1.0, -1.0 );
 
    glColor3f( 1.0, 0.0, 0.0 );
    glVertex3f(  1.0,  1.0,  1.0 );
    glVertex3f( -1.0,  1.0,  1.0 );
    glVertex3f( -1.0, -1.0,  1.0 );
    glVertex3f(  1.0, -1.0,  1.0 );
 
    glColor3f( 1.0, 1.0, 0.0 );
    glVertex3f(  1.0, -1.0, -1.0 );
    glVertex3f( -1.0, -1.0, -1.0 );
    glVertex3f( -1.0,  1.0, -1.0 );
    glVertex3f(  1.0,  1.0, -1.0 );
 
    glColor3f( 0.0, 0.0, 1.0 );
    glVertex3f( -1.0,  1.0,  1.0 );
    glVertex3f( -1.0,  1.0, -1.0 );
    glVertex3f( -1.0, -1.0, -1.0 );
    glVertex3f( -1.0, -1.0,  1.0 );
 
    glColor3f( 1.0, 0.0, 1.0 );
    glVertex3f(  1.0,  1.0, -1.0 );
    glVertex3f(  1.0,  1.0,  1.0 );
    glVertex3f(  1.0, -1.0,  1.0 );
    glVertex3f(  1.0, -1.0, -1.0 );
    glEnd();
    rTri += 0.2;
     rQuad -= 0.15;
}
//處理窗口大小
void myopenGL::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();                   //重置模型觀察矩陣
}

main.cpp修改代碼如下:

#include "myopengl.h"
#include <QGuiApplication>
#include <QPushButton>
 
int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
    QGuiApplication a(argc, argv);
    myopenGL w;
    w.resize(QSize(1280,720));
    //QPushButton ptn(&w);
 
    w.show();
 
    return a.exec();
}

效果圖:

這么簡(jiǎn)單的效果用了就走了好多彎路。跟QT的版本有關(guān)系。有的人用的是QOpenGLWindow,有的人用的是QOpenGLWidget。聽說(shuō)推薦用的是QOpenGLWidget

到此這篇關(guān)于QT+OpenGL實(shí)現(xiàn)簡(jiǎn)單圖形的繪制的文章就介紹到這了,更多相關(guān)QT OpenGL繪制圖形內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中的變長(zhǎng)參數(shù)深入理解

    C++中的變長(zhǎng)參數(shù)深入理解

    變長(zhǎng)參數(shù)的函數(shù),即參數(shù)個(gè)數(shù)可變、參數(shù)類型不定的函數(shù)。設(shè)計(jì)一個(gè)參數(shù)個(gè)數(shù)可變、參數(shù)類型不定的函數(shù)是可能的,最常見的例子是printf函數(shù)、scanf函數(shù)和高級(jí)語(yǔ)言的Format函數(shù)。最近的一個(gè)項(xiàng)目中就遇到這么一個(gè)相關(guān)的問(wèn)題,感興趣的朋友們下面來(lái)一起看看吧。
    2016-10-10
  • C語(yǔ)言實(shí)現(xiàn)推箱子項(xiàng)目

    C語(yǔ)言實(shí)現(xiàn)推箱子項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)推箱子項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • c++?qt自定義搜索編輯框的實(shí)現(xiàn)方法

    c++?qt自定義搜索編輯框的實(shí)現(xiàn)方法

    這篇文章主要介紹了c++?qt自定義搜索編輯框,通過(guò)自定義QLineEdit,在編輯框里添加布局,將按鈕設(shè)置在右邊,當(dāng)點(diǎn)擊按鈕搜索按鈕時(shí)發(fā)送信號(hào)到主界面做相應(yīng)的操作,需要的朋友可以參考下
    2022-03-03
  • codeblocks 對(duì)‘cv::waitKey(int)’未定義的引用方式

    codeblocks 對(duì)‘cv::waitKey(int)’未定義的引用方式

    今天小編就為大家分享一篇codeblocks 對(duì)‘cv::waitKey(int)’未定義的引用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • C/C++ 中sizeof(''a'')對(duì)比詳細(xì)介紹

    C/C++ 中sizeof(''a'')對(duì)比詳細(xì)介紹

    這篇文章主要介紹了C/C++ 中sizeof('a')的值對(duì)比詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C/C++字節(jié)序的深入理解

    C/C++字節(jié)序的深入理解

    本文主要介紹了C/C++字節(jié)序的深入理解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++ AVLTree高度平衡的二叉搜索樹深入分析

    C++ AVLTree高度平衡的二叉搜索樹深入分析

    這篇文章主要介紹了C++ AVLTree高度平衡的二叉搜索樹,二叉搜索樹雖可以縮短查找的效率,但如果數(shù)據(jù)有序或接近有序二叉搜索樹將退化為單支樹,查找元素相當(dāng)于在順序表中搜索元素,效率低下
    2023-03-03
  • 帶你從編碼角度分析C++重載原理

    帶你從編碼角度分析C++重載原理

    這篇文章主要為大家介紹了從編碼角度分析C++重載原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • C語(yǔ)言運(yùn)用函數(shù)的遞歸實(shí)現(xiàn)漢諾塔

    C語(yǔ)言運(yùn)用函數(shù)的遞歸實(shí)現(xiàn)漢諾塔

    遞歸(recursive)函數(shù)是“自己調(diào)用自己”的函數(shù),無(wú)論是采用直接或間接調(diào)用方式。間接遞歸意味著函數(shù)調(diào)用另一個(gè)函數(shù)(然后可能又調(diào)用第三個(gè)函數(shù)等),最后又調(diào)用第一個(gè)函數(shù)。因?yàn)楹瘮?shù)不可以一直不停地調(diào)用自己,所以遞歸函數(shù)一定具備結(jié)束條件
    2022-07-07
  • 基于C語(yǔ)言的開源csv解析庫(kù)MiniCSV的使用示例

    基于C語(yǔ)言的開源csv解析庫(kù)MiniCSV的使用示例

    這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言中的開源csv解析庫(kù)——MiniCSV的使用示例,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07

最新評(píng)論