您的位置:首页 > 运维架构

2.OpenGL学习之基本图元

2017-12-04 15:13 411 查看

基本图元

  在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学习系列导航
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: