1 / 21

OpenGL 使用简介

OpenGL 使用简介. 简介. OpenGL ( Open Graphics Library )是个定义了一个跨编程语言、跨平台的编程接口的规格,是个专业的 3D 程序接口,是一个功能强大,调用方便的底层 3D 图形库。 OpenGL 是个与硬件无关的软件接口,可以在不同的平台如 Windows 95 、 Windows NT 、 Unix 、 Linux 、 MacOS 、 OS / 2 之间进行移植。

chin
Download Presentation

OpenGL 使用简介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OpenGL使用简介

  2. 简介 • OpenGL(Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。 • OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。 • 这个接口由近二百五十个不同的函数调用组成,用来从简单的图元绘制复杂的三维景象。在电子游戏工业里,它是颇普遍的,而另一种编程接口系统是仅用于Microsoft Windows上的Direct3D。 • OpenGL常用于CAD、虚拟实境、科学视觉化程序和电子游戏开发。

  3. 发展历史 • OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。1992年7月,SGI公司发布了OpenGL的1.0版本。 • OpenGL历经2.0,1.5,1.4,1.3,1.2,1.1,or 1.0多个版本。现在最新的是在2006年8月3日公布的OpenGL version 2.1。 • OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些特别兴趣于建立一个统一的普遍可用的API的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox 、NVIDIA、SGI和Sun Microsystems (Microsoft曾是创立成员之一,但已于2003年3月退出)。

  4. GL的平台(1) • 基于OpenGL标准开发的应用程序必须运行于32位Windows 平台下,如WindowsNT或Windows95环境;而且运行时还需有动态 链接库OpenGL32.DLL、Glu32.DLL,一般在…\WINDOWS\system32里面(注:window2000以上系统均带有OPENGL32.DLL和glu32.dll) • 一般来说,VC6和VS.NET里面就带有GL的基本库 • VC6:…\Microsoft Visual Studio\VC98\Include\GL • VS.NET.2005:…\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl • 一般是Gl.h,Glaux.h,Glu.h • Lib里也有:OpenGL32.lib,GLu32.lib,GLaux.lib • 所以开发者在VC下可以使用 • #include <gl\gl.h> // Header File For The OpenGL32 Library • #include <gl\glu.h> // Header File For The GLu32 Library • #include <gl\glaux.h>// Header File For The Glaux Library

  5. GL的平台(2) • 同时OpenGL也适应别的OS和语言 • 在OpenGL的基础上还有Open Inventor、Cosmo3D、Optimizer等多种高级图形库,适应不同应用。可跟据需要下载相关的开发包。

  6. OpenGL基本功能 • 模型绘制 • 模型观察 • 颜色模式的指定 • 光照应用 • 图象效果增强 • 位图和图象处理 • 纹理映射 • 实时动画 • 交互技术

  7. 一些命名规则 • 函数: • OpenGL核心库(gl) • OpenGL实用库(glu) • 对X窗口系统的OpenGL扩展(glX) • 举例: • void glBegin(GLenum mode); • void gluBeginCurve(GLUnurbs* nurb); • void glXFreeContextEXT(Display * dpy, GLXContext ctx); • 参数:GL_POINTS,GL_LINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,GL_TRIAN,GL_QUADS,GL_QUAD_STRIP

  8. 数据类型名 • void glVertex3s(GLshort x, GLshort y, GLshort z); • void glVertex3i(GLint x, GLint y, GLint z); • void glVertex3f(GLfloat x, GLfloat y, GLfloat z); • void glVertex3d(GLdouble x, GLdouble y, GLdouble z);

  9. 设置Visual C/C++ 6.0 • Visual C/C++的工程有两个重要选项: Console (控制台) 和 Win32应用程序将会有两个窗口: 一个控制台窗口, 以及一个 OpenGL 窗口。选择 Win32 仍然可以让你在不需要关心Windows程序设计的情况下编写 GLUT 程序. 你需要做以下设置: 选择 Project -> settings 选择 Link 选项卡 从 Category 中选择 Output 在 Entry-point synmbol 文本框中键入 mainCRTStartup • 对于已存在的控制台工程, 有一个简单的办法将它转换成Win32应用程序: • 根据上面的步骤修改入口点,在 Project options 文本框中用 subsystem:windows 覆盖 subsystem:console • 或者你可以直接在你的源代码开头处添加:代码 // #pragma comment( linker,"/subsystem:\"windows\"/entry:\"mainCRTStartup\"" )

  10. 在没使用GLUT的情况下(手动添加link): • 在你文件头加上 • #include <gl\gl.h> • #include <gl\glu.h> • #include <gl\glaux.h> • 进入Project菜单,选Settings项,弹出 Settings 对话框,选Link项,在 Libraries 栏目中加入OpenGL库:opengl32.lib glu32.lib glaux.lib

  11. GLUT • GLUT ( OpenGL Utility Toolkit ) • 安装:在windows下通过 C/C++语言编写 GLUT 程序, 你需要以下三个文件: • GLUT.H - 你需要在你的源代码中包含这个文件。通常情况下,这个文件应该放在你系统的包含目录下的 GL 文件夹中。 • GLUT.LIB (SGI windows版本) 以及 glut32.lib (微软版本) - 这个文件必须被连接到你的程序中, 确保它放在 LIB 目录中。 • glut32.dll (Windows) 和 glut.dll (SGI Windows版本) - 根据你所使用的OpenGL选择一个,如果你正在使用微软公司的版本,那么你必须选择 glut32.dll。你应该把DLL放置在你的系统文件夹中。 • 举例:在window XP下使用VC6安装GLUT • 下载glutdlls并解压 • 复制glut32.dll和glut.dll到…\windows\system32 • 复制glut.h到...\Microsoft Visual Studio\VC98\Include\GL • 复制glut32.lib和glut.lib到…\Microsoft Visual Studio\VC98\Lib

  12. #include <GL/glut.h> void renderScene(void) { //绘制一个简单的二维的三角形 glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); //初始化glut glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); //设置窗口的模式-深度缓存,单缓存,颜色模型 glutInitWindowPosition(100,100); //设置窗口的位置 glutInitWindowSize(320,320); //设置窗口的大小 glutCreateWindow(“3D Tech- GLUT Tutorial”); //创建窗口并赋予title glutDisplayFunc(renderScene);//调用renderScene把绘制传送到窗口 glutMainLoop(); //进入循环等待 }

  13. 通过定义 void glutReshapeFunc(void (*func)(int width, int height))来避免因窗口大小改变时图形的变形; • 通过定义 void glutIdleFunc(void (*func)(void)); 使应用空闲时反复调用函数func • 对于window的基本应用:mouse,keyboard,menu,sub window,font等glut里也提供了支持

  14. #include<GL/glut.h> • float angle = 0.0; • void changeSize(int w, int h) { • if(h == 0)h = 1; • float ratio = 1.0* w / h; • glMatrixMode(GL_PROJECTION); • glLoadIdentity(); • glViewport(0, 0, w, h); • gluPerspective(45,ratio,1,1000); • glMatrixMode(GL_MODELVIEW); • glLoadIdentity(); • gluLookAt(0.0,0.0,5.0, • 0.0,0.0,-1.0, • 0.0f,1.0f,0.0f); • } • void renderScene(void) { • glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); • glPushMatrix(); • glRotatef(angle,0.0,1.0,0.0); • glBegin(GL_TRIANGLES); • glVertex3f(-0.5,-0.5,0.0); • glVertex3f(0.5,0.0,0.0); • glVertex3f(0.0,0.5,0.0); • glEnd(); • glPopMatrix(); • angle++; • glutSwapBuffers(); • }

  15. void main(int argc, char **argv) { • glutInit(&argc, argv); • glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); //设为双缓冲区, //平滑动画需要 • glutInitWindowPosition(100,100); • glutInitWindowSize(320,320); • glutCreateWindow("Lighthouse 3D - GLUT Tutorial"); • glutDisplayFunc(renderScene); • glutIdleFunc(renderScene); //register a callback function to be called when the application is idle • glutReshapeFunc(changeSize); //Preparing the window for a reshape • glutMainLoop(); • }

  16. 参考 • web: • OpenGL 官方主页:http://www.opengl.org • OpenGL 2.1 Reference:http://www.opengl.org/sdk/docs/man • GLUT:http://www.opengl.org/resources/libraries/glut/ • NEHE的在线GL教程:http://nehe.gamedev.net • specification: • The OpenGL Utility Toolkit (GLUT) Programming Interface (PDF) • OpenGL 2.1 specification (PDF) • book: • OpenGL超级宝典(三版)(中文),人民邮电出版社 • OpenGL编程指南(四版)(中文),人民邮电出版社 • OpenGL Shading Language

More Related