150 likes | 560 Views
OpenGL 编程基本流程. 康健超. OpenGL 介绍. OpenGL 是图形硬件的一个软件接口。它的主要作用是将二维或三维的对象绘入一个帧缓冲区中。对象被描述为一系列的顶点(用来定义几何对象)或像素 (用来定义图像)。 OpenGL 对数据进行几个步骤的处理从而将其转换成像素,这些像素将在帧缓冲区中形成最终需要的图形 。. OpenGL 介绍. OpenGL 是一种 C/S 架构,没有提供用于描述三维物体模型的高层函数,仅仅提供少数几个基本图元函数。 OpenGL 的移植性好、使用简单、效率高。
E N D
OpenGL编程基本流程 康健超
OpenGL介绍 • OpenGL是图形硬件的一个软件接口。它的主要作用是将二维或三维的对象绘入一个帧缓冲区中。对象被描述为一系列的顶点(用来定义几何对象)或像素(用来定义图像)。OpenGL 对数据进行几个步骤的处理从而将其转换成像素,这些像素将在帧缓冲区中形成最终需要的图形。
OpenGL介绍 • OpenGL是一种C/S架构,没有提供用于描述三维物体模型的高层函数,仅仅提供少数几个基本图元函数。 • OpenGL的移植性好、使用简单、效率高。 • OpenGL的功能如下:建模、变换、颜色模式设置、纹理映射、位图显示和图像增强、双缓冲。
OpenGL介绍 • OpenGL包括大约250个函数(其中200个在OpenGL核心中,其他50个在OpenGL使用库中),可以使用它们来指定物体和操作,以创建交互式三维应用程序。 • OpenGL包括实用库(GLU)、实用工具包(GLUT) • OpenGL函数中包含前缀gl,且每个单词的首字母都是大写,如glColor3f()。同样,OpenGL常量都以GL打头,且所有字母都是大写,单词之间用下划线相连,如GL_COLOR_BUFFER_BIT。 • 有些OpenGL函数的名称中包含后缀“v”,这表明它将一个指向向量(数组)的指针(而不是一系列的值)作为参数。
OpenGL环境配置 • 将glut32.lib、glut.lib放在VC6.0安装目录下VC98\Lib文件夹下。 • gltu.h放在VC6.0安装目录下VC98\Include\GL文件夹下。 • Glut32.dll、glut.dll放在C:\WINDOWS\system32文件夹下。 • 在Project Setting->Link标签下的library modules下输入和OpenGL相关的库OpenGL32.lib glu32.lib glaux.lib glut32.lib。
建立OpenGL程序 • 包含文件 #include <GL/gl.h>,#include<GL/glu.h> • 像素格式 通过一种叫做PIXELFORMATDESCRIPTOR的结构,来完成对像素属性的设置,包括缓存设置、颜色模式、颜色位数、深度缓存位数等。 • 渲染描述表 用来保存着在窗口中用来渲染一个场景所需的信息。一个OpenGL应用程序必须有一个渲染描述表,并且在进行OpenGL绘制之前它应当是当前的。
指定几何体的OpenGL模型 • 指定几何体函数: glBegin(mode) //顶点列表:在mode所指定的绘图模式下创建模型的顶点数据。 //外观属性信息:比如颜色,法线和纹理信息坐标也可以指定 glEnd(); • mode :说明顶点列表创建图像的方式 比如: GL_POINTS :为顶点列表中的顶点创建一个点 GL_LINES:顶点列表中的每两个顶点,创建一条线 GL_LINES_STRIP:顶点列表中的所有顶点依次连成一条线 GL_TRIANLE:顶点列表中的三个顶点数据为一组,连成一个三角形 GL_QUADS:顶点列表中的四个顶点数据为一组,连成一个四边形
指定几何体的OpenGL模型 • 顶点列表中如何指定顶点 • glVertex*()代表的是一系列仅顶点数据类型不同的函数: glVertex3f(x,y,z):顶点坐标为是GLfloat glVertex2d(x,y):顶点是2维的Glint glVertex3fv(x): x为向量 Glfloat x[3]
OpenGL工具中的附加对象 • 1 GLU二次曲面对象 • 声明二次曲面对象:GLUquadric *gluNewQuadric(void) 圆柱体: void gluCylinder(……),球体: void gluSphere(……) 圆盘:void gluDisk(……) • 2 GLUT 对象 • GLUT 提供的模型是几何实体,形状固定。 圆锥 : glutSolidCone/glutWireCone 立方体:glutSolidCube 十二面体:glutSolidDodecahedron 八面体:glutSolidOctahedron 球体:glutSolidSphere 茶壶:glutSolidTeapot 四面体:glutSolidTetrahedron 圆环:glutSolidTorus
OpenGL中的变换 1.投影变换 由用户定义的投影生成 void gluPerspective( GLdouble fovy//角度, GLdouble aspect //视景体的宽高比,GLdouble zNear//沿z轴方向的两裁面之间的距离的近处, GLdouble zFar//沿z轴方向的两裁面之间的距离的远处, ); //设置透视投影矩阵 void glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar );//将当前的可视空间设为正投影空间
OpenGL中的变换 • 2 模视变换 • 从用户的视图变换以及所有在程序当中用到的模型变换得到。 • void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz );//定义视点矩阵 • 实际的编程应用中,用户在完成场景的建模后,往往需要选择一个合适的视角或不停地变换视角
OpenGL中的变换 • 模型变换: 旋转:glRotatef(angle,x,y,z) 平移:glTranslate(tx,ty,tz) 缩放:glScalef(sx,sy,sz) 如何使用: glMatrixMode(GL_MODEVIEW);//设置当前的矩阵为模视矩阵。 glLoadIdentity();//设置为默认的单位矩阵
控制台下的OpenGL程序 • 控制台下OpenGL程序的组成部分: void main() void SetupRC(void)// 设置初始渲染状态 void RenderScene(void)//绘制场景及绘图 void ChangeSize(GLsizei w,GLsizei h)//修改可视区域和视口,当窗口改变大小时被调用
MFC下的OpenGL程序 • MFC下的OpenGL程序和控制台下的OpenGL程序的对应关系: • BOOL View::InitializeOpenGL(CDC* pDC) void SetupRC(void)// 设置渲染状态 • void View::OnSize(UINT nType, int cx, int cy) void ChangeSize(GLsizei w,GLsizei h)//修改可使区域 • BOOL View::RenderScene() void RenderScene(void)//绘制场景
程序 • 一个简单的OpenGL程序,绘制一个立方体和一个球体。