最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年12月28日 09:11:37   作者:音視頻開(kāi)發(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。聽(tīng)說(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++ 預(yù)處理的圖靈完備之引言

    c++ 預(yù)處理的圖靈完備之引言

    這篇文章主要介紹了c++ 預(yù)處理的圖靈完備之引言,需要的朋友可以參考下
    2017-07-07
  • 淺析C++中模板的那點(diǎn)事

    淺析C++中模板的那點(diǎn)事

    C++中的模板可分為函數(shù)模板和類模板,而把函數(shù)模板的具體化稱為模板函數(shù),把類模板的具體化成為模板類。下面讓我們分別看看什么是函數(shù)模板和類模板吧
    2013-09-09
  • Qt實(shí)現(xiàn)電子時(shí)鐘

    Qt實(shí)現(xiàn)電子時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)電子時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 詳細(xì)分析C++ 異常處理

    詳細(xì)分析C++ 異常處理

    這篇文章主要介紹了C++ 異常處理的的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 在動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)中使用模板(dynamic libraries ,static libraries)

    在動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)中使用模板(dynamic libraries ,static libraries)

    給大家介紹一下在動(dòng)態(tài)庫(kù)(dynamic libraries)和靜態(tài)庫(kù)(static libraries)使用模板(template)的用法和解決方案。
    2017-11-11
  • Qt中暫停程序的幾種方法小結(jié)

    Qt中暫停程序的幾種方法小結(jié)

    本文主要介紹了Qt中暫停程序的幾種方法小結(jié),包含了4種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • c語(yǔ)言如何實(shí)現(xiàn)兩數(shù)之和

    c語(yǔ)言如何實(shí)現(xiàn)兩數(shù)之和

    這篇文章主要介紹了c語(yǔ)言如何實(shí)現(xiàn)兩數(shù)之和,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • c++函數(shù)指針使用示例分享

    c++函數(shù)指針使用示例分享

    這篇文章主要介紹了c++函數(shù)指針使用示例,需要的朋友可以參考下
    2014-03-03
  • 詳解應(yīng)用程序與驅(qū)動(dòng)程序通信DeviceIoControl

    詳解應(yīng)用程序與驅(qū)動(dòng)程序通信DeviceIoControl

    這種通信方式,就是驅(qū)動(dòng)程序和應(yīng)用程序自定義一種IO控制碼,然后調(diào)用DeviceIoControl函數(shù),IO管理器會(huì)產(chǎn)生一個(gè)MajorFunction為IRP_MJ_DEVICE_CONTROL,MinorFunction為自己定義的控制碼的IRP,系統(tǒng)就調(diào)用相應(yīng)的處理IRP_MJ_DEVICE_CONTROL的派遣函數(shù)
    2021-06-06
  • C++設(shè)計(jì)模式之簡(jiǎn)單工廠模式實(shí)例

    C++設(shè)計(jì)模式之簡(jiǎn)單工廠模式實(shí)例

    這篇文章主要介紹了C++設(shè)計(jì)模式之簡(jiǎn)單工廠模式實(shí)例,工廠模式有一種非常形象的描述,建立對(duì)象的類就如一個(gè)工廠,而需要被建立的對(duì)象就是一個(gè)個(gè)產(chǎn)品,需要的朋友可以參考下
    2014-09-09

最新評(píng)論

山东省| 蚌埠市| 长顺县| 新营市| 高唐县| 时尚| 巩义市| 柞水县| 呼玛县| 武宁县| 元朗区| 武川县| 汝南县| 上饶县| 兰考县| 光山县| 新安县| 黄骅市| 天气| 忻州市| 凌海市| 井冈山市| 桐柏县| 东山县| 普兰店市| 甘泉县| 蒲江县| 唐河县| 和静县| 安塞县| 巴东县| 合阳县| 临城县| 潼关县| 西乌珠穆沁旗| 兴和县| 安塞县| 麻阳| 甘德县| 仁寿县| 滨海县|