【Qt OpenGL教程】26:剪裁平面,蒙板缓存和反射

这篇Qt OpenGL教程详细讲解了如何使用剪裁平面进行图形裁剪,以及蒙板缓存在图形渲染中的应用,同时探讨了实现反射效果的技术要点。通过学习,读者将能够掌握在Qt环境下利用OpenGL进行复杂图形处理的方法。
摘要由CSDN通过智能技术生成
第26课:剪裁平面,蒙板缓存和反射 (参照NeHe)
这次教程中,我们将学会如何创建镜面显示效果,它利用到剪裁平面,蒙板缓存等OpenGL中一些高级的技巧。在这课里,我们将创建真正的反射,基于物理的,相信你一定很期待!


程序运行时效果如下:


下面进入教程:

我们这次将在第07课的基础上修改代码(有不少重复的地方),我会对新增部分一一解释。首先打开myglwidget.h文件,将类声明更改如下:
#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H

#include <QWidget>
#include <QGLWidget>

class GLUquadric;
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 drawObject();                              //绘制球体
    void drawFloor();                               //绘制地面

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

    QString m_FileName[3];                          //图片的路径及文件名
    GLuint m_Texture[3];                            //储存一个纹理

    GLfloat m_xRot;                                 //x旋转角度
    GLfloat m_yRot;                                 //y旋转角度
    GLfloat m_xSpeed;                               //x旋转速度
    GLfloat m_ySpeed;                               //y旋转速度
    GLfloat m_Deep;                                 //深入屏幕的距离
    GLfloat m_Height;                               //球离开地面的高度

    GLUquadric *m_Quadratic;                        //二次几何体
};

#endif // MYGLWIDGET_H
首先我们看到m_FileName和m_Texture变成长度为3的数组,因为我们会使用三张图片来加载三个不同的纹理。接着我们增加了GLfloat变量m_Height来表示球体离开地面的高度,GLUquadric指针m_Quadratic来指向一个二次几何体对象( 当然我们应该在类前面增加GLUquadric的声明)。最后,我们增加了两个函数声明drawObject()和drawFloor(),依次用来绘制球体和地面。

接下来,我们需要打开myglwidget.cpp,在构造函数中初始化新增变量,并修改析构函数,很简单不多解释,具体代码如下:
MyGLWidget::MyGLWidget(QWidget *parent) :
    QGLWidget(parent)
{
    fullscreen = false;
    m_FileName[0] = "D:/QtOpenGL/QtImage/Envwall.bmp";  //应根据实际存放图片的路径进行修改
    m_FileName[1] = "D:/QtOpenGL/QtImage/Ball.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值