Qt5--OpenGL加载3D模型--立方体

原文出处:https://www.infotutoriales.info/2016/10/opengl-con-qt.html?m=1

 效果图,使用三个滑块来调节3D图像的三个轴,来让3D图像旋转,然后在实际中三个滑块的值可以通过其他数据来加载。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

添加类mywidget

  • 右键单击项目,添加新的…选择C ++类
  • 给Widget命名,在“ 自定义” 基类中写入WidgetOpenGL

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QOpenGLWidget>
#include <QOpenGLFunctions>

#include <QGLFramebufferObjectFormat>

class MyWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
public:

    explicit MyWidget(QWidget *parent = 0);

protected:
    void initializeGL() Q_DECL_OVERRIDE;
    void resizeGL(int w, int h)Q_DECL_OVERRIDE;
    void paintGL()Q_DECL_OVERRIDE;
    void graficarLineas();

public:
    double rotate_y=0;
    double rotate_x=0;
    double rotate_z=0;

private:
};

#endif // MYWIDGET_H

mywidget.c

#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent):QOpenGLWidget(parent)
{

}

void MyWidget::initializeGL()
{
    initializeOpenGLFunctions();

    glEnable(GL_DEPTH_TEST);
}

void MyWidget::resizeGL(int w, int h)
{
    glViewport(0, 0, w, h);
}

void MyWidget::paintGL()
{
     // 清除屏幕和Z缓冲区
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glDepthFunc(GL_LESS);
    glEnable(GL_DEPTH_TEST);
    glShadeModel(GL_SMOOTH);

    // 重置转换
    glLoadIdentity();

    // 当用户更改“ rotate_x”和“ rotate_y”时旋转
    glRotatef( rotate_x, 1.0, 0.0, 0.0 );
    glRotatef( rotate_y, 0.0, 1.0, 0.0 );
    glRotatef( rotate_z, 0.0, 0.0, 1.0 );

    // 前侧:多色侧
    glBegin(GL_POLYGON); // 显示一个矩形,就使用GL_POLYGON

    glColor3f( 1.0, 0.0, 0.0 );
    glVertex3f(  0.5, -0.5, -0.5 );      // P1 是红色
    glColor3f( 0.0, 1.0, 0.0 );
    glVertex3f(  0.5,  0.5, -0.5 );      // P2 是绿色
    glColor3f( 0.0, 0.0, 1.0 );
    glVertex3f( -0.5,  0.5, -0.5 );      // P3 是蓝色
    glColor3f( 1.0, 0.0, 1.0 );
    glVertex3f( -0.5, -0.5, -0.5 );      // P4 是紫色

    glEnd();

     // 背面:白色面
    glBegin(GL_POLYGON);
    glColor3f(   1.0,  1.0, 1.0 );
    glVertex3f(  0.5, -0.5, 0.5 );
    glVertex3f(  0.5,  0.5, 0.5 );
    glVertex3f( -0.5,  0.5, 0.5 );
    glVertex3f( -0.5, -0.5, 0.5 );
    glEnd();

    // 右侧:紫色侧
    glBegin(GL_POLYGON);
    glColor3f(  1.0,  0.0,  1.0 );
    glVertex3f( 0.5, -0.5, -0.5 );
    glVertex3f( 0.5,  0.5, -0.5 );
    glVertex3f( 0.5,  0.5,  0.5 );
    glVertex3f( 0.5, -0.5,  0.5 );
    glEnd();

    // 左侧:绿色侧
    glBegin(GL_POLYGON);
    glColor3f(   0.0,  1.0,  0.0 );
    glVertex3f( -0.5, -0.5,  0.5 );
    glVertex3f( -0.5,  0.5,  0.5 );
    glVertex3f( -0.5,  0.5, -0.5 );
    glVertex3f( -0.5, -0.5, -0.5 );
    glEnd();

    // 顶部:蓝色面
    glBegin(GL_POLYGON);
    glColor3f(   0.0,  0.0,  1.0 );
    glVertex3f(  0.5,  0.5,  0.5 );
    glVertex3f(  0.5,  0.5, -0.5 );
    glVertex3f( -0.5,  0.5, -0.5 );
    glVertex3f( -0.5,  0.5,  0.5 );
    glEnd();

    // 下侧:红色侧
    glBegin(GL_POLYGON);
    glColor3f(   1.0,  0.0,  0.0 );
    glVertex3f(  0.5, -0.5, -0.5 );
    glVertex3f(  0.5, -0.5,  0.5 );
    glVertex3f( -0.5, -0.5,  0.5 );
    glVertex3f( -0.5, -0.5, -0.5 );
    glEnd();

    graficarLineas();
    glFlush();
    this->makeCurrent();
}

void MyWidget::graficarLineas()
{
    glBegin(GL_LINES);
    glColor3f(1,0,0);
    glVertex3f(0,0,0);
    glVertex3f(20,0,0);

    glColor3f(1,1,0);
    glVertex3f(0,0,0);
    glVertex3f(0,20,0);

    glColor3f(0,1,1);
    glVertex3f(0,0,0);
    glVertex3f(0,0,20);
    glEnd();
}

修改.pro文件–添加opengl和库

#-------------------------------------------------
#
# Project created by QtCreator 2016-10-18T20:43:46
#
#-------------------------------------------------

QT       += core gui opengl
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = opengl
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    mywidget.cpp

HEADERS  += mainwindow.h \
    mywidget.h

FORMS    += mainwindow.ui
LIBS += -lOpengl32
DISTFILES +=

将窗体组件提升(Protmote to)为上面的那个自定义的类

https://github.com/hollowmaster1496/QtOpenGL-OBJ-LOADER

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章