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

第一个OpenGL程序

2014-05-12 00:00 204 查看
OpenGL包含200多个函数,大致分为如下几类函数:

图元函数(primitive function)指定要生成屏幕图像的图元。包括两种类型:可在二维、三维或四维空间进行定义的几何图元,如多边形;离散实体,如位图。

属性函数(attribute function)负责控制图元的外观。这类函数定义了颜色、线型、材质属性、光照以及纹理。

观察函数(viewing function)指定摄像机的属性。 OpenGL提供一个虚拟摄像机,我们可以相对于由图元函数定义的对象设置摄像机的位置和朝向。我们也可以控制摄像机的镜头参数,以便制造出广角或长焦的效果。

控制函数(control function)允许我们启用或禁用各种OpenGL特性,如消隐、纹理映射和光照等。

查询函数(query function)允许我们决定某一特定系统的性能以及OpenGL状态变量的取值。

输入与窗口函数不属于OpenGL核心库,但是由于它们在交互式程序中的重要地位,这类函数已被包含在GLUT库中。这些函数使我们能够对屏幕中的窗口进行控制并使用鼠标和键盘。

下面这是一段C语言编写的一个简单的opengl, 作为以后测试其他opengl程序的框架程序,代码如下:

/* * 第一个opengl程序 * 功能:在黑色背景中绘制一个白色重矩形 * * */ #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); //opengl出于效率的考虑,对绘制命令进行了缓存,调用glFlush()函数将强制绘制器将结果立即输出 glFlush(); } void init() { //清屏, 颜色为黑色 glClearColor(0.0, 0.0, 0.0, 0.0); //设置填充色为白色 glColor3f(1.0, 1.0, 1.0); //设置裁剪视图 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); } int main(int argc, char **argv) { glutInit(&argc, argv); glutCreateWindow("simple"); glutDisplayFunc(display); init(); glutMainLoop(); //仅为了消除某些编译的警告, 无用代码 return 0; }


运行效果如下:



下面这段是Qt下的版本, 同样作为以后测试程序的模板程序,代码如下:

myglwidget.h

#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H

#include <QGLWidget>

class MyGLWidget : public QGLWidget
{
Q_OBJECT
public:
explicit MyGLWidget(QWidget *parent = 0);

signals:

public slots:

protected:
// Set up the rendering context, define display lists etc.:
void initializeGL();

void resizeGL(int w, int h);

void paintGL();

};

#endif // MYGLWIDGET_H


myglwidget.cpp

#include "myglwidget.h"

MyGLWidget::MyGLWidget(QWidget *parent) :
QGLWidget(parent)
{
}

void MyGLWidget::initializeGL()
{
//清屏, 颜色为黑色
glClearColor(0.0, 0.0, 0.0, 0.0);

//设置填充色为白色
glColor3f(1.0, 1.0, 1.0);

//设置裁剪视图
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
}

void MyGLWidget::resizeGL(int w, int h)
{
// setup viewport, projection etc.:
glViewport(0, 0, (GLint)w, (GLint)h);

}

void MyGLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
//opengl出于效率的考虑,对绘制命令进行了缓存,调用glFlush()函数将强制绘制器将结果立即输出
glFlush();
}


main.cpp

#include <QApplication>
#include "myglwidget.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyGLWidget win ;
win.show();

return a.exec();
}
运行效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息