第一个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程序的框架程序,代码如下:
运行效果如下:
下面这段是Qt下的版本, 同样作为以后测试程序的模板程序,代码如下:
myglwidget.h
myglwidget.cpp
main.cpp
图元函数(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(); }运行效果如下:
相关文章推荐
- main函数中的第一个Opengl程序-键盘按键处理
- 第一个opengl程序完整攻略
- 我的第一个OpenGL 程序
- OpenGL学习——第二课:第一个OpenGL程序
- VS2013+OpenGL环境搭建好之后运行第一个程序出错
- OpenGL实践3之第一个着色器程序2
- 第一个OpenGL程序
- OPENGL的入门第一个程序——Hello World
- OpenGL用法暨第一个OpenGL程序
- VB OpenGL绘图 -------我的第一个VB6.0 OpenGL程序
- OpenGL(2)——第一个 OpenGL 程序
- 配置openGL并且运行第一个程序
- openGL 学习1--ubuntu中安装openGL与第一个绘图程序
- 在vs2005下的第一个OpenGL程序
- OpenGL系统设计-2 第一个OpenGL程序
- 第一个OpenGL程序
- 第一个OpenGL程序
- 在vs2005下的第一个OpenGL程序。
- 用dev-c++写自己的第一个opengl程序
- OpenGL---Windows下配置与第一个OpenGL程序