第一个OpenGL程序

   OpenGL包含200多个函数,大致分为如下几类函数:

  • 图元函数(primitive function)指定要生成屏幕图像的图元。包括两种类型:可在二维、三维或四维空间进行定义的几何图元,如多边形;离散实体,如位图。
  • 属性函数(attribute function)负责控制图元的外观。这类函数定义了颜色、线型、材质属性、光照以及纹理。
  • 观察函数(viewing function)指定摄像机的属性。 OpenGL提供一个虚拟摄像机,我们可以相对于由图元函数定义的对象设置摄像机的位置和朝向。我们也可以控制摄像机的镜头参数,以便制造出广角或长焦的效果。
  • 控制函数(control function)允许我们启用或禁用各种OpenGL特性,如消隐、纹理映射和光照等。
  • 查询函数(query function)允许我们决定某一特定系统的性能以及OpenGL状态变量的取值。
  • 输入与窗口函数不属于OpenGL核心库,但是由于它们在交互式程序中的重要地位,这类函数已被包含在GLUT库中。这些函数使我们能够对屏幕中的窗口进行控制并使用鼠标和键盘。



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

/*
 * 第一个opengl程序
 * 功能:在黑色背景中绘制一个白色重矩形
 * 
 * 
 */ 

#include 

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 

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 
#include "myglwidget.h"

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

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


你可能感兴趣的:(OpenGL)