3.2 OpenGL简介及工具包GLUT-06
opengl
OpenGL是一个非常优秀的图形软件接口。
OpenGL官方网站(英文)/下面将对Windows下的OpenGL编程进行简单介绍。
1.安装GLUT工具包GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
Windows环境下的GLUT本地下载地址:glut-install.zip(大小约为150k)也可直接去官方网站下载:/resources/libraries/glut/glutdlls37beta.zipWindows环境下安装GLUT的步骤:1)将下载的压缩包解压,得到5个文件放到以下三个指定位置:2)glut.h放到GL文件夹(VC6中一般是:C:\Program Files\Microsoft VisualStudio\VC98\Include\GL,VC2005中是:C:\Program Files\Microsoft Visual Studio 8\VC\Include,新建GL文件夹,再将glut.h放到GL文件夹中)。
3)glut.lib和glut32.lib放到静态函数库所在文件夹(VC6中一般是:C:\ProgramFiles\Microsoft Visual Studio\VC98\Lib, VC2005中是:C:\Program Files\Microsoft Visual Studio 8\VC\Lib)。
4)glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。
(典型的位置为:C:\Windows\System32,有些机器可能为C:\WINNT\System32)2.建立一个OpenGL工程这里以VC为例:首先从开始->所有程序->Microsoft Visual C++ 6.0菜单中打开VC,也可单击文件:C:\Program Files\Microsoft Visual Studio\VisualC++6\Common\MSDev98\Bin\msdev.exe打开VC,在VC中选择File->New->Project,然后选择Win32 Console Application,输入一个工程名,设为Pixel,然后按OK。
opengl入门教程
opengl入门教程OpenGL入门教程OpenGL是一种跨平台的图形库,可用于创建各种类型的图形和视觉效果。
本教程将带你入门使用OpenGL,并介绍一些基本的概念和技术。
安装OpenGL首先,你需要安装OpenGL的开发环境。
具体安装方法将因操作系统而异,以下是一些常见操作系统的安装指南。
- Windows: 在Windows上,你可以使用MinGW或者MSYS2安装OpenGL。
- macOS: OpenGL在macOS上是默认安装的,你只需要确保你的系统版本满足OpenGL的要求。
- Linux: 在Linux上,你可以使用包管理器安装OpenGL的开发环境,如apt-get (Ubuntu)或yum (Fedora)。
创建一个OpenGL窗口在开始编写OpenGL应用程序之前,你需要创建一个OpenGL 窗口来显示你的图形。
以下是使用GLUT创建一个简单窗口的例子。
```c++#include <GL/glut.h>void display() {glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_TRIANGLES);glVertex2f(-0.5, -0.5);glVertex2f(0.5, -0.5);glVertex2f(0.0, 0.5);glEnd();glFlush();}int main(int argc, char** argv) {glutInit(&argc, argv);glutCreateWindow("OpenGL Window");glutDisplayFunc(display);glutMainLoop();return 0;}```运行上述代码,你将看到一个简单的OpenGL窗口中显示了一个三角形。
绘制基本图形OpenGL提供了一组基本的绘图函数,可用于绘制各种类型的图形。
以下是一些常见的绘图函数:- `glBegin(GL_POINTS)`: 用于绘制点。
OpenGL 简介
OpenGL使用
GLUT ( OpenGL Utility Toolkit ) 安装:在windows下通过 C/C++语言编写 GLUT 程序, 需要以下三个文件:
举例:在window XP下使用VC6安装GLUT
– – – –
– GLUT.H - 需要源代码中包含这个文件。通常情况下,这个文件 应该放在系统的包含目录下的 GL 文件夹中。 – GLUT.LIB (SGI windows版本) 以及 glut32.lib (微软版本) - 这 个文件必须被连接到程序中, 确保它放在 LIB 目录中。 – glut32.dll (Windows) 和 glut.dll (SGI Windows版本) - 根据所 使用的OpenGL选择一个,如果正在使用微软公司的版本,那么 必须选择 glut32.dll。应该把DLL放置在系统文件夹中。
OpenGL使用
void main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(50,100); glutInitWindowSize(400,300); glutCreateWindow(“An Example OpenGL Program.”); init(); glutDisplayFunc(lineSegment); glutMainLoop(); }
OpenGL使用
OpenGL使用
OpenGL使用
#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(); //进入循环等待
OPENGL简介
OPENGL 简 介
glBegin(GL_POLYGON); glBegin(GL_POLYGON); glNormal3fv(n0 glNormal3fv(n0); glVertex3fv(v0 glVertex3fv(v0); glNormal3fv(n1 glNormal3fv(n1); glVertex3fv(v1 glVertex3fv(v1); glNormal3fv(n2 glNormal3fv(n2); glVertex3fv(v2 glVertex3fv(v2); glNormal3fv(n3 glNormal3fv(n3); glVertex3fv(v3 glVertex3fv(v3); glE视图变换 3.视图变换 Void gluLookAt(GLdouble eyey,GLdouble eyez,GLdouble eyex,GLdouble centerx,GLdouble GLdouble
OPENGL 简 介
3. OpenGL程序基本结构 程序基本结构 初始化部分 主要是设置一些OpenGL的状态开关,如颜色模 的状态开关, 主要是设置一些 的状态开关 式的选择,是否作光照处理,深度检验,裁剪等等。 式的选择,是否作光照处理,深度检验,裁剪等等。 这些状态一般都用函数glEnable(???), glDisable(???) 这些状态一般都用函数 来设置, 表示特定的状态。 来设置,???表示特定的状态。 表示特定的状态
OPENGL 简 介
OpenGL基本几何结构 基本几何结构
1. 绘图准备 开始绘在制新图形前, 开始绘在制新图形前,计算机屏幕上可能已有一 些图形,OpenGL在显示缓冲区中存储了那些图形的 些图形, 在显示缓冲区中存储了那些图形的 绘图信息。绘制新的图形以前, 绘图信息。绘制新的图形以前,应当清除当前的这些 内容,以免影响绘图的效果。 内容,以免影响绘图的效果。
opengl配置
/percyph/archive/2009/03/03/75409.aspxVC下OpenGL配置以及glut配置OpenGL官方网站(英文)下面我将对Windows下的OpenGL编程进行简单介绍。
第一步:选择一个编译环境现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。
但这里我们选择VC++ 6.0作为学习OpenGL的环境。
第二步:安装GLUT工具包GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
Windows环境下的GLUT下载地址:(大小约为150k)/resources/libraries/glut/glutdlls37beta.zip无法从以上地址下载的话请使用下面的连接:/upfile/200607311626279.zipWindows环境下安装GLUT的步骤:1、将下载的压缩包解开,将得到5个文件2、以我的安装目录为例:(1)“d:\Program Files\Microsoft Visual Studio\VC98\include\GL文件夹”。
把解压得到的glut.h放到这个GL文件夹里。
没有GL文件夹可以自己建一个,一般都有的。
(2)“d:\Program Files\Microsoft Visual Studio\VC98\lib文件夹”。
把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹,即lib文件夹。
(3)把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。
(典型的位置为:C:\Windows\System32)这是非常重要的动态链接库设置!第三步,创建工程,其步骤如下:(1)创建一个Win32 Console Application。
(以我创建的为例,工程名为simpleGL)(2)链接OpenGL libraries:在Visual C++中先单击Project,再单击Settings,再找到Link 单击,最后在Object/library modules 的最前面加上opengl32.lib Glut32.lib Glaux.lib glu32.lib 。
OpenGL简介
一个完整的OpenGL图形处理系统的结构为:最底层为图形硬件, 第二层为操作系统,第三层为窗口系统,第四层为OpenGL,第五层为 应用软件。OpenGL是网络透明的,在客户机/服务器体系结构中,允许 本地或远程调用OpenGL.
4.OpenGL的绘图方式
OpenGL的绘图方式与Windows的一般的绘图方式是不同的,其区别 主要表现在以下三个方面: (1)Windows采用的是GDI绘图; (2)OpenGL采用的是渲染设备环境RC(Render Context)绘图; (3)OpenGL使用的是特殊的像素格式。 渲染设备环境主要是由以下6个wgl函数来管理,下面对这些函数进行 一个简短的介绍: 1.HGLRC wglCreateContext(HDC hdc) 该函数用来创建一个OpenGL可用的渲染设备环境RC。 2.BOOL wglDeleteContext(HGLRC hglrc) 该函数删除一个RC。
(4)OpenGL工具库,包含大约30多个函数,函数名前缀为glut。 这部分函数主要提供基于窗口的工具,如:多窗口绘制、空消息和定时 器,以及一些绘制较复杂物体的函数。由于glut中的窗口管理函数是不 依赖于运行环境的,因此OpenGL 中的工具库可以在所有的OpenGL平 台上运行。 (5)Windows专用库,包含有16个函数,函数名前缀为wgl。 这部分函数主要用于连接OpenGL和Windows95/NT,以弥补OpenGL 在文本方面的不足。Windows专用库只能用于Windows95/98/NT环境中。 (6)Win32API函数库,包含有6个函数,函数名无专用前缀。 这部分函数主要用于处理像素存储格式和双帧缓存。这6个函数将替换 Windows GDI中原有的同样的函数。Win32API函数库只能用于 Windows/95/98/NT环境中。
OpenGL 简介(中英文翻译)
译文:OpenGL 简介OpenGL是一个底层图形库规范。
它为程序员提供了一个小的几何图元(点、线、多边形、图片和位图)库和一个支持2D/3D几何对象绘图命令库,通过所提供的图元和命令来控制对象的呈现(绘图)。
由于OpenGL的绘图命令仅限于画一些简单的几何图元(如点、线和多边形),所以OpenGL实用工具包(GLUT)应运而生,它能够帮助绘画出更复杂的三维对象(比如球体、圆环甚至茶壶)。
如果你要构建需要利用到OpenGL全部特性的应用的话,GLUT 未必适合,但是对刚学习OpenGL的人来说GLUT就非常有用。
GLUT是为满足windows系统下OpenGL程序独立编程接口的需求而设计的,接口被设计的非常简单而又实用。
从OpenGL中移除windows系统的操作是一个非常英明的决定,因为这意味着OpenGL图形系统能够被应用于更广泛的系统中(包括功能强大但昂贵的图形工作站以及需要大量图形运算的视频游戏、互动电视机机顶盒和个人电脑)。
GLUT简化了用OpenGL进行渲染的程序的实现。
GLUT应用编程接口(API)只需要调用很少的接口就可以用OpenGL来渲染图形场景,并且GLUT接口所需的参数也相对较少。
渲染管线大多数OpenGL实现都有着类似的操作顺序,这一系列的操作过程叫做OpenGL 渲染管线。
尽管OpenGL并不严格要求需要按照渲染管线这一顺序来实现,但是这样做可以为预测OpenGL下一步将要做什么提供可靠的指引。
几何数据(点、线、多边形)将会沿着一条依次通过求值器、顶点操作和装配阶段的路径进行传递,而像素数据(像素,图形,位图)将会沿着另一条路径传递,在最终像素写入帧缓冲区前,像素数据和几何数据都会经历相同的最后一步——栅格化处理。
Display Lists: 所有数据,无论是用来描述几何体还是像素的,都可以保存在一个display list中来在当下或将来使用(用以替代display list的用法是在需要时立即处理数据——称为立即模式)当一个display list被触发时,保存的数据就像立即模式一样被发送至显示器。
OpenGL功能简介
OpenGL基本功能(9/11)
反走样(Antialiasing)
线段在计算机中是通过一系列的像素来近似 逼近的,而这些像素实际上是一个个的小正 方形,因此线段常常呈锯齿状,这被称为走 样(Aliasing) OpenGL通过计算线段对各个像素的不同覆盖 率来实现反走样(Antialiasing)
顶点数据 Vertex data 求值器 Evaluators
对每个顶点的操作以及 图元装配 Per-vertex operations and primitive assembly
OpenGL渲染流水线(14/20)
光栅化(Rasterization)
光栅化负责将几何数据和像素数据转换为片元 (Fragment) 片元和将来要显示的像素一一对应 为每一个片元指定颜色和深度值 雾(Fog)、纹理(Texture)操作
对每个顶点的操作和图元装配顶点数据顶点数据vertexdata求值器求值器evaluators对每个顶点的操作以及图元装配图元装配pervertexoperationsandprimitiveassembly对每个顶点的操作以及顶点顶点vertex模型视图矩阵模型视图矩阵modelviewmatrix投影矩阵投影矩阵projectmatrix透视除法透视除法perspectivedivision视区变换视区变换viewporttransform对象坐标对象坐标object人眼坐标人眼坐标eye裁剪裁剪clip归一化归一化normalize窗口坐标窗口坐标windowopengl渲染流水线1420
OpenGL基本功能(7/11)
光照和材质
在现实生活中,物体因为受光照射和自身对 各种频率光波的吸收与反射能力的不同,而 呈现各自不同的颜色 OpenGL的实现
移动图形技术新进化 解析OpenGL ES3.2
移动图形技术新进化解析OpenGL ES3.2随着移动计算技术的发展,移动设备对图形技术的要求也越来越高,尤其是移动游戏开发商,为了得到更绚丽的游戏画面,对移动图形API也提出了更高的要求。
在此前结束的SIGGRAPH 2015上,Khronos组织发布了最新的OpenGL ES3.2,希望借此为移动图形业界注入新的活力。
对于图形API想必许多人都不陌生。
在桌面,我们使用DirectX和OpenGL,前者主要用于娱乐和部分专业领域,后者则主要是专业用户在使用。
在移动计算上,由于Android 的迅速普及,其使用的OpenGL ES也成为了开发商眼中最重要的图形API之一。
相比OpenGL,OpenGL ES更像是它的简化版,去掉了一些庞大而复杂的功能,并充分考虑到移动设备低功耗、高性能功耗比的需求,在移动设备上实现了“高性价比”的图形功能。
早期OpenGL ES实现的功能比较简单,这也是受制于此前移动处理器的性能。
不过在OpenGL ES 3.0发布后,大量新功能的加入,使得移动图形无论在画质还是功能实现上都有了长足的进步。
在SIGGRAPH 2015上,OpenGL ES迎来了全新的3.2版本,它进一步加强了移动计算领域的图形技术。
OpenGL ES的进化从名字上可以看出,这次发布的OpenGL ES 3.2应该只是之前OpenGL ES 3.0的改进版本。
需要说明的是,OpenGL ES3.2和之前的OpenGL ES 3.x版本一样,并非是OpenGL 3的子集,而是OpenGL 4系列API的子集。
从OpenGL的发展历史来看,OpenGL 4是一个相当重要的更新,它包含了大量全新的图形特性,比如新的着色阶段、曲面细分、着色子程序、双精度支持等。
在这个基础上,OpenGL ES 3.2也带来了不少技术创新,官方宣称它有着“很多桌面级别的特效”。
接下来,我们就来看看OpenGL ES 3.2中有哪些基础功能的增强,并对其中的重点功能进行详细介绍。
OpenGL入门学习之一至六(精排版可打印学习)
OpenGL入门学习之一至六OpenGL入门学习(一)OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX(微软公司对硬件编程的接口)更优越的特性。
1、与C语言紧密结合。
OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。
如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。
2、强大的可移植性。
微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。
而OpenGL 不仅用于Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。
并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关。
3、高性能的图形渲染。
OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。
总之,OpenGL是一个很NB的图形软件接口。
至于究竟有多NB,去看看DOOM3和QUAKE4等专业游戏就知道了。
下面将对Windows下的OpenGL编程进行简单介绍。
学习OpenGL前的准备工作第一步,选择一个编译环境现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。
但这里我们选择Visual Studio 2005作为学习OpenGL的环境。
第二步,安装GLUT工具包GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
Windows环境下安装GLUT的步骤:1、将下载的压缩包解开,将得到5个文件2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”)。
opengl使用手册 简书
opengl使用手册简书【实用版】目录一、OpenGL 简介二、OpenGL 函数库1.核心函数库2.矩阵操作、几何变换和投影变换函数3.扩展库 GLEW三、OpenGL 菜单的使用1.交互式输入设备的处理2.glut 命令与鼠标函数四、总结正文一、OpenGL 简介OpenGL(Open Graphics Library)是一个跨平台的图形编程接口,用于渲染 2D 和 3D 图形。
它被广泛应用于游戏开发、计算机辅助设计、虚拟现实等领域。
OpenGL 提供了丰富的函数库,可以实现各种复杂的图形效果。
二、OpenGL 函数库OpenGL 的函数库主要可以分为核心函数库和扩展库。
核心函数库包含了基本的绘图功能,如绘制几何图元、矩阵操作、几何变换和投影变换等。
扩展库 GLEW(GLEW Extension Wrangler Library)则提供了更多的高级功能,如阴影、纹理贴图等。
1.核心函数库核心函数库包含了许多常用的绘图函数,如:- glBegin():开始绘制- glEnd():结束绘制- glVertex():绘制一个顶点- glColor():设置颜色2.矩阵操作、几何变换和投影变换函数OpenGL 提供了丰富的矩阵操作、几何变换和投影变换函数,如:- glPushMatrix():矩阵入栈- glPopMatrix():矩阵出栈- glTranslate():几何变换(平移)- glRotate():几何变换(旋转)- glScale():几何变换(缩放)- gluPerspective():投影变换3.扩展库 GLEWGLEW 是一个方便的扩展库,可以方便地管理 OpenGL 扩展。
它提供了一系列的函数,如:- glewInit():初始化 GLEW- glewGetError():获取 GLEW 错误- glewCreateContext():创建 OpenGL 上下文- glewMakeCurrent():设置当前 OpenGL 上下文三、OpenGL 菜单的使用OpenGL 支持交互式输入设备,如鼠标和键盘。
OpenGL简介资料
//主函数
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); //设置显示模式(颜色、缓冲区等)
glutCreateWindow(“A Simple Example”); //创建窗口
OpenGL功能(五)
纹理映射(Texture Mapping) 利用OpenGL纹理映射功能可以十分逼真地表 达物体表面细节。
OpenGL功能(六)
位图显示和图象增强 图象功能除了基本的拷贝和像素读写外,还提 供融合(Blending)、反走样(Antialiasing) 和雾(fog)的特殊图象效果处理。以上三条 可使被仿真物更具真实感,增强图形显示的效 果。
用OpenGL编写程序的基本模板
模板演示
基本操作(视口变换)
Void glViewport(GLint x,GLint y,GLsizei width,GLsizei height); 在窗口中指定一个用于显示图像的像素矩形。 参数(x,y)是视口左下角的坐标,而参数 width和height为视口的大小。默认情况下, 视口的初始值为(0,0,winWidth,winHeight),其 中winWidth和winHeight是窗口的大小。
将影响投影矩阵而不是模型视点矩阵,同时消除以前 的投影变换。每个投影变换函数都完整的描述了一种特 定的变换,因此通常不混合使用两种投影变换
(一)透视投影
void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble near,GLdouble far); 参数fovy是在yz平面内的视野角度,其取值范围为[0.0, 180.0];参数aspect是视景体顶面的宽高比(w/h);参数 near和far是视点和两个裁减面之间的距离,必须大于0。
opengl教程
opengl教程OpenGL是一种图形编程接口,常用于计算机图形学和游戏开发。
本文将介绍OpenGL的基本概念、功能和使用方法。
首先,OpenGL是一种跨平台的图形编程接口,可以在不同操作系统和硬件上运行。
它是一个开放标准,由Khronos Group维护和发展,因此可以在各种平台上使用,如Windows、MacOS、Linux等。
OpenGL的核心是图形渲染管线。
图形渲染管线是指一系列的图形处理阶段,用于将3D图形数据转化为2D图像。
这些阶段包括几何处理、光栅化、片元处理等。
每个阶段都包含了一些特定的操作和功能,通过这些操作和功能,我们可以实现各种不同的图形效果和渲染技术。
在使用OpenGL之前,需要初始化OpenGL的上下文,并创建一个OpenGL窗口。
通过OpenGL的API(Application Programming Interface),我们可以控制各个渲染阶段的操作和参数。
例如,我们可以设置物体的位置、颜色、纹理等属性,还可以控制光照、深度测试等渲染参数。
OpenGL还提供了一些基本的几何图形绘制函数,如绘制点、线段、三角形等。
通过这些函数,我们可以绘制各种基本的几何图形。
此外,OpenGL还支持纹理映射、着色器编程等高级渲染技术,可以实现更加复杂的视觉效果。
在OpenGL中,最常用的是顶点数组和顶点缓冲对象。
顶点数组用于存储顶点的位置、颜色、纹理坐标等属性,而顶点缓冲对象用于管理顶点数组的内存。
通过顶点数组和顶点缓冲对象,我们可以高效地传输大量的顶点数据到显存,并在图形渲染管线中使用。
除了基本的图形绘制,OpenGL还支持一些高级的渲染技术,如光照、阴影、深度测试等。
这些技术可以让我们实现更加逼真和真实感的图形效果。
例如,通过光照技术,我们可以模拟不同光源的光照效果,使物体看起来更加立体和有质感。
而深度测试可以确保正确的渲染顺序,使得物体之间的遮挡关系得到正确的呈现。
总结一下,OpenGL是一种功能丰富且强大的图形编程接口。
OpenGL入门笔记
OpenGL的函数库OpenGL提供了三种函数库,它们是基本库(OpenGL library)、使用库(utility library)和辅助库(auxiliary library)。
(1)OpenGL基本库是核心函数库,提供了一百多种函数,这些函数在opengl32.dll中实现,并在头文件gl.h中声明。
这个基本库的导出函数都是以gl为前缀,OpenGL提供的所有操作都由这些函数来实现。
(2)OpenGL使用库提供了包括四十多种函数。
作用在于提供一些更方便与使用的函数给用户,如绘制球、圆柱、圆环等这些复杂形状。
这些韩式都由OpenGL的基本库函数写成。
使用库函数在glu32.dll中输出,在头文件glu.h中声明,所有函数以glu为前缀。
(3)OpenGL辅助库是一个工具包,提供一些独立于平台的框架供调用OpenGL的函数。
如基本的窗口管理函数、事件处理函数和简单的模型制作函数。
辅助库的函数在glaux.dll中输出,在头文件glaux。
h中声明,函数以aux为前缀。
opengl32.lib、glu32.lib、glaux.lib、OpenGL32.lib的意思。
opengl32.lib(DLL)是MS为openGL能够在window环境下工作设计的函数库,这个库的工作很简单。
如果你的机器上存在硬件加速的GL驱动,调用该驱动,否则用软件的方法实现。
包含gl.h文件并使用了里面的函数必须将opengl32.lib加入你的工程。
glu则是在gl基础上的扩展,如上面所说,他实际上已经是OpenGL的一部分了。
他的函数都是以glu开头的(区别于gl函数族),你使用的gluPerspective就是这样的函数。
要使用这些函数,必须将glu32.lib链接到你的工程中。
glaux是MS编写的在标准GL接口上的扩展,比如示例里经常使用的auxSolidTeapot函数,他的作用是画一个填充的茶壶,他的函数都是aux开头的,使用时要将glaux.lib加入你的工程。
OpenGL环境配置
m_pDC = new CClientDC(this);
//Failure to Get DC
if(m_pDC == NULL)
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
//cs.cx = 500;
//cs.cy = 500;
5、设定OpenGL风格
CPipeLineView中的PreCreateWindow中添加cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;// 在客户区绘制
//Failure to Create Rendering Context
if(m_hRC == 0)
{
MessageBox("Error Creating RC");
3)把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(Program Files\Microsoft Visual Studio\VC98\lib文件夹)。
4)把解压得到的glut.dll,glut32.dll,opengl.dll放到操作系统目录下面的system32文件夹内。(C:\Windows\System32)
HGLRC m_hRC; //Rendering Context着色描述表
CClientDC* m_pDC; //Device Context设备描述表
CRect m_oldRect; //窗口标题
OpenGL编程 GLUT
第一章OpenGL的基本框架1.1OpenGL简介在计算机发展初期,人们就开始从事计算机图形的开发,但直到20世纪80年代末90年代初,三维图形才开始迅速发展。
于是各种三维图形工具软件包相继推出,如GL,RenderMan等,但没有一种软件包能够在三维图形建模能力和编程方便程度上与OpenGL 相比拟。
OpenGL(Open Graphics Library,开放图形库),是一个三维的计算机图形和模型库,它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。
SGI公司在1992年6月发布1.0版,后成为工业标准。
目前,OpenGL标准由1992年成立的独立财团OpenGL Architecture Review Board(ARB)以投票方式产生,并制成规范文档公布,各软硬件厂商据此开发自己系统上的实现。
目前最新版规范是1999年5月通过的1.2.1。
OpenGL作为一个性能优越的图形应用程序设计界面(API),它独立于硬件和窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。
OpenGL在军事、广播电视、CAD/CAM/CAE、娱乐、艺术造型、医疗影像、虚拟世界等领域都有着广泛的应用。
它具有以下功能。
1. 模型绘制OpenGL能够绘制点、线和多边形。
应用这些基本的形体,可以构造出几乎所有的三维模型。
OpenGL通常用模型的多边形的顶点来描述三维模型。
2. 模型观察在建立了三维景物模型后,就需要用OpenGL描述如何观察所建立的三维模型。
观察三维模型是通过一系列的坐标变换进行的。
模型的坐标变换在使观察者能够在视点位置观察与视点相适应的三维模型景观。
在整个三维模型的观察过程中,投影变换的类型决定观察三维模型的观察方式,不同的投影变换得到的三维模型的景象也是不同的。
最后的视窗变换则对模型的景象进行裁剪缩放,即决定整个三维模型在屏幕上的图象。
OpenGL介绍
2.3 OpenGL介绍
➢2.3.1 背景
OpenGL(Open Graphics Library,开放式图形库) ➢是以SGI的GL三维图形库为基础制定的一个开放式三维 图形标准。SGI在1992年7月发布了1.0版。
➢ OpenGL 规 范 由 ARB(OpenGL Architecture Review Board , OpenGL结构评审委员会)负责管理,目前加入OpenGL ARB的 成员有SGI、Microsoft、Intel、IBM、SUN、Compaq、HP等公 司 , 它 们 均 采 用 了 OpenGL 图 形 标 准 , 许 多 软 件 厂 商 以 OpenGL为基础开发自己的产品,硬件厂商提供对OpenGL的 支持。
➢ 由于OpenGL的广泛应用,它已经成为一个工业标准。
➢ OpenGL独立于硬件设备、窗口系统和操作系统, 使得以OpenGL为基础开发的应用程序可以在各 种平台间移植。
➢ OpenGL可以运行在当前各种流行操作系统之上,如 Windows95/98、Windows NT/2000、Linux、Mac OS、 Unix、OS/2等。
//创建绘图上下文RC m_hRC=wglCreateContext(dc.m_hDC);
③改造OnSize函数:当视图尺寸变化是,应及时将新的客户区尺 寸通知OpenGL,方能够正确在窗口客户区域显示二维场景,通过 命令glViewPort完成这项工作。
【计算机图形学】OpenGL补充1:OpenGL基础
10
OpenGL的辅助库是为了方便用户用标准C编写 OpenGL程序而编写的。OpenGL是一个图形标准, 所以,在OpenGL中没有提供窗口管理和消息事件 响应的函数,这样使用标准C 编写OpenGL程序是 很不方便的,所以提供了辅助库。其中的函数都是 以“aux”为前缀。OpenGL辅助库提供了一些基本 的窗口管理函数、事件处理函数和一些简单模型的 制作函数等,例如,定义窗口的大小、处理键盘时 间、鼠标击键事件、绘制多面体等等。
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
gl/服务器模型上的网络透明性是OpenGL 的固有特性,它允许一个运行在工作站上的进程在 本机或通过网络在远程工作站上显示图形。利用这 种性质能够均衡各工作站的工作负荷,共同承担图形 应用任务。
(4)高质量和高性能 无论是在CAD/CAM、三维动画还是可视化仿真等 领域,OpenGL高质量和高效率的图形生成能力都 能得到充分的体现。在这些领域中,开发人员可以 利用OpenGL制作出效果逼真的二、三维图像来。
❖ Windows环境下的GLUT下载地址:(大小约 为150k)
/resources/libraries/glut/glutdlls 37beta.zip
最新OpenGL开发库的介绍
O p e n G L开发库的介绍OpenGL开发库的介绍开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。
它采用C语言风格,提供大量的函数来进行图形的处理和显示。
OpenGL库函数的命名方式非常有规律。
所有OpenGL函数采用了以下格式:<库前缀><根命令><可选的参数个数><可选的参数类型>库前缀有gl、glu、aux、glut、wgl、glx、agl等等,分别表示该函数属于OpenGL那个开发库,从函数名后面中还可以看出需要多少个参数以及参数的类型。
I代表int型,f代表float型,d代表double型,u代表无符号整型。
例如glVertex3fv()表示了该函数属于gl 库,参数是三个float型参数指针。
我们用glVertex*()来表示这一类函数。
OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。
从图可以看出,gl是核心,glu是对gl的部分封装。
glx、agl、wgl 是针对不同窗口系统的函数。
glut是为跨平台的OpenGL程序的工具包,比aux功能强大。
扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。
下面逐一对这些库进行详细介绍。
1.OpenGL核心库核心库包含有115个函数,函数名的前缀为gl。
这部分函数用于常规的、核心的图形处理。
此函数由gl.dll来负责解释执行。
由于许多函数可以接收不同数以下几类。
据类型的参数,因此派生出来的函数原形多达300多个。
核心库中的函数主要可以分为以下几类函数:•绘制基本几何图元的函数:glBegain()、glEnd()、glNormal*()、glVertex*();•矩阵操作、几何变换和投影变换的函数:如矩阵入栈函数glPushMatrix(),矩阵出栈函数glPopMatrix(),装载矩阵函数glLoadMatrix(),矩阵相乘函数glMultMatrix(),当前矩阵函数glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和glScale*(),投影变换函数glOrtho()、glFrustum()和视口变换函数glViewport();•颜色、光照和材质的函数:如设置颜色模式函数glColor*()、glIndex*(),设置光照效果的函数glLight*() 、glLightModel*()和设置材质效果函数glMaterial();•显示列表函数:主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、glEndList()、glGenLists()、glCallList()和glDeleteLists();•纹理映射函数:主要有一维纹理函数glTexImage1D()、二维纹理函数glTexImage2D()、设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*();•特殊效果函数:融合函数glBlendFunc()、反走样函数glHint()和雾化效果glFog*();•光栅化、象素操作函数:如象素位置glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式glPolygonMode(),读取象素glReadPixel()、复制象素glCopyPixel();•选择与反馈函数:主要有渲染模式glRenderMode()、选择缓冲区glSelectBuffer()和反馈缓冲区glFeedbackBuffer();•曲线与曲面的绘制函数:生成曲线或曲面的函数glMap*()、glMapGrid*(),求值器的函数glEvalCoord*()glEvalMesh*();•状态设置与查询函数:glGet*()、glEnable()、glGetError()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2009
6
3.2.4 OpenGL应用工具包GLUT(续 应用工具包GLUT( 3.2.4 OpenGL应用工具包GLUT(续)
2.处理窗口和输入 2.处理窗口和输入 2) void glutReshapeFunc(void(*func)(int width,int height)); 表示在窗口尺寸改变时,指定了所调用的函数。 表示在窗口尺寸改变时,指定了所调用的函数。width, height指定了窗口新的宽度和高度 指定了窗口新的宽度和高度。 height指定了窗口新的宽度和高度。 3) void glutKeyboardFunc(void(*func)(unsigned int key,int x,int y)); 参数(* (*func)(unsigned y)为按下一 参数(*func)(unsigned int key,int x,int y)为按下一 个生成ASCII字符的键时,GLUT调用的函数名称 ASCII字符的键时 调用的函数名称。 个生成ASCII字符的键时,GLUT调用的函数名称。 button, 4) void glutMouseFunc(void(*func)(int button,int y));该函数指定了当按下或释放一个鼠 state,int x,int y));该函数指定了当按下或释放一个鼠 标键时,调用的函数。参数button有三个有效值: button有三个有效值 标键时,调用的函数。参数button有三个有效值: GLUT_LEFT_BUTTON,GLUT_MIDDLE_BUTTON以及 GLUT_LEFT_BUTTON,GLUT_MIDDLE_BUTTON以及 分别代表鼠标的左键、中键和右键。 GLUT_RIGHT_BUTTON 分别代表鼠标的左键、中键和右键。
3.1.1 OpenGL概述 OpenGL概述 3.1.2 OpenGL的功能 OpenGL的功能 3.1.3 OpenGL的组成 OpenGL的组成 3.1.4 OpenGL应用工具包GLUT OpenGL应用工具包 应用工具包GLUT
2009
1
3.2.1 OpenGL概述 3.2.1 OpenGL概述
3
3.2.3 OpenGL的组成 3.2.3 OpenGL的组成
在微机版本中,OpenGL主要包括三个函数库: 在微机版本中,OpenGL主要包括三个函数库: 主要包括三个函数库
OpenGL核心库:其中包含了OpenGL最基本的命令函 OpenGL核心库:其中包含了OpenGL最基本的命令函 核心库 OpenGL 这些函数都以`gl`为前缀。(115 为前缀。(115个 数。这些函数都以`gl`为前缀。(115个) OpenGL实用库:它是比OpenGL核心库更高一层的函 OpenGL实用库:它是比OpenGL核心库更高一层的函 实用库 OpenGL 数库,实用程序库中的所有函数都是由OpenGL OpenGL的核心 数库,实用程序库中的所有函数都是由OpenGL的核心 库函数编写。函数都以`glu`为前缀。(43 为前缀。(43个 库函数编写。函数都以`glu`为前缀。(43个) OpenGL辅助库:提供了一些基本的窗口管理函数、 OpenGL辅助库:提供了一些基本的窗口管理函数、 辅助库 事件处理函数和简单的事件函数。函数都以`aux`为 事件处理函数和简单的事件函数。函数都以`aux`为 前缀。(31个 。(31 前缀。(31个)
2009
5
3.2.4 OpenGL应用工具包 应用工具包GLUT (续 3.2.4 OpenGL应用工具包GLUT (续)
3) void glutInitWindowPosition(int x,int y); 指定窗口左上角应该放置在屏幕上的位置。 指定窗口左上角应该放置在屏幕上的位置。 4) void glutInitWindowSize(int width,int height); 指定了窗口以像素为单位的尺寸。 指定了窗口以像素为单位的尺寸。 5) void glutCreateWindow(char* string); 创建一个允许使用的OpenGL窗口, OpenGL窗口 创建一个允许使用的OpenGL窗口,并将其视为当前 窗口。 窗口。 2.处理窗口和输入 2.处理窗口和输入 1) void glutDisplayFunc(void(*func)(void)); 该函数用于绘制当前窗口。参数void(*func) void(*func)为绘制 该函数用于绘制当前窗口。参数void(*func)为绘制 当前窗口时所调用的函数名。 当前窗口时所调用的函数名。任何时候当窗口的内容 需要被重新绘制,则调用该函数。 需要被重新绘制,则调用该函数。
2009
2
3.2.2 OpenGL的功能 3.2.2 OpenGL的功能
OpenGL的主要功能: OpenGL的主要功能: 的主要功能
1) 几何建模 2) 坐标变换 3) 4) 5) 6) 颜色模式设置 光照和材质设置 图像功能 纹理映射
建立模型 几何变换 真实感图 形生成 动画
7) 实时动画
2009
2009
4
3.2.4 OpenGL应用工具包 应用工具包GLUT 3.2.4 OpenGL应用工具包GLUT
目前AUX编程辅助库已经很大程度上被GLUT库所取代了。GLUT也许 目前AUX编程辅助库已经很大程度上被GLUT库所取代了。GLUT也许 AUX编程辅助库已经很大程度上被GLUT库所取代了 不能满足所有的OpenGL应用,但从学习OpenGL的角度, OpenGL应用 OpenGL的角度 不能满足所有的OpenGL应用,但从学习OpenGL的角度,它将是一个 良好的开端。按照使用功能,GLUT中的函数可以分为以下几类 中的函数可以分为以下几类: 良好的开端。按照使用功能,GLUT中的函数可以分为以下几类: 1.初始化和创建窗口 1.初始化和创建窗口 为了初始化并打开一个窗口,需要调用五个函数完成必要的任务。 为了初始化并打开一个窗口,需要调用五个函数完成必要的任务。 1) void glutInit(int argc,char**argv);该函数用于初始化 argc,char**argv);该函数用于初始化 GLUT库 其参数应与主函数main()的参数相同。 main()的参数相同 GLUT库,其参数应与主函数main()的参数相同。应该在调用其 GLUT函数之前调用glutInit()函数 函数之前调用glutInit()函数。 他GLUT函数之前调用glutInit()函数。 mode);该函数为即 2) void glutInitDisplayMode(unsigned int mode);该函数为即 将创建的窗口指定一种显示模式。 将创建的窗口指定一种显示模式。参数的默认值为 GLUT_RGBA|GLUT_SINGLE,即指定一个RGBA RGBA颜色模式的单缓存 GLUT_RGBA|GLUT_SINGLE,即指定一个RGBA颜色模式的单缓存 窗口。 窗口。
2009
7
3.2.4 OpenGL应用工具包GLUT(续 应用工具包GLUT( 3.2.4 OpenGL应用工具包GLUT(续)
2.处理窗口和输入 2.处理窗口和输入 5) void glutKeyboardFunc(void(*func)(unsigned int key,int x,int y)); 参数(* (*func)(unsigned y)为按下 参数(*func)(unsigned int key,int x,int y)为按下 一个非ASCII字符的键( shift键 ASCII字符的键 GLUT调用的函 一个非ASCII字符的键(如shift键)时,GLUT调用的函 数名称。 数名称。 6) void glutMotionFunc(void(*func)(int x,int y)); 参数(*func)(int y)为发生鼠标移动时 为发生鼠标移动时, 参数(*func)(int x,int y)为发生鼠标移动时,GLUT 调用的函数名称。参数x 返回鼠标当前的x 位置。 调用的函数名称。参数x和y返回鼠标当前的x和y位置。
OpenGL是由SGI公司设计的一套底层三维图形API。 OpenGL是由SGI公司设计的一套底层三维图形API。它不是 是由SGI公司设计的一套底层三维图形API 一种编程语言,而是提供了一些预封装的函数, 一种编程语言,而是提供了一些预封装的函数,c语言可以调 用这些函数。 用这些函数。 OpenGL是一个开放图形库,目前在Windows、MacOS、OS/2、 OpenGL是一个开放图形库,目前在Windows、MacOS、OS/2、 是一个开放图形库 Windows Unix/X-Windows等系统下均可使用 等系统下均可使用, Unix/X-Windows等系统下均可使用,因此具有良好的可移植 同时调用方法简洁明了,深受好评,应用广泛。 性,同时调用方法简洁明了,深受好评,应用广泛。 Library)是独立于操作系统和硬 OpenGL(Open Graphics Library)是独立于操作系统和硬 件环境的三维图形软件库。由于其开放性和高度的可重用性, 件环境的三维图形软件库。由于其开放性和高度的可重用性, 目前已成为业界标准. 目前已成为业界标准. 很多优秀的软件都是以它为基础开发 出来的,象著名的产品有动画制作软件3DMAX, Image, 出来的,象著名的产品有动画制作软件3DMAX,Soft Image, VR软件和GIS软件等等 软件和GIS VR软件和GIS软件等等
3.2 OpenGL简介及工具包 3.2 OpenGL简介及工具包GLUT 简介及工具包GLUT
OpenGL所具有的功能基本上涵盖了计算机图形 OpenGL所具有的功能基本上涵盖了计算机图形 学所要包括的各个方面的内容, 学所要包括的各个方面的内容,首先介绍关于 OpenGL的一些基本概念 组成及其简单的功能。 的一些基本概念、 OpenGL的一些基本概念、组成及其简单的功能。
2009
10
2009
83. Biblioteka 制三维物体 例如:绘制圆锥体,函数如下: 例如:绘制圆锥体,函数如下: void glutWireCube(GLdouble size); void glutSolidCube(GLdouble size); 可绘制九个三维物体