OpenGL使用手册

OpenGL使用手册
OpenGL使用手册

OpenGL函数使用手册

(一)OpenGL函数库

格式:

<库前缀><根命令><可选的参数个数><可选的参数类型> 库前缀有gl、glu、aux、glut、wgl、glx、agl 等等,

1,核心函数库主要可以分为以下几类函数:

(1)绘制基本的几何图元函数。如:glBegain().

(2)矩阵操作、几何变换和投影变换的函数。如:矩阵入栈glPushMatrix(),还有矩

阵的出栈、转载、相乘,此外还有几何变换函数glTranslate*(),投影变换函数glOrtho()和视口变换函数glViewport()等等。

(3)颜色、光照和材质函数。

(4)显示列表函数,主要有创建、结束、生成、删除和调用显示列表的函数glNewList

()、glEndList()、glGenLists()、glDeleteLists()和glCallList()。

(5)纹理映射函数,主要有一维和二维纹理函数,设置纹理参数、纹理环境和纹

理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*()等。

(6)特殊效果函数。

(7)选着和反馈函数。

(8)曲线与曲面的绘制函数。

(9)状态设置与查询函数。

(10)光栅化、像素函数。

2,OpenGL实用库(The OpenGL Utility Library)(GLU)

包含有43个函数,函数名的前缀名为glu.

(1)辅助纹理贴图函数。

(2)坐标转换和投影变换函数。

(3)多边形镶嵌工具。

(4)二次曲面绘制工具。

(5)非均匀有理B样条绘制工具。

(6)错误反馈工具,获取出错信息的字符串gluErrorString()

3,OpenGL辅助库

包含有31个函数,函数名前缀名为aux

这部分函数提供窗口管理、输入输出处理以及绘制一些简单的三维物体。4,OpenGL工具库(OpenGL Utility Toolkit)

包含大约30多个函数,函数前缀名为glut,此函数由glut.dll来负责解释执行。

(1)窗口操作函数。窗口初始化、窗口大小、窗口位置等函数glutInit()

glutInitDisplayMode()、glutInitWindowSize() glutInitWindowPosition()等。

(2)回调函数。响应刷新消息、键盘消息、鼠标消息、定时器函数等,

GlutDisplayFunc()、glutPostRedisplay()、glutReshapeFunc()、glutTimerFunc()、glutKeyboardFunc()、glutMouseFunc()。

(3)创建复杂的三维物体。这些和aux库函数功能相同。如创建球体

glutWireSphere().

(4)函数菜单

(5)程序运行函数glutAttachMenu()

5,16个WGL函数,专门用于OpenGL和Windows窗口系统的联接,其前缀名为wgl。

(1)绘制上下文函数。wglCreateContext()、wglDeleteContext()、

wglGetCurrentContent()、wglGetCurrentDC() wglDeleteContent()等。

(2)文字和文本处理函数。wglUseFontBitmaps()、wglUseFontOutlines()。

(3)覆盖层、地层和主平面处理函数。wglCopyContext()、wglCreateLayerPlane()、

wglDescribeLayerPlane()、wglReakizeLayerPlatte()等。

(4)其他函数。wglShareLists()、wglGetProcAddress()等。

(二)函数库列表

1,[OpenGL应用函数库]

gluBeginCurve,gluEndCurve 定义一条不一至的有理的NURBS曲线

gluBeginPolygon,gluEndPolygon 定义一个非凸多边形

gluBeginSurface,gluEndSurface 定义一个NURBS曲线

gluBeginTrim,gluEndTrim 定义一个NURBS整理循环

gluBuild1Dmipmaps 建立一维多重映射

gluBuild2Dmipmaps 建立二维多重映射

gluCylinder 绘制一个圆柱

gluDeleteNurbsRenderer 删除一个NURBS对象

gluDeleQuadric 删除一个二次曲面对象

gluDeleteTess 删除一个镶嵌对象

gluDisk 绘制一个盘子

gluErrorString 根据OpenGL或GLU错误代码产生错误字符串

gluGetNutbsProperty 得到一个NURBS属性

gluGetString 得到一个描述GLU版本号或支持GLU扩展调用的字符串gluGetTessProperty 得到一个镶嵌对象

gluLoadSamplingMatrices 加载NUMRBS例子和精选矩阵

gluLookAt 设定一个变换视点

gluNewNurbsRenderer 创建一个NURBS对象

gluNewQuadric 建立一个二次曲面对象

gluNewTess 建立一个镶嵌对象

gluNextContour 为其他轮廓的开始做标记

gluNurbsCallback 为NURBS对象设定一个回调

gluNnrbsCurve 设定一个NuRBS曲线的形状

gluNurbsProperty 设定一个NURBS属性

gluNurbsSurface 定义一个NURBS表面的形状

gluOrtho2D 定义一个二位正交投影矩阵

gluPartialDisk 绘制一个盘子的弧

gluPerspective 设置一个透视投影矩阵

gluPickMatrix 定义一个拾取区间

gluProject 将对象坐标映射为窗口坐标

gluPwlCurve 描述一个分段线性NURBS修剪曲线

gluQuadricCallback 为二次曲面对象定义一个回调

gluQuadricDrawStyle 为二次曲面设定合适的绘制风格

gluQuadricNormals 定义二次曲面所用的法向的种类

gluQuadricOrientation 定义二次曲面内部或外部方向

gluQuadricTexture 定义是否带二次其面做纹理帖图

gluScaleImage 将图象变换为任意尺寸

gluSphere 绘制一个球体

gluTessBeginContour,gluTessEndContour 划定一个边界描述

gluTessBeginPolygon,gluTessEndPolygon 划定一个多边形描述

gluTessCallback 为镶嵌对象定义一个回调

gluTessNormal 为一个多边行形定义法向

gluTessProperty 设置镶嵌对象的属性

gluTessVertex 定义在一个多边形上的顶点

gluUnProject 将窗口坐标映射为对象坐标

2,[OpenGL核心函数库]

glAccum 操作累加缓冲区

glAddSwapHintRectWIN 定义一组被 SwapBuffers 拷贝的三角形glAlphaFunc 允许设置alpha 检测功能

glAreTexturesResident 决定特定的纹理对象是否常驻在纹理内存中

glArrayElement 定义一个被用于顶点渲染的数组成分glBegin,glEnd 定义一个或一组原始的顶点

glBindTexture 允许建立一个绑定到目标纹理的有名称的纹理glBitmap 绘制一个位图glBlendFunc 特殊的像素算法

glCallList 执行一个显示列表

glCallLists 执行一列显示列表

glClear 用当前值清除缓冲区

GlClearAccum 为累加缓冲区指定用于清除的值 glClearColor 为色彩缓冲区指定用于清除的值 glClearDepth 为深度缓冲区指定用于清除的值 glClearStencil 为模板缓冲区指定用于清除的值 glClipPlane 定义被裁剪的一个平面几何体 glColor 设置当前色彩

glColorMask 允许或不允许写色彩组件帧缓冲区

glColorMaterial 使一个材质色彩指向当前的色彩

glColorPointer 定义一列色彩

glColorTableEXT 定义目的一个调色板纹理的调色板的格式和尺寸 glColorSubTableEXT 定义目的纹理的调色板的一部分被替换glCopyPixels 拷贝帧缓冲区里的像素

glCopyTexImage1D 将像素从帧缓冲区拷贝到一个单空间纹理图象中glCopyTexImage2D 将

像素从帧缓冲区拷贝到一个双空间纹理图象中glCopyTexSubImage1D 从帧缓冲区拷贝一个单空间纹理的子图象 glCopyTexSubImage2D 从帧缓冲区拷贝一个双空间纹理的子图象 glCullFace 定义前面或后面是否能被精选

glDeleteLists 删除相邻一组显示列表

glDeleteTextures 删除命名的纹理

glDepthFunc 定义用于深度缓冲区对照的数据

glDepthMask 允许或不允许写入深度缓冲区

glDepthRange 定义z 值从标准的设备坐标映射到窗口坐标glDrawArrays 定义渲染多个图元glDrawBuffer 定义选择哪个色彩缓冲区被绘制glDrawElements 渲染数组数据中的图元glDrawPixels 将一组像素写入帧缓冲区

glEdgeFlag 定义一个边缘标志数组

glEdgeFlagPointer 定义一个边缘标志数组

glEnable, glDisable 打开或关闭 OpenGL 的特殊功能glEnableClientState,glDisableClientState 分别打开或关闭数组 glEvalCoord 求解一维和二维贴图

glEvalMesh1,glEvalMesh2 求解一维和二维点或线的网格glEvalPoint1,glEvalPoint2 生成及求解一个网格中的单点 glFeedbackBuffer 控制反馈模式

glFinish 等待直到 OpenGL 执行结束

glFlush 在有限的时间里强制OpenGL 的执行

glFogf,glFogi,glFogfv,glFogiv 定义雾参数

glFrontFace 定义多边形的前面和背面

glFrustum 当前矩阵乘上透视矩阵

glGenLists 生成一组空的连续的显示列表

glGenTextures 生成纹理名称

glGetBooleanv,glGetDoublev,glGetFloatv,glGetIntegerv 返回值或所选参数值 glGetClipPlane 返回特定裁减面的系数

glGetColorTableEXT 从当前目标纹理调色板得到颜色表数据glGetColorTableParameterfvEXT,glGetColorTableParameterivEXT 从颜色表中得到调色板参数glGetError 返回错误消息

glGetLightfv,glGetLightiv 返回光源参数值 glGetMapdv,glGetMapfv,glGetMapiv 返回求值程序参数

glGetMaterialfv,glGetMaterialiv 返回材质参数

glGetPixelMapfv,glGetpixelMapuiv,glGetpixelMapusv 返回特定的像素图glGetPointerv 返回顶点数据数组的地址

glGetPolygonStipple 返回多边形的点图案

glGetString 返回描述当前OpenGl 连接的字符串

glGetTexEnvfv 返回纹理环境参数

glGetTexGendv,glGetTexGenfv,glGetTexGeniv 返回纹理坐标生成参数glGetTexImage 返回一个纹理图象 glGetTexLevelParameterfv,glGetTexLevelParameteriv 返回特定的纹理参数的细节级别

glGetTexParameterfv,glGetTexParameteriv 返回纹理参数值

glHint 定义实现特殊的线索

glIndex 建立当前的色彩索引

glIndexMask 控制写色彩索引缓冲区里的单独位

GlIndexPointer 定义一个颜色索引数组

glInitName 初始化名字堆栈

glInterleavedArrays 同时定义和允许几个在一个大的数组集合里的交替数组 glIsEnabled 定义性能是否被允许

glIsList 检测显示列表的存在

glIsTexture 确定一个名字对应一个纹理

glLightf,glLighti,glLightfv,glLightiv 设置光源参数

glLightModelf,glLightModeli,glLightModelfv,glLightModeliv 设置光线模型参数glLineStipple 设定线点绘图案

glLineWidth 设定光栅线段的宽

glListBase 为glcallList 设定显示列表的基础

glLoadIdentity 用恒等矩阵替换当前矩阵

glLoadMatrixd,glLoadMatrif 用一个任意矩阵替换当前矩阵

glLoadName 将一个名字调入名字堆栈

glLogicOp 为色彩索引渲染定义一个逻辑像素操作

glMap1d,glMap1f 定义一个一维求值程序

glMap2d,glMap2f 定义一个二维求值程序

glMapGrid1d,glMapGrid1f,glMapgrid2d,glMapGrid2f 定义一个一维或二维网格glMaterialf,glMateriali,glMateriafv,glMaterialiv 为光照模型定义材质参数glMatrixMode 定义哪一个矩阵是当前矩阵

glMultMatrixd,glMultMatrixf 用当前矩阵与任意矩阵相乘

glNewList,glEndList 创建或替换一个显示列表

glNormal 设定当前顶点法向

glNormalPointer 设定一个法向数组

glOrtho 用垂直矩阵与当前矩阵相乘

glPassThrough 在反馈缓冲区做记号glPixelMapfv,glPixelMapuiv,glPixelMapusv 设定像素交换图glPixelStoref,glpixelStorei 设定像素存储模式

glPixelTransferf,glPixelTransferi 设定像素存储模式

glPixelZoom 设定像素缩放因数

glPointSize 设定光栅点的直径

glPolygonMode 选择一个多边形的光栅模式

glPolygonOffset 设定 OpenGL 用于计算深度值的比例和单元

glPolygonStipple 设定多边形填充图案

glPrioritizeTextures 设定纹理固定的优先级

glPushAttrib,glPopAttrib 属性堆栈的压入和弹出操作glPushClientAttrib,glPopClientAttrib 在客户属性堆栈存储和恢复客户状态值 glPushmatrix,glPopMatrix 矩阵堆栈的压入和弹出操作glPushName,glPopName 名字堆栈的压入和弹出操作

glRasterPos 定义像素操作的光栅位置

glreadBuffer 为像素选择一个源色彩缓冲区

glReadPixels 从帧缓冲区读取一组数据

glRectd,glRectf,glRecti,glRects,glRectdv,glRectfv,glRectiv,glRectsv 绘制一个三角形glRenderMode 定义光栅模式

glRotated,glRotatef 将旋转矩阵与当前矩阵相乘

glScaled,glScalef 将一般的比例矩阵与当前矩阵相乘

glScissor 定义裁减框

glSelectBuffer 为选择模式值建立一个缓冲区

glShadeModel 选择平直或平滑着色

glStencilFunc 为模板测试设置功能和参照值

glStencilMask 控制在模板面写单独的位

glStencilOp 设置激活模式测试

glTexCoord 设置当前纹理坐标

glTexCoordPointer 定义一个纹理坐标数组 glTexEnvf,glTexEnvi,glTexEnvfv,glTexEnviv 设定纹理坐标环境参数glTexGend,glTexgenf,glTexGendv,glTexGenfv,glTexGeniv 控制纹理坐标的生成glTexImage1D 定义一个一维的纹理图象

glTexImage2D 定义一个二维的纹理图

glTexParameterf,glTexParameteri,glTexParameterfv,glTexParameteriv 设置纹理参数glTexSubImage1D 定义一个存在的一维纹理图像的一部分,但不能定义新的纹理glTexSubImage2D 定义一个存在的二维纹理图像的一部分,但不能定义新的纹理glTranslated,glTranslatef 将变换矩阵与当前矩阵相乘glVertex 定义一个顶点glVertexPointer 设定一个顶点数据数组

glViewport 设置视窗

7.11.2014

OpenGL入门学习之七——使用光照来表现立体感

OpenGL入门学习之七——使用光照来表现立体感 2009-01-07 11:49 从生理学的角度上讲,眼睛之所以看见各种物体,是因为光线直接或间接的从它们那里到达了眼睛。人类对于光线强弱的变化的反应,比对于颜色变化的反应来得灵敏。因此对于人类而言,光线很大程度上表现了物体的立体感。 请看图1,图中绘制了两个大小相同的白色球体。其中右边的一个是没有使用任何光照效果的,它看起来就像是一个二维的圆盘,没有立体的感觉。左边的一个是使用了简单的光照效果的,我们通过光照的层次,很容易的认为它是一个三维的物体。 图1 OpenGL对于光照效果提供了直接的支持,只需要调用某些函数,便可以实现简单的光照效果。但是在这之前,我们有必要了解一些基础知识。 一、建立光照模型 在现实生活中,某些物体本身就会发光,例如太阳、电灯等,而其它物体虽然不会发光,但可以反射来自其它物体的光。这些光通过各种方式传播,最后进入我们的眼睛——于是一幅画面就在我们的眼中形成了。 就目前的计算机而言,要准确模拟各种光线的传播,这是无法做到的事情。比如一个四面都是粗糙墙壁的房间,一盏电灯所发出的光线在很短的时间内就会经过非常多次的反射,最终几乎布满了房间的每一个角落,这一过程即使使用目前运算速度最快的计算机,也无法精确模拟。不过,我们并不需要精确的模拟各种光线,只需要找到一种近似的计算方式,使它的最终结果让我们的眼睛认为它是真实的,这就可以了。 OpenGL在处理光照时采用这样一种近似:把光照系统分为三部分,分别是光源、材质和光照环境。光源就是光的来源,可以是前面所说的太阳或者电灯等。材质是指接受光照的各种物体的表面,由于物体如何反射光线只由物体表面决定(OpenGL中没有考虑光的折射),材质特点就决定了物体反射光线的特点。光照环境是指一些额外的参数,它们将影响最终的光照画面,比如一些光线经过多次反射后,已经无法分清它究竟是由哪个光源发出,这时,指定一个“环境亮度”参数,可以使最后形成的画面更接近于真实情况。

详解Qt写OpenGL入门示例

详解 Qt 写 OpenGL 入门示例 2011-07-01 17:12 佚名互联网字号: | 本文介绍的是详解 Qt 写 OpenGL 入门示例,不多说,先来看详细内容。 AD: Qt 写OpenGL 入门示例是本文所介绍的内容。其实我个人是很喜欢玩游戏的,为什么呢?只是因为我还无法制作游戏.所以,以前就看过一些...东西. 比如directx/opengl. 可惜无法入门,而当年拼命的记忆那个windows api版的hello world(vc++自动生成)...在一个星期后便忘记了.使得我对上的编程充满了阴影(在若干年后,我终于明白你不需要去记忆具体api, 因为环境会给你提示) - 都没入门, 怎么开始directx哦?(不过无数次的hello world,也有好处,就是让我明白了windows平台的消息循环机制...这让我在若干年后在看到qt 的()时,心有灵犀的想, 哦,进入了消息循环了...) 后来自然就看看qt,看看c++、PHP就不说了,一直搞这个的)等. 还有有比如SDL一类的搞搞,但始终不得其门而入,qt有自带的提供给opengl的窗口类的. 在我以前, 反正也试过,这样那样的错误就放弃了... 不过不知道为什么, 现在却很简单,(可能做任何事情都有简单和难的时候,只是未到时间吧).,假如你也想玩玩qt? opengl的话, 那么先具体下面一些东西: (1)OpenGL编程指南 (书, 里面有代码的,咋们参考一些) (2)装了qt库和环境(windows下qt里应该有自带opengl, 所以opengl的库就不提了) (3)编译器 那么我们就开始了...反正是很简单的入门...写个, 如下 1.yarco@coto?~/Documents/test/1?$?cat? ? 2.#include?? 3.#include?"" ? 1.int?main(int?argc,?char*?argv[])?. ? 2.yarco@coto?~/Documents/test/1?$?cat? ? 3.#include?"" ? 4.void?MyWidget::initializeGL() ? 5.{ ? 6.} ? 7.void?MyWidget::resizeGL(int?w,?int?h) ? 8.{ ? 9.} ? 10.void?MyWidget::paintGL() ? 11.{ ? 12.????????renderText(20,?100,?"Hello,?My?first?OpenGL?app."); ? 13.} ? .(不详细描述)

OpenGL学习入门之VS2010环境配置

OpenGL学习入门之VS2010环境配置OpenGL开发环境简介 基于OpenGL标准开发的应用程序运行时需有动态链接库OpenGL32.DLL、Glu32.DLL,这两个文件在安装Windows NT时已自动装载到C:\WINDOWS\SYSTEM32目录下(这里假定用户将Windows NT安装在C盘上)。OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中,开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。OpenGL 函数命令方式十分有规律,每个库函数均有前缀gl、glu、aux,分别表示该函数属于OpenGL 基本库、实用库或辅助库。Windows NT下的OpenGL包含了100多个核心函数,均以gl 作为前缀,同时还支持另外四类函数: OpenGL实用库函数:43个,以glu作为前缀; OpenGL辅助库函数:31个,以aux作为前缀; Windows专用库函数(WGL):6个,以wgl作为前缀; Win32API函数(WGL):5个,无前缀。 安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) https://www.360docs.net/doc/8b16205478.html,/resources/libraries/glut/glutdlls37beta.zip VS环境配置 将下载的压缩包解开,将得到5个文件(glut.dll, glut32.dll, glut.lib, glut32.lib,glut.h)

(1)把glut.h复制到x:\Program Files\Microsoft\Visual Studio 10.0\VC\include\GL文件夹中,如果没有GL这个文件夹则可以自己新建一个。(x是你安装VS的盘符号)(2)把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(即与include并排的lib文件夹下)。 (3)把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32) (注:如在开发应用程序时用到OpenGL辅助库函数,则还需下载相应动态链接库,包含glaux.dll, glaux.lib, glaux.h,相应步骤同上) 第一个OpenGL程序 首先创建工程,其步骤如下: (1)创建一个Win32 Console Application。 (2)链接OpenGL libraries。在Visual C++中先单击Projec / Settings,找到Link标签,最后在Object/library modules 中加上OpenGL32.lib;GLu32.lib;glut.lib;glut32.lib 。 (3)单击Project / Settings中的C/C++标签,将Preprocessor definitions 中的_CONSOLE 改为__WINDOWS。 (4)单击Project / Settings中的General标签,将Character Set属性值改变为Not Set,最后单击OK。 现在你可以把下面的例子拷贝到工程中去,编译运行。你可以看到一个彩色的三角形,如图1所示。

OpenGL入门学习——第三课 绘制几何图形的一些细节问题

OpenGL入门学习——第三课绘制几何图形的一些细节问题 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处。例如:点太小,难以看清楚;直线也太细,不舒服;或者想画虚线,但不知道方法只能用许多短直线,甚至用点组合而成。 这些问题将在本课中被解决。 下面就点、直线、多边形分别讨论。 1、关于点 点的大小默认为1个像素,但也可以改变之。改变的命令为glPointSize,其函数原型如下:void glPointSize(GLfloat size); size必须大于0.0f,默认值为1.0f,单位为“像素”。 注意:对于具体的OpenGL实现,点的大小都有个限度的,如果设置的size超过最大值,则设置可能会有问题。 例子: void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); glPointSize(5.0f); glBegin(GL_POINTS); glVertex2f(0.0f, 0.0f); glVertex2f(0.5f, 0.5f); glEnd(); glFlush(); } 2、关于直线 (1)直线可以指定宽度: void glLineWidth(GLfloat width); 其用法跟glPointSize类似。 (2)画虚线。 首先,使用glEnable(GL_LINE_STIPPLE);来启动虚线模式(使用glDisable(GL_LINE_STIPPLE)可以关闭之)。 然后,使用glLineStipple来设置虚线的样式。 void glLineStipple(GLint factor, GLushort pattern); pattern是由1和0组成的长度为16的序列,从最低位开始看,如果为1,则直线上接下来应该画的factor个点将被画为实的;如果为0,则直线上接下来应该画的factor个点将被画为虚的。 以下是一些例子: https://www.360docs.net/doc/8b16205478.html,/upfile/200608/20060801172519.gif 声明:该图片来自https://www.360docs.net/doc/8b16205478.html,,该图片是《OpenGL编程指南》一书的附图,由于该书的旧版(第一版,1994年)已经流传于网络,我希望没有触及到版权问题。 示例代码:

计算机图形学试验指导一–OpenGL基础

计算机图形学实验指导(一) –OpenGL基础 1.综述 这次试验的目的主要是使大家初步熟悉OpenGL这一图形系统的用法,编程平台是Visual C++,它对OpenGL提供了完备的支持。 尽管OpenGL包括渲染命令,但却独立于任何窗口系统和操作系统。因此,OpenGL并不包括用来打开窗口以及从键盘或鼠标读取事件的命令。在这里,我们应用GLUT库简化Windows窗口操作。 2.准备GLUT库 下载glut压缩包后,解压,把glut32.dll放在Windows的system32目录下,将glut32.lib 放在C:\program files\Microsoft Visual Studio\VC98\Lib目录中,将glut.h放在C:\program files\Microsoft Visual Studio\VC98\Include\GL目录中 2.在VC中新建项目 新建一个项目。 选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,回车即可。VC为你创建一个工作区(WorkSpace),你的项目就放在这个工作区里。 为项目添加文件 为了使用OpenGL,我们需要在项目中加入相关的Lib文件:glut32.lib 选中菜单Project->Settings项,在link选项卡中的Object/Library modules栏中加入glut32.lib。 选择菜单File中的New选项,弹出一个分页的对话框,选中页Files中的C++sourcefile,填入文件名,钩选添加到刚才建的那个工程里,然后就可以开始编程了。 3.一个OpenGL的例子 #include //初始化OpenGL void init(void) { glClearColor(0.0f, 0.0f, 0.0f, 0.0f);//设置背景颜色 glShadeModel(GL_FLAT);//设置明暗处理 } //主要的绘制过程 void display(void) { glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓存 glBegin(GL_LINES);//开始画直线 glColor3f(1.0f, 1.0f, 1.0f);//设置颜色为白色 glVertex2f(30.0f, 30.0f);//第一根线的两个端点 glVertex2f(200.0f, 400.0f);

_OpenGL入门教程

OpenGL入门教程 1.第一课: 说起编程作图,大概还有很多人想起TC的#include 吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。 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等专业游戏就知道了。 OpenGL官方网站(英文) https://www.360docs.net/doc/8b16205478.html, 下面我将对Windows下的OpenGL编程进行简单介绍。 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL 的。但这里我们选择Visual Studio 2005作为学习OpenGL的环境。 第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) https://www.360docs.net/doc/8b16205478.html,/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接: https://www.360docs.net/doc/8b16205478.html,/upfile/200607311626279.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件

OpenGL入门C++教程

OpenGL入门c++教程 1.第一课: 说起编程作图,大概还有很多人想起TC的#include 吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。 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等专业游戏就知道了。 OpenGL官方网站(英文) https://www.360docs.net/doc/8b16205478.html, 下面我将对Windows下的OpenGL编程进行简单介绍。 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL 的。但这里我们选择Visual Studio 2005作为学习OpenGL的环境。 第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) https://www.360docs.net/doc/8b16205478.html,/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接: https://www.360docs.net/doc/8b16205478.html,/upfile/200607311626279.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”)。把解压得到的glut.h放到这个文件夹。 3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹)。

OpenGL入门学习——第一课 编写第一个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等专业游戏就知道了。 OpenGL官方网站(英文) https://www.360docs.net/doc/8b16205478.html, 下面我将对Windows下的OpenGL编程进行简单介绍。 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我们选择Visual Studio 2005作为学习OpenGL的环境。 第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。Windows环境下的GLUT下载地址:(大小约为150k) https://www.360docs.net/doc/8b16205478.html,/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接: https://www.360docs.net/doc/8b16205478.html,/upfile/200607311626279.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”)。把解压得到的glut.h放到这个文件夹。 3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹)。 4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32) 第三步,建立一个OpenGL工程 这里以VisualStudio2005为例。 选择File->New->Project,然后选择Win32 Console Application,选择一个名字,然后按OK。

openggl画图初学必看

OpenGL作图非常方便,故日益流行,但对许多人来说,是在微机上进行的,首先碰到的问题是,如何适应微机环境。这往往是最关键的一步,虽然也是最初级的。一般的,我不建议使用glut 包.那样难以充分发挥Windows 的界面上的功能. 下面介绍如何在VC++ 上进行OpenGL 编程。OpenGL 绘图的一般过程可以看作这样的,先用OpenGL 语句在OpenGL 的绘图环境RenderContext (RC)中画好图, 然后再通过一个Swap buffer 的过程把图传给操作系统的绘图环境DeviceContext (DC)中,实实在在地画出到屏幕上. 下面以画一条Bezier 曲线为例,详细介绍VC++ 上OpenGL编程的方法。文中给出了详细注释,以便给初学者明确的指引。一步一步地按所述去做,你将顺利地画出第一个OpenGL 平台上的图形来。 一、产生程序框架Test.dsw New Project | MFC Application Wizard (EXE) | "Test" | OK *注* : 加“”者指要手工敲入的字串 二、导入Bezier 曲线类的文件 用下面方法产生BezierCurve.h BezierCurve.cpp 两个文件: WorkSpace | ClassView | Test Classes| <右击弹出> New Class | Generic Class(不用MFC类) | "CBezierCurve" | OK 三、编辑好Bezier 曲线类的定义与实现 写好下面两个文件: BezierCurve.h BezierCurve.cpp 四、设置编译环境: 1. 在BezierCurve.h 和TestView.h 内各加上: #include #include #include 2. 在集成环境中 Project | Settings | Link | Object/library module | "opengl32.lib glu32.lib glaux.lib" | OK

初学OpenGL:什么是绘制上下文

初学OpenGL:什么是绘制上下文 什么是绘制上下文(Rendering Context) 初学OpenGL,打开红宝书,会告诉你OpenGL是个状态机,OpenGL采用了客户端-服务器模式,那时觉得好抽象,直到后来了解了绘制上下文才把这些联系起来。我们可以认为每一个硬件GPU是个服务器,每一个绘制上下文对应于申请的一个客户端,一个客户端维护着一套状态机,如果两个窗口分别对应两个不同的绘制上下文,则两个窗口彼此状态独立。申请绘制上下文,意味着系统资源的申请,每个绘制上下文还是需要不少资源的,记得曾经试过在chrome的TAB页不断加载WebGL页面,由于WebGL使用的是OpenGL ES,同样需要绘制上下文,当加载三十多个页面的时候,Chrome整个崩溃了。 所有的OpenGL调用,都需要指定是在哪个上下文环境下调用的。不同的上下文中,同样的资源ID,可能对应于各自上下文中不同类型的资源。 不同的操作系统,都有各自的绘制上下文创建、和设置当前绘制上下文的API。 如何创建绘制上下文 我们一般做Demo程序,都会使用GLUT,所以很多人可能并没有自己创建过绘制上下文。GLUT的函数GlutCreateWindow除了创建了一个窗口,同时还创建了一个绘制上下文,并将创建的绘制上下文设置为当前的绘制上下文。对于Windows平台,首先创建一个设备上下文(Device Context,DC),以DC为输入,可以创建一个绘制上下文。创建绘制上下文以后,调用MakeCurrent,将创建的上下文设置为当前的绘制上下文。 创建了绘制上下文,并设置为当前上下文以后,还不能使用OpenGL最新的特性,调用OpenGL 1.1以后的API仍然会崩溃。一般我们使用Glew库,调用glewInit(),得到OpenGL 随显卡驱动一起发布的新特性的函数入口地址。 绘制上下文和线程 两个线程同时MakeCurrent到同一个绘制上下文,会导致程序崩溃。大型程序的一般做法是申请一条线程,专门用于绘制,创建线程时,为该绘制线程申请一个绘制上下文,一直

Opengl混合入门介绍

OpenGL混合入门学习 1、混合是什么 混合是什么呢?就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。混合是一种常用的技巧,通常可以用来实现半透明透明效果。但其实它也是十分灵活的,可以通过不同的设置得到不同的混合结果,产生一些有趣或者奇怪的图象。 为了更好地理解这些概念,我们可以举出一个例子来简要说明。例如,坐在汽车内透过车窗的茶色玻璃看车外的绿树,这些树木的颜色并不是它们本来的绿色,而是透明的茶色与不透明的绿色的混合颜色。也就是说,最终的颜色来源于两部分,一部分来自于玻璃的茶色,另一部分来自于树木的绿色。 2、开启与关闭 要使用OpenGL的混合功能,只需要调用:glEnable(GL_BLEND);即可。 要关闭OpenGL的混合功能,只需要调用:glDisable(GL_BLEND);即可。 注意:只有在RGBA模式下,才可以使用混合功能,颜色索引模式下是无法使用混合功能的。 (RGBA模式、颜色索引模式的介绍可以参考下面的内容: https://www.360docs.net/doc/8b16205478.html,/blog/static/960747352010425923869/) 3、混合原理介绍 前面我们已经提到,混合需要把原来的颜色和将要画上去的颜色找出来,经过某种方式处理后得到一种新的颜色。这里把将要画上去的颜色称为“源颜色”,把原来的颜色称为“目标颜色”。 OpenGL 会把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因子”,目标颜色乘以的系数称为“目标因子”),然后相加,这样就得到了新的颜色。(也可以不是相加,新版本的OpenGL 可以设置运算方式,包括加、减、取两者中较大的、取两者中较小的、逻辑运算等,这里只是入门介绍,不讨论这个了) 下面用数学公式来表达一下这个运算方式。假设: 源颜色的四个分量(指红色,绿色,蓝色,alpha值)是(Rs, Gs, Bs, As), 目标颜色的四个分量(指红色,绿色,蓝色,alpha值)是(Rd, Gd, Bd, Ad), 设源因子为(Sr, Sg, Sb, Sa), 目标因子为(Dr, Dg, Db, Da)。 则混合产生的新颜色可以表示为: (Rs*Sr+Rd*Dr, Gs*Sg+Gd*Dg,Bs*Sb+Bd*Db, As*Sa+Ad*Da) 当然了,如果颜色的某一分量超过了1.0,则它会被自动截取为1.0,不需要考虑越界的问题 4、实现函数介绍 在OpenGL中,由函数gjBlendFunc()来产生这两个融合因子的值。其函数形式为: void glBlendFunc(GLenum sfactor,GLenum dfactor) glBlendFunc有两个参数,前者表示源因子,后者表示目标因子,这也因子都是预定义的宏,下面将详细说明。 5、源因子和目标因子值介绍

OpenGL入门学习——第五课 三维的空间变换

OpenGL入门学习——第五课三维的空间变换今天要讲的是三维变换的内容,课程比较枯燥。主要是因为很多函数在单独使用时都不好描述其效果,我只好在最后举一个比较综合的例子。希望大家能一口气看到底了。只看一次可能不够,如果感觉到迷糊,不妨多看两遍。有疑问可以在下面跟帖提出。 我也使用了若干图形,希望可以帮助理解。 在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从-1到1,还只能是X轴向右,Y轴向上,Z轴垂直屏幕。这些限制给我们的绘图带来了很多不便。 我们生活在一个三维的世界——如果要观察一个物体,我们可以: 1、从不同的位置去观察它。(视图变换) 2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它。(模型变换) 3、如果把物体画下来,我们可以选择:是否需要一种“近大远小”的透视效果。另外,我们可能只希望看到物体的一部分,而不是全部(剪裁)。(投影变换) 4、我们可能希望把整个看到的图形画下来,但它只占据纸张的一部分,而不是全部。(视口变换) 这些,都可以在OpenGL中实现。

OpenGL变换实际上是通过矩阵乘法来实现。无论是移动、旋转还是缩放大小,都是通过在当前矩阵的基础上乘以一个新的矩阵来达到目的。关于矩阵的知识,这里不详细介绍,有兴趣的朋友可以看看线性代数(大学生的话多半应该学过的)。 OpenGL可以在最底层直接操作矩阵,不过作为初学,这样做的意义并不大。这里就不做介绍了。 1、模型变换和视图变换 从“相对移动”的观点来看,改变观察点的位置与方向和改变物体本身的位置与方向具有等效性。在OpenGL中,实现这两种功能甚至使用的是同样的函数。 由于模型和视图的变换都通过矩阵运算来实现,在进行变换前,应先设置当前操作的矩阵为“模型视图矩阵”。设置的方法是以 GL_MODELVIEW为参数调用glMatrixMode函数,像这样:glMatrixMode(GL_MODELVIEW); 通常,我们需要在进行变换前把当前矩阵设置为单位矩阵。这也只需要一行代码: glLoadIdentity(); 然后,就可以进行模型变换和视图变换了。进行模型和视图变换,主要涉及到三个函数: glTranslate*,把当前矩阵和一个表示移动物体的矩阵相乘。三个参数分别表示了在三个坐标上的位移值。

实验1 OpenGL图形编程入门

实验一 OpenGL图形编程入门 一、实验目的 1、了解和掌握OpenGL的安装; 2、掌握一个简单的基于OpenGL的C++程序结构; 3.掌握win32程序框架; 4、掌握OpenGL中若干基本图形的绘制。 二、实验环境 硬件要求: PC机,主流配置,最好为独立显卡,显存512M以上。 软件环境: 操作系统:Windows 7/Windows8 语言开发工具:Microsoft Visual studio 2010,Visual C++。 程序框架: win32应用程序 三、实验内容与要求 ●要求:实验所有步骤所生成的效果截图拷贝到实验报告文档里备查,并附上相应的代 码。 WORD文档命名方式:学号姓名-实验序号-实验名称。 ●内容: 1、准备好OpenGL库文件 ●Glut32.dll 路径 %system root%\ SysWOW64 ●Glut32.lib in PATH\lib ●Glut.h in PATH\Include ●system root为windows7或windows8安装路径 ●path为 Visual studio 2010的安装路径 2、建立一个工程文件,并运行样本程序my_first_program.cpp,观看结果。 (1)启动Microsoft Visual studio 2010,在菜单栏中点击“文件”选项,选择“新建”“项目”。如图1-1. 图1-1 新建项目

(2)在新建项目的窗口中选择“Visual C++的Win32项目”,然后输入项目名称(例如lab1_basis),选择项目的保存位置(或者使用默认保存路径),单击“确定”。如图1-2所示。 图1-2 Win32项目 (3) 将工程文件中Sources Files中的C++源文件(lab1_basis.cpp)替换成以下样本程序: 图1-3 替换成样本程序 //样本程序My_first_program.cpp #include"stdafx.h" #include void display(void) { glClearColor(0.0f, 0.0f, 0.0f, 1.0f); //设置清屏颜色

通俗易懂讲OpenGL入门学习

OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include 吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。 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等专业游戏就知道了。 OpenGL官方网站(英文) https://www.360docs.net/doc/8b16205478.html, 下面将对Windows下的OpenGL编程进行简单介绍。 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我们选择Visual Studio 2005作为学习OpenGL的环境。

OpenGL_shader入门教程

Chapter 7. OpenGL Shading 语言的 API ARB_shader_objects, ARB_vertex_shader,和 ARB_fragment_shader引入了新的API和功能用来支持使用OpenGL Shading Language写shader。这个API集合在本书中被称为OPENGL SHADING LANGUAGE API。为了检测一个OpenGL的实现是不是支持OpenGL Shading语言,可以通过调用参数为GL_EXTENSIONS的函数glGetString来获得一个字符串,检查在返回的字符串里是否含有"GL_ARB_shader_objects", "GL_ARB_vertex_shader",和"GL_ARB_fragment_shader"这三个子字符串来判断。这种机制也可以用来确定是系统是支持的OpenGL Shading 语言的版本号。如果返回的扩展字符串里含有"GL_ARB_shading_language_100",那么OPENGL SHADING LANGUAGE API支持1.00版本的OpenGL Shading语言。 Appendix B. 在这章里,我们将学习新加入的OpenGL函数(entry points),它们用来创建、加载、编译、和连接shader,这些函数还被用来给shader传递一般的顶点属性和uniform变量。支持shader的OpenGL 入口函数详细列表见附录B。 在本章的最后,我们将介绍用来创建和使用第6章里的brick shader的程序代码。如果你已经等不及了,那么请先去看7.11节,然后再回来学习这些API的细节。 下面是创建和使用OpenGL shader的简介: ?用glCreateShaderObjectARB创建一个或多个(空的)shader对象 ?调用glShaderSourceARB给shader提供源代码。 ?为每个shader调用glCompileShaderARB来编译它。 ?调用glCreateProgramObjectARB创建一个program对象. ?通过调用glAttachObjectARB把所有的shader对象和program对象关联起来。 ?调用glLinkProgramARB把program对象连接起来。 ?调用glUseProgramObjectARB把可执行的program设置成作为OpenGL当前状态的一部分。 ?如果shader使用了uniform变量。如果想要对这些uniform变量进行处理,需要通过调用glLinkProgramARB和glGetUniformLocationARB查询得到该变量,然后再通过glUniformARB来赋值。 ?如果vertex shader自定义了attribute变量,有两种方式指定该属性对应的索引值,首先可以通过在链接shader前调用glBindAttribLocationARB来设 定,也可以由OpenGL自动指定,在连接后可以通过调用函数 glGetAttribLocationARB来查询得到使用的索引值。顶点的一般属性 (Generic vertex attributes)也有两种方式送入vertex shader,第一种是通过调用glVertexAttribARB,第二种是一起调用 glVertexAttribPointerARB 和 glEnableVertexArrayPointer,通过这些指令就可以绘制顶点数组了。

OpenGL入门学习1-6(刚看了,看完红宝书前两章新手必看!!很实用多动手~强烈推荐!!)

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等专业游戏就知道了。OpenGL官方网站(英文) https://www.360docs.net/doc/8b16205478.html, 下面将对Windows下的OpenGL编程进行简单介绍。 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我们选择Visual Studio 2005作为学习OpenGL的环境。 第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) https://www.360docs.net/doc/8b16205478.html,/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接: https://www.360docs.net/doc/8b16205478.html,/upfile/200607311626279.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的 “V C\PlatformSDK\include\gl文件夹”)。把解压得到的glut.h放到这个文件夹。 3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹)。 4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为: C:\Windows\System32) 第三步,建立一个OpenGL工程 这里以VisualStudio2005为例。 选择File->New->Project,然后选择Win32 Console Application,选择一个名字,然后按OK。 在谈出的对话框左边点Application Settings,找到Empty project并勾上,选择Finish。 然后向该工程添加一个代码文件,取名为“OpenGL.c”,注意用.c来作为文件结尾。 搞定了,就跟平时的工程没什么两样的。

相关主题
相关文档
最新文档