【Qt OpenGL教程】25:变形和从文件中加载3D物体

本教程讲解如何使用Qt和OpenGL从文件加载3D模型并实现平滑变形效果。教程中,你将学习加载模型、计算变形过程,并通过实例演示如何在程序中实现模型间的变形过渡。
摘要由CSDN通过智能技术生成

第25课:变形和从文件中加载3D物体 (参照NeHe)

这次教程中,我们将学会如何从文件中加载3D模型,并且平滑的从一个模型变形为另一个模型。在这一课里,我们将介绍如何实现模型的变形过程,这将会是效果很棒的一课!


程序运行时效果如下:



下面进入教程:


我们这次将在第01课的基础上修改代码,其中一些在前面教程中反复出现的,我就不会多解释了。首先打开myglwidget.h文件,将类声明更改如下:

#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H

#include <QWidget>
#include <QGLWidget>

struct VERTEX                                       //顶点结构体
{
    float x, y, z;
};

struct OBJECT                                       //物体结构体
{
    int verts;                                      //物体中顶点的个数
    QVector<VERTEX> vPoints;                        //包含顶点数据的向量
};

class MyGLWidget : public QGLWidget
{
    Q_OBJECT
public:
    explicit MyGLWidget(QWidget *parent = 0);
    ~MyGLWidget();

protected:
    //对3个纯虚函数的重定义
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();

    void keyPressEvent(QKeyEvent *event);           //处理键盘按下事件

private:
    void loadObject(QString filename, OBJECT *k);   //从文件加载一个模型
    VERTEX calculate(int i);                        //计算第i个顶点变形过程每一步的位移

private:
    bool fullscreen;                                //是否全屏显示

    GLfloat m_xRot;                                 //x轴旋转角度
    GLfloat m_yRot;                                 //y轴旋转角度
    GLfloat m_zRot;                                 //z轴旋转角度
    GLfloat m_xSpeed;                               //x轴旋转速度
    GLfloat m_ySpeed;                               //y轴旋转速度
    GLfloat m_zSpeed;                               //z轴旋转速度
    GLfloat m_xPos;                                 //x轴坐标
    GLfloat m_yPos;                                 //y轴坐标
    GLfloat m_zPos;                                 //z轴坐标

    int m_Key;                                      //物体的标示符
    int m_Step;                                     //当前变形步数
    int m_Steps;                                    //变形的总步数
    bool m_MorphOrNot;                              //是否在变形过程

    OBJECT m_Morph1;                                //要绘制的4个物体
    OBJECT m_Morph2;
    OBJECT m_Morph3;
    OBJECT m_Morph4;
    OBJECT m_Helper;                                //协助绘制变形过程的物体(中间模型)
    OBJECT *m_Src;                                  //变形的源物体
    OBJECT *m_Dest;                                 //变形的目标物体
};

#endif // MYGLWIDGET_H
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值