2.OpenGL学习之基本图元

基本图元

  在OpenGL中,基本图形元素如点、线、折线和多边形都是由一个或多个顶点所定义。这些顶点必须处于glBegin()和glEnd()函数之间。glBegin()的参数确定要画的对象,指示OpenGL开始收集绘制对象的元素数据,glEnd()函数命令结束并完成对象的元素列表,并将所有数据送到OpenGL图形绘制管道中进行绘制。例如

glBegin(GL_POINTS);
        glVertex3f(0.0f, 1.0f, -6.0f);
        glVertex3f(-1.0f,-1.0f, -6.0f);
        glVertex3f(1.0f,-1.0f, -6.0f);
glEnd();

  常数GL_POINTS内置于OpenGL中。为了绘制其他类型的元素,可以将GL_POINTS换成GL_LINES、GL_POLYGON等。绘制直线,参数为GL_LINES;绘制折线(在OpenGL称为线条),参数为GL_LINE_STRIP;绘制多边形,参数为GL_LINE_LOOP,,绘制的多边形不能填充颜色或图案;绘制填充多边形,参数为GL_POLYGON。其他五种元素:
这里写图片描述

绘制图元

  绘制三角形和点来演示如何绘制图元。头文件如下,添加两个私有函数drawTriangles和drawPoints。

#ifndef MY_QGLWIDGET_H
#define MY_QGLWIDGET_H

#include <QGLWidget>

class MyQGLWidget : public QGLWidget
{
    Q_OBJECT

public:
    MyQGLWidget(QWidget *parent = 0);

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

private:
    void drawTriangles();
    void drawPoints();
};

#endif

两个函数的定义如下所示:

void MyQGLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    drawPoints();
}

void MyQGLWidget::drawTriangles()
{
    glBegin(GL_TRIANGLES);
        glVertex3f(0.0f, 1.0f, -6.0f);
        glVertex3f(-1.0f,-1.0f, -6.0f);
        glVertex3f(1.0f,-1.0f, -6.0f);
    glEnd();
}

void MyQGLWidget::drawPoints()
{
    glBegin(GL_POINTS);
        glVertex3f(0.0f, 1.0f, -6.0f);
        glVertex3f(-1.0f,-1.0f, -6.0f);
        glVertex3f(1.0f,-1.0f, -6.0f);
    glEnd();
}

当paintGL()函数中调用drawTriangles()函数,运行结果:

这里写图片描述

当paintGL()函数中调用drawPoints()函数,运行结果:

这里写图片描述

基本的OpenGL语法

  OpenGl基本库中的函数名要以gl为前缀,并且函数名中的每一个组成词的第一个字母要大写。下面例子给出了这个命名规范的例子:
glBegin, glClear, glEnd

  有些函数要求一个或多个变量用符号常量赋值,如参数名、参数的值或特定的模式。所以这些常量均以大写字母GL开发。另外,常量名中每一个组成词均采用大写,单词之间用下划线(_)分割开。下面列出OpenGL函数使用的几百个符号常量中的几个例子:
GL_POINTS, GL_2D, GL_RGB, GLPOLYGON

  OpenGL函数也要求专门的数据类型,例如,OpenGL函数的参数可以要求一个32位整数类型的值。但是,不同机器上的整数描述范围可能有所不同。OpenGL采用专门的内置数据类型名来描述数据类型,例如:
GLbyte, GLshort, GLint, GLfloat

代码下载
OpenGL学习系列导航

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值