首页 > 学院 > 开发设计 > 正文

OpenGL编程指南1:OpenGL简介

2019-11-06 09:30:35
字体:
来源:转载
供稿:网友

1.什么是OpenGL?

OpenGL对场景中的图像进行渲染时所执行的主要图形操作:

根据几何图元创建形状,从而建立物体的数字描述。(OpenGL把点、直线、多边形和位图作为基本的图元)。在三维空间中排列物体,并选择观察复合场景的有利视角。计算所有物体的颜色。颜色可以有应用程序明确指定,可以根据特定的光照条件确定,也可以通过把纹理贴到物体的表面而获得,或者是上述三种的混合产物。把物体的数学描述以及与物体相关的颜色信息转换为屏幕上的像素。

2.一段简单的OpenGL代码

首先介绍几个术语:

渲染(Rendering):计算机根据模型创建图像的过程。模型(model):根据几何图元建立,也可以称为物体。几何图元:包括点、直线和多边形等,它们是通过顶点(Vertex)指定的。位平面:一块内存区域,保存了屏幕上每个像素的1个位的信息。

最终完成了渲染的图像是由在屏幕上绘制的像素组成的。像素是显示硬件可以在屏幕上显示的最小可视化元素。在内存中,和像素有关的信息(如像素的颜色)组织成位平面的形式。

#include "stdafx.h"#include <stdio.h>#include <gl/GLUT.H>void myDisplay(void){	glClearColor(0, 0, 0, 0); //窗口清除为黑色	glClear(GL_COLOR_BUFFER_BIT); //实际完成窗口清除任务	glColor3f(1.0, 1.0, 1.0);  //确定绘制物体时所使用的颜色	glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); //确定所使用的坐标系统	glBegin(GL_POLYGON);	glVertex3f(0.25, 0.25, 0.0);	glVertex3f(0.75, 0.25, 0.0);	glVertex3f(0.75, 0.75, 0.0);	glVertex3f(0.25, 0.75, 0.0);	glEnd();	glFlush(); //保证了绘图命令将实际执行}void myReshape(GLsizei w, GLsizei h){	glViewport(0, 0, w, h);	glMatrixMode(GL_PROJECTION);//当前矩阵	glLoadIdentity(); //将当前矩阵置换为单位阵	if (w <= h)		gluOrtho2D(-1.0, 1.5, -1.5, 1.5*(GLfloat)h / (GLfloat)w); //定义二维正视投影矩阵	else		gluOrtho2D(-1.0, 1.5*(GLfloat)h / (GLfloat)w, -1.5, 1.5);	glMatrixMode(GL_MODELVIEW); //指明当前矩阵}int _tmain(int argc, char** argv){	glutInit(&argc, argv);	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);	glutInitWindowSize(400, 400);	glutInitWindowPosition(200, 200);	glutCreateWindow("Square");	glutReshapeFunc(myReshape);	glutDisplayFunc(myDisplay);	glutMainLoop();	return 0;}解析:

函数myDisplay:

glClearColor:清除背景。glClear:将buffer设置为预先设定的值。参数GL_COLOR_BUFFER_BIT表明现在可以向buffer中写入颜色值。glColor3f:设置当前颜色。后面跟着的参数代表参数个数。3:是指带有三个参数,分别为红绿蓝。f:表示参数类型类型,GLfloat。glBegin和glEnd是一一对应的。这两个函数限定了一组或者多组图元的顶点定义。在这两个函数之间就是我们绘制的由多个顶点组成的图元。函数的参数表明了所绘制的涂元的类型。GL_POLYGON表明了所绘制的图形为三角形。glVertex指定顶点。同样函数明中的数字表明参数个数。参数分别为x,y或x、y、z。紧跟数字后面的字母表示数据类型。glFlush迫使OpenGL函数在有限时间里运行。glFlush清空所有buffer,使所有发出的命令能在规定的时间内运行。一定不能忘记这一条语句。只有加了这一句,前面的命令才能执行。函数myReshape:

glViewport(Glint x,Glint y,GLsizei width,GLsizei height)设置视口。视口是一个矩形,x,y为视口左下角的坐标,以像素为单位,缺省值为(0,0)。width和height分别为视口的宽和高。OpenGl context第一次贴到窗口上时width和height分别设置成窗口的大小。glMatrixMode 指明哪一个矩阵为当前矩阵。本例中GL_PROJECTION指明投影矩阵堆栈为随后的矩阵操作的目标。GL_MODELVIEW指明模型视景矩阵。glLoadIdentity将当前矩阵置换为单位阵。gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)定义二维正视投影矩阵。left,right分别设置左右垂直切平面的坐标,bottom,top分别设置上下垂直切平面的坐标。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表