OpenGL学习笔记--着色(探索3D编程的奇妙世界)

// glwidget3.h

#ifndef GLWIDGET3_H
#define GLWIDGET3_H

#include "../glwidget.h"

class GLWidget3 : public GLWidget
{   
    // Q_OBJECT //! 注意:此处不能有Q_OBJECT   
public:
    GLWidget3(int timerInterval = 0, QWidget *parent = 0);

protected:
    virtual void initializeGL();
    virtual void resizeGL( int width, int height );
    virtual void paintGL();
};

#endif // GLWIDGET3_H

 

// glwidget3.cpp

#include "glwidget3.h"

GLWidget3::GLWidget3(int timerInterval, QWidget *parent)
    : GLWidget(timerInterval, parent)
{
}

void GLWidget3::initializeGL()
{
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

void GLWidget3::resizeGL(int width, int height)
{
    height = height?height:1;
    glViewport( 0, 0, (GLint)width, (GLint)height );

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void GLWidget3::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存
    glLoadIdentity(); // 重置当前的模型观察矩阵

    // 三角形采用平滑着色
    glTranslatef(-1.5f,0.0f,-6.0f); // 相对当前所在的屏幕位置移动
    glBegin(GL_TRIANGLES); // 开始绘制三角形
    glColor3f(1.0f, 0.0f, 0.0f); // 红色
    glVertex3f( 0.0f, 1.0f, 0.0f); // 上顶点
    glColor3f(0.0f, 1.0f, 0.0f); // 绿色
    glVertex3f(-1.0f,-1.0f, 0.0f); // 左下顶点
    glColor3f(0.0f, 0.0f, 1.0f); // 蓝色
    glVertex3f( 1.0f,-1.0f, 0.0f); // 右下顶点
    glEnd(); // 三角形绘制结束

    /* 使用顺时针次序画正方形(左上->右上->右下->左下), 采用顺时针绘制的
       是对象的后表面.
     */
    // 四边形采用平面着色
    glTranslatef(3.0f,0.0f,0.0f); // 向x轴正方向移动3个单位
    glColor3f(0.5f, 0.5f, 1.0f);
    glBegin(GL_QUADS); // 开始绘制四边形
    glVertex3f(-1.0f, 1.0f, 0.0f); // 左上顶点
    glVertex3f( 1.0f, 1.0f, 0.0f); // 右上顶点
    glVertex3f( 1.0f,-1.0f, 0.0f); // 右下顶点
    glVertex3f(-1.0f,-1.0f, 0.0f); // 左下顶点
    glEnd(); // 四边形绘制结束
}

 

// main.cpp

#include "glwidget3.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    GLWidget *w = new GLWidget3;
    w->show();

    return a.exec();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值