基本图元
在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