文档库 最新最全的文档下载
当前位置:文档库 › 开发基于OpenGL的应用程序之API速查

开发基于OpenGL的应用程序之API速查

开发基于OpenGL的应用程序之API速查
开发基于OpenGL的应用程序之API速查

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()。

2.OpenGL实用库The OpenGL Utility Library (GLU) 包含有43个函数,函数名的前缀为glu。OpenGL提供了强大的但是为数不多的绘图命令,所有较复杂的绘图都必须从点、线、面开始。Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。此函数由glu.dll来负责解释执行。OpenGL中的核心库和实用库可以在所有的OpenGL平台上运行。主要包括了以下几种:

辅助纹理贴图函数:gluScaleImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps();

坐标转换和投影变换函数:定义投影方式函数gluPerspective()、gluOrtho2D() 、gluLookAt(),拾取投影视景体函数gluPickMatrix(),投影矩阵计算gluProject()和gluUnProject();

多边形镶嵌工具:gluNewTess()、gluDeleteTess()、gluT essCallback()、gluBeginPolygon()、gluTessVertex()、gluNextContour()、gluEndPolygon();

二次曲面绘制工具,主要有绘制球面、锥面、柱面、圆环面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric();

非均匀有理B样条绘制工具:主要用来定义和绘制Nurbs曲线和曲面,包括gluNewNurbsRenderer()、gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、

gluBeginCurve()、gluNurbsProperty();

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

3.Windows专用库

针对windows平台的扩展,包含有16个函数,函数名前缀为wgl。这部分函数主要用于连接OpenGL和Windows ,以弥补OpenGL在文本方面的不足。Windows专用库只能用于Windows环境中。

这类函数主要包括以下几类:

绘图上下文相关函数:wglCreateContext()、wglDeleteContext()、wglGetCurrentContent()、wglGetCurrentDC()、wglDeleteContent();

文字和文本处理函数:wglUseFontBitmaps()、wglUseFontOutlines();

覆盖层、地层和主平面层处理函数:wglCopyContext()、wglCreateLayerPlane()、wglDescribeLayerPlane()、wglReakizeLayerPlatte();

其他函数:wglShareLists()、wglGetProcAddress()。

4.Win32 API函数库

包含有6个函数,函数名无专用前缀,是win32扩展函数。这部分函数主要用于处理像素存储格式和双帧缓存;这6个函数将替换Windows GDI中原有的同样的函数。Win32API 函数库只能用于Windows 95/98/NT环境中。

5. 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 定义一列色彩

glColorT ableEXT 定义目的一个调色板纹理的调色板的格式和尺寸glColorSubT ableEXT 定义目的纹理的调色板的一部分被替换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 生成一组空的连续的显示列表

glGenT extures 生成纹理名称

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

glGetColorTableEXT 从当前目标纹理调色板得到颜色表数据glGetColorTableParameterfvEXT,glGetColorT ableParameterivEXT 从颜色表中得到调色板参数

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 设置视窗

6. 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 绘制一个球体

gluT essBeginContour,gluT essEndContour 划定一个边界描述gluT essBeginPolygon,gluT essEndPolygon 划定一个多边形描述gluT essCallback 为镶嵌对象定义一个回调

gluT essNormal 为一个多边行形定义法向

gluT essProperty 设置镶嵌对象的属性

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

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

7. 详细函数描述

void glGenTextures(GLsizei n, GLuint *textures)

函数说明

n:用来生成纹理的数量

textures:存储纹理索引的glGenT extures函数根据纹理参数返回n个纹理索引。纹理名称集合不必是一个连续的整数集合。(glGenT extures就是用来产生你要操作的纹理对象的索引的,比如你告诉OpenGL,我需要5个纹理对象,它会从没有用到的整数里返回5个给你)

void glBindTexture (GLenum target, GLuint texture)

实际上是改变了OpenGL的这个状态,它告诉OpenGL下面对纹理的任何操作都是对它所绑定的纹理对象的,比如glBindTexture(GL_TEXTURE_2D,1)告诉OpenGL下面代码中对2D纹理的任何设置都是针对索引为1的纹理的。产生纹理函数假定目标纹理的面积是由glBindTexture函数限制的。先前调用glGenT extures产生的纹理索引集不会由后面调用的glGenT extures得到,除非他们首先被glDeleteTextures删除。你不可以在显示列表中包含glGenT extures

void glMatrixMode (GLenum mode)

指定哪一个矩阵是当前矩阵

mode 指定哪一个矩阵堆栈是下一个矩阵操作的目标,可选值: GL_MODELVIEW、GL_PROJECTION、GL_TEXTURE. 说明glMatrixMode设置当前矩阵模式: GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作(模型矩阵).

GL_PROJECTION,对投影矩阵应用随后的矩阵操作(投影矩阵).

GL_TEXTURE,对纹理矩阵堆栈应用随后的矩阵操作.

与glLoadIdentity()一同使用

glLoadIdentity():该函数的功能是重置当前指定的矩阵为单位矩阵。在glLoadIdentity()之后我们为场景设置了透视图。glMatrixMode(GL_MODELVIEW)设置当前矩阵为模型视图矩阵,模型视图矩阵储存了有关物体的信息。

void gluPerspective ( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)

fovy越小也就是镜头(相机,底片)离要成像的物体(杯子)越近,也就成像比较大(显示越少的物体,相当放大,裁剪区域越小,此物体占满了底片);在这里我把成像平面当做视口平面(即最终显示成像平面,观察平面)吧。视口平面大小由glViewPort设定;

此函数参数相当是设置镜头和物体的距离

zNear,zFar是到观察原点的距离(沿着z的负轴方向),因此这两个数应该总是设定成正数.从网上很多资料都在说,zNear和zFar做为一个深度的裁剪范围,在这个范围内的物体才能进行投影,否则就直接忽略.初学者到这个地方,也能够理解,但从我们上面的问题来看,我们不知道观察平面在哪呢?其实opengl已经规定了,观察平面就在近平面这里,也就是zNear指定的地方,观察平面是平行于观察坐标系的(X,Y),因此我们指定z轴,也就指定它的位置.

OK,我们的观察平面已经确定了,那观察平面的裁剪区域呢?

前面我们说过,观察平面的裁剪窗口的横纵比(w/h)最好和屏幕的一致(估计说的不准确,也就是视口的横纵比,从而只是等比例缩放而已).因此,gluPerspective的第二个参数就是aspect了,这样就把裁剪区域的宽度和高度的比例确定了.那剩下的是,我们目前还需要设定高度或者宽度.

gluPerspective的第一个参数是,fovy,它是一个角度.其实通过fovy和zNear能够计算出裁剪窗口的高度.从而我们也就决定了裁剪窗口

的大小了.fovy就是视锥体的上下平面的角度.裁剪窗口的高度h =2 * tan(fovy/2) * zNear.

从而我们知道,如果它为0的话,那肯定裁剪窗口的高度和宽度都为0,那就没有任何显示

了.呵呵

如果它是180度,那就是裁剪窗口的高度就是无穷大,肯定没有实际价值,程序有可能也崩溃了.

如果是178度,那它的裁剪窗口的高度也很大,裁剪的窗口越大,也就意味着它显示的东西越多.如果对于同一个物体成像来说,它在观察平面的投影是不变的.但由于底片的大小比我们视口的大,那我们就要等比例缩放了,从而在屏幕上的显示时,我们就感觉它变小了.呵呵.

上面网页上,还有一个截图,如果设置成1度,在很远的地方的一个球,感觉看的很大,很清楚,类似于照相机的镜头拉近了.

它也是一样的原理,本身这个球,在1度还是90度,在我们的观察平面的投影是不变的,而变换的是我们的裁剪窗口的大小.设成1度,基本上裁剪窗口的高度很小,从而我们放到视口上,它就必须同比例的放大.从而就感觉放大了.并且显示的场景的范围也变小了.好了,到目前位置,我们也就说清楚了gluLooKAt 和gluPerspective的作用了,还有什么不明白的,请评论?谢谢

视口的调整大小,opengl的函数是glViewPort,这个和二维的就一样了,没有特别需要注意的.

创建一个投影矩阵并且与当前矩阵相乘,得到的矩阵设定为当前变换,但要先通过glMatrixMode设定成投影矩阵才会得到想要的投影矩阵变换。例如:gluPerspective(45.0f,(GLfloat)cx/(GLfloat)cy,0.1f,100.0f);glMatrixMode(GL_MODELVIEW);

可以出来结果,反之,换位置后;

glMatrixMode(GL_MODELVIEW);

gluPerspective(45.0f,(GLfloat)cx/(GLfloat)cy,0.1f,100.0f);

则,投影矩阵位置不正确.

void gluLookAt ( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz)

一般来说,建模时采用建模坐标系,然后在绘制的时候,先把建模坐标系转换到世界坐标系.opengl的坐标系,Z的正方向指向屏幕外的(属于右手坐标系),X的正方向指向右,Y的正方向指向上.

我们假设在前面某个点(0,10,-10) 放置了一个茶杯.我们这样把这个茶杯显示在屏幕上呢?如果是二维的开发,我们估计直接把茶杯的图片显示出来,而现在在三维上,我们是用相机来拍照,场景里面就不只是一个茶杯了,还有其他的东西,并且茶杯如何体现它的三维的成像,也是一个问题.

既然是拍照,我们就需要把相机的位置调整好,这一般来说就是一个视点(看的地方).然后我们需要调整相机的朝向,这个也好理解.

剩下的问题是,我相机也选好位置了(0,10,0),方向也选好了(指向(0,0,-1)).好,这时我们要考虑一个初学者容易想不清楚的问题,茶杯如何在观察屏幕显示出来呢?

上面简单的绘制了一个示意图,为了把Cup绘制到Screen上,我们需要做下面的变换.首先,我们建立一个观察坐标系,其原点在(ViewPoint)上,然后我们需要一个观察平面(也就是上面的Screen,注意这个和真正屏幕显示出来的有点差别,会有另外一个对应关系,不过也就是二维的变换,我们就不仔细区分).现在我们就想把Cup的形状在观察平面上投

影,注意是投影.这个投影的结果也就是我们绘制的结果.

既然是投影,就和坐标有关联了,因此我们必须把Cup都统一转换到观察坐标系里面来,这个过程涉及到平移/旋转等操作.

当我们把Cup的坐标和模型都使用了观察坐标系表示之后,就要开始真正的投影了.

投影从数学角度来说,是比较简单和直观的.正交投影和透视投影是两种不同的投影.我在这边把它比如成光源.正交投影,就是有一排平行于观察平面的法线的方向的光源,它发出一组平行线,从而不管物体离观察平面的远近,大小都是一样的.

而透视投影,类似于有个点光源,它会发出一组相交于一点的光线,从而相同的大小,近的物体投影的大小大,而远一些的就小一点.

投影之后,就在观察界面有了显示,这就是我们最终的成像了.观察平面从数学来说是无线大的,从我们实际使用角度,我们需要限制一个大小,这个大小也就决定了,我们那些区域可以显示,其他投影在别的区域就忽略).这就是很多书上说的裁剪窗口.

针对不同的投影,可以计算出每个点(x,y,z)在观察平面的投影的位置(Xview, Yview, Zview). 问题就来了,不同的点有可能映射到相同的位置,怎样来区分???我发现前人真的很聪明,他们把这些投影的位置,他们引入了投影转换的概念,使得先前物体的位置的z保持不变,而把(x,y)转换到(Xview,Yview).这样我们就发现,在前面的裁剪空间(人为的选定一个z轴的near和far的区域),这个区域中就保存了很多相同的点(Xview,Yview)只是z坐标不同.然后我们根据远近的原则,就可以确定最终在观察平面上的点是由那个空间点来决定的.一般来说,为了统一化,经过投影转换(也就是把x,y转换成最终的映射到观察平面的点(Xview,Yview)),我们就形成了一个统一的区域(这时就相当于正交投影了).因为这时每个点的x,y坐标和最终映射到观察平面是一致的.这时统一之后,为了更加快捷操作,可以进一步做规范化处理(使得每个坐标轴都在(-1,1)的范围),然后进行区域裁剪,可见面的绘制,光照等着色处理.这样就形成了最后的成像.

在正交投影时,就类似于我们在观察平面上每个点(Xview,Yview)可以找到所对应的物体(根据zBuffer来进行深度测试等).这样就能使得前面的物体可以挡住后面的物体.最终就是通过投影变换,把不同的投影都转换成最终的正交投影,然后感觉z轴的不同进行深度测试,从而可以区分那些物体可以先画,那些物体被遮挡.统一了就好办多了.:)

成像之后,我们在把成像的内容放到屏幕上去显示(这有点类似于照片底片的冲印).我们观察平面的裁剪窗口的大小和屏幕的大小可以一致,也可以有差别.但为了使得最终的

效果基本一致,所以,一般设置成它们具有相同的aspect(横纵比w/h), 从而它们的转换关系就是等比例的放大或者缩小,而不会产生扭曲.

上面这个过程,也就是我们三维显示的过程.那怎样和opengl来关联呢?这就要调用opengl的相关函数了.

网上讲解这些函数的很多,但和我们上面理解的过程如何对应起来的很少,很少.

首先:我们需要把显示的物体转换到观察坐标系

如果物体有自己的建模坐标系,则需要把这个转换到世界坐标系,然后再转换到观察坐标系.既然坐标系的转换,那我们首先要建立观察坐标系.

因此,我们首先要选取观察坐标系的(原点,z轴的,以及y轴的方向),通过z轴和y轴的方向,可以确定x轴的方向.

这个过程,opengl用

gluLookAt(GLdoble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);

函数来制定了,它选取eyex,eyey, eyez 做为原点(观察坐标系的坐标(用世界坐标系来表示的)),然后centerx, centery,centerz 指定了观察方向(z轴的反方向),upx,upy,upz 指定了y轴的正方向的近似方向(它不一定和z轴方向正交,但可以通过相关的运算,找到正交的Y轴的正方向,从而也可以找到x轴的正方向.主要就是通过向量的点乘和叉乘来计算的)).

指定了这些,从而也就建立了从世界坐标系到观察坐标系的转换的矩阵.opengl的把这个转换的矩阵保存在矩阵堆栈中,从而后面就自动的把其他的世界坐标系转换到观察坐标系里面).坐标系的转换,也就是物体的描述转换到观察坐标系里面了.从而后面的投影,就统一在观察坐标系里面来计算.

这就是gluLookAt的函数的作用,它封装了世界坐标系到观察坐标系的转换.它在:glMatrixMode(GL_MODELVIEW);

的模式下调用的.

说简单就是为了建立坐标系的转换,把所有的物体都用观察坐标系来描述.而不是从函数的名称来看,感觉是让我们看某个地方,尽管它有点这方面的含义,但不直观.

OK,我们明白了gluLookAt的作用,调用之后,我们就把坐标系变换的矩阵放入了矩阵栈,后续对物体的位置描述,会通过此矩阵栈进行转换到我们的观察坐标系了.

从这点来说,还是很佩服opengl的设计者的思路,把变换矩阵进入了堆栈来保存,从而在绘制不同的物体时,不需要把它当成额外的参数带入.使得使用起来更加方便/直观.不过初学者,有些时候就感觉找不到北了,总感觉为何我们调用旋转的函数,和物体有点不相关呢?

好,接下来,我们看看投影这块.既然,已经转换到观察坐标系了,我们在观察坐标系的世界里,把物体投影在我们的观察平面的中,然后通过裁剪窗口,截取我们需要的那块就可以了

void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);

关于帧缓存与OpenGL的帧缓存操作glClearColor,glClear,glClearDepth

参考文献地址一:https://www.wendangku.net/doc/2118407839.html,/view/1040793.htm

参考文献地址二:https://www.wendangku.net/doc/2118407839.html,/blog/812899

帧缓存

帧缓冲存储器(Frame Buffer):简称帧缓存或显存,它是屏幕所显示画面的一个直接映象,又称为位映射图(Bit Map)或光栅。帧缓存的每一存储单元对应屏幕上的一个像素,整个帧缓存对应一帧图像。

一个支持OpenGL渲染的窗口(即帧缓存) 可能包含以下的组合:

·至多4个颜色缓存

·一个深度缓存

·一个模板缓存

·一个积累缓存

·一个多重采样缓存

glClearColor :设置颜色缓存的清除值

C语言描述

void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);

参数

red,green,blue,alpha 指定清除颜色缓存时所使用的红、绿、蓝和alpha值。

void glClear(GLbitfield mask)

指定由glClear清除颜色缓存时所使用的红、绿、蓝和alpha值,指定值的范围固定为[0.0f,1.0f]。

glClear :将缓存清除为预先的设置值

C语言描述

void glClear(GLbitfield mask);

参数

mask 对指定的需要清除的缓存进行按位或屏蔽操作,这四个屏蔽值如下:GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT,GL_ACCUM_BUFFER_BIT

和GL_STENCIL_BUFFER_BIT。

说明

本函数只有一个变量,这个变量对所清除的缓存值进行按位或操作,这些值如下:

GL_COLOR_BUFFER_BIT 指定当前被激活为写操作的颜色缓存。

GL_DEPTH_BUFFER_BIT 指定深度缓存。

GL_ACCUM_BUFFER_BIT 指定累加缓存。

GL_STENCIL_BUFFER_BIT 指定模板缓存。

void glClearDepth(GLclampd depth)

glClearDepth:设置深度缓存的清除值

C语言描述

void glClearDepth(GLclampd depth);

参数

depth 指定清除深度缓存时使用的深度值。

说明

本函数指定用glClear清除深度缓存时所使用的深度值,该值的范围在[0,1]之间。

void glClearDepth( GLclampd depth )

参数:

depth定义了清理深度缓存的值,初始值为1。

描述:

glClearDepth函数通过glClear函数对深度缓存进行设置.值的范围为[0,1].

如果您在glBegin与glEnd之间执行了该函数,那么将产生GL_INVALID_OPERATION 错误.

void glShadeModel (GLenum mode)

glShadeModel函数用于控制opengl中绘制指定两点间其他点颜色的过渡模式

参数一般为GL_SMOOTH(默认),GL_FLAT

opengl默认是将制定的两点颜色进行插值,绘制之间的其他点

如果两点的颜色相同,使用两个参数效果相同

如果两点颜色不同,GL_SMOOTH会出现过渡效果,GL_FLAT 则只是以指定的某一点的单一色绘制其他所有点

如图可以对比GL_SMOOTH与GL_FLAT的区别

void glTexCoord2f(GLfloat s, GLfloat t)

有两个参数:GLfloat s, GLfloat t

第一个参数代表X坐标。0.0f 是纹理的左侧。0.5f 是纹理的中点,1.0f 是纹理的右侧。第二个参数代表Y坐标。0.0f 是纹理的底部。0.5f 是纹理的中点,1.0f 是纹理的顶部。一个完全纹理的四个顶点的坐标分别是(0.0f, 0.0f)、(0.0f, 1.0f)、(1.0f, 1.0f)、(1.0f, 0.0f),分别对应左下、左上、右上、右下角。

可以这么认为,纹理一个挨着一个粘在坐标轴上,显示多个、显示那部分完全由四个顶点坐标决定。

比如显示3行2列个位图(共6个),坐标可以这样:(0.0f, 0.0f)、(0.0f, 3.0f)、(2.0f, 3.0f)、(2.0f, 0.0f)。

注意:载入的位图大小必须是M*M,M是2的某次方,如32,64,128等

void glBegin (GLenum mode)

用法小结

1.在glBegin()和glEnd()之间可调用的函数

函数函数意义

glVertex*() 设置顶点坐标

glColor*() 设置当前颜色

glIndex*() 设置当前颜色表

glNormal*() 设置法向坐标

glEvalCoord*() 产生坐标

glCallList(),glCallLists() 执行显示列表

glTexCoord*() 设置纹理坐标

glEdgeFlag*() 控制边界绘制

glMaterial*() 设置材质

glVertex3f()表示了该函数属于gl库,参数是三个float型参数指针。我们用glVertex*()

来表示这一类函数。

基本库

2.几何图元类型和说明

类型说明

GL_POINTS 单个顶点集

GL_LINES 多组双顶点线段

GL_POLYGON 单个简单填充凸多边形

GL_TRAINGLES 多组独立填充三角形

GL_QUADS 多组独立填充四边形

GL_LINE_STRIP 不闭合折线

GL_LINE_LOOP 闭合折线

GL_TRAINGLE_STRIP 线型连续填充三角形串

GL_TRAINGLE_FAN 扇形连续填充三角形串

GL_QUAD_STRIP 连续填充四边形串

在OpenGL最初的定义中,几何对象数据的输入是通过调用glBegin()和glEnd()接口对来实现的。glBegin()的参数表示其下所接收的数据是何种类型,如点,线段,三角型,扇形三角行,多边形等等。

而如

void glTranslatef (GLfloat x, GLfloat y, GLfloat z)

把当前矩阵和一个表示移动物体的矩阵相乘。三个参数分别表示了在三个坐标上的位移值void glScalef (GLfloat x, GLfloat y, GLfloat z)

把当前矩阵和一个表示缩放物体的矩阵相乘。x,y,z分别表示在该方向上的缩放比例。void glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z)

把当前矩阵和一个表示旋转物体的矩阵相乘,物体将绕着(0,0,0)到(x,y,z)的直线以逆时针旋

04 FunCode C 开发常用API

FunCode C开发常用API C语言标准库函数 在实验中,我们需要用到一些C语言标准库函数,主要用于字符串处理,获得随机值,处理数学函数等。 Math.h 函数原型功能与返回值参数说明与应用举例 public static double atan2( double y, double x );返回两点之间的正 切值 x:点的x坐标 y:点的y坐标 float ftan = atan2((fMouseY-fY),(fMouseX-fX)); float sqrt( float x ); 功能:计算平方根 返回值:x的平方根 sqrt(9) = 3 Stdio.h 函数原型功能与返回值参数说明与应用举例 int sprintf( char *buffer, const char *format, [ argument] … ); 把格式化的数据写 入某个字符串缓冲 区。 返回值:字符串长 度(strlen) buffer:char型指针,指向将要写入的 字符串的缓冲区。 format:char型指针,指向的内存里面 存放的将要格式字符串。 [argument]...:可选参数,可以是任何类 型的数据。 sprintf(szUfoName,"ufo_%d_%d", iLoop, iTotalUfoCount ); String.h 函数原型功能与返回值参数说明与应用举例 extern char *strstr( char *str1, char *str2 );找出str2字符串 在str1字符串中 第一次出现的位置 (不包括str2的 串结束符)。 返回值:返回该位 置的指针,如找不 到,返回空指针。 strstr(szName, “feichong”) != NULL 说明szName中包含feichong 可以用来判断前一个字符串包含后面 一个字符串 extern int strcmp( const char *s1, const char * s2 );比较字符串s1和 s2。 当s1

OPenGL的基本程序结构

O p enGL的基本程序结构 常用的程序设计语言,如C、C++、Pascal、Fortran和Java等,都支持OpenGL的开发。这里只讨论C版本下OpenGL的语法。 程序的基本结构 OpenGL程序的基本结构可分为三个部分: 第一部分是初始化部分。主要是设置一些OpenGL的状态开关,如颜色模式(RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。这些状态一般都用函数glEnable(???), glDisable(???)来设置,???表示特定的状态。 第二部分设置观察坐标系下的取景模式和取景框位置大小。主要利用了三个函数: 函数void glViewport(left,top,right,bottom):设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示); 函数void glOrtho(left,right,bottom,top,near,far):设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体; 函数void gluPerspective(fovy,aspect,zNear,zFar):设置投影方式为透视投影,其取景体积是一个截头锥体。

第三部分是OpenGL的主要部分,使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系、几何变换、光照处理等等。 以上三个部分是OpenGL程序的基本框架,即使移植到使用MFC的Windows程序中,也是如此。只是由于Windows自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。 OpenGL基本函数均使用gl作为函数名的前缀,如glClearColor();实用函数则使用glu作为函数名的前缀,如gluSphere()。 OpenGL基本常量的名字以GL_开头,如GL_LINE_LOOP;实用常量的名字以GLU_开头,如GLU_FILL。一些函数如glColor* ()(定义颜色值),函数名后可以接不同的后缀以支持不同的数据类型和格式。如glColor3b(...)、glColor3d(...)、 glColor3f(...)和 glColor3bv(...)等,这几个函数在功能上是相似的,只是适用于不同的数据类型和格式,其中3表示该函数带有三个参数,b、d、f分别表示参数的类型是字节型、双精度浮点型和单精度浮点型,v则表示这些参数是以向量形式出现的。 OpenGL定义了一些特殊标识符,如GLfloat,GLvoid。它们其实就是C中的 float和void。在gl.h文件中可以看到以下定义: …… typedef float GLfloat; typedef void GLvoid; ……

常用MFC和API函数

常用MFC和API函数 索引 CArchive类:用于二进制保存档案 CBitmap类:封装Windows的图形设备接口(GDI)位图 CBrush类:封装图形设备接口(GDI)中的画刷 CButton类:提供Windows按钮控件的功能 CByteArray类:该类支持动态的字节数组 CCmdUI类:该类仅用于ON_UPDATE_COMMAND_UI处理函数中 CColorDialog类:封装标准颜色对话框 CDC类:定义设备环境对象类 CDialog类:所有对话框(模态或非模态)的基类 CDocument类:提供用户定义的文档类的基本功能 CEdit类:是一个用于编辑控件的类 CFile类:该类是基本文件类的基类 CFileDialog类:封装了打开和保存文件的标准对话框 CFindReplaceDialog类:封装了标准查找/替换对话框 CFont类:封装了Windows图形设备接口(GDI)中的字体对象 CFontDialog类:封装了字体选择对话框 CGdiObject类:GDI绘图工具的基类 CIPAddressCtrl类:提供了IP地址控件的功能 CImageList类:管理大小相同的图标或位图集 CMenu类:封装应用程序菜单栏和弹出式菜单 CPen类:封装了Windows图形设备接口(GDI)中的画笔对象 CPoint类:操作CPoint和POINT结构 CRect类:封装了一个矩形区域及相关操作 CRgn类:封装用于操作窗口中的椭圆、多边形或者不规则区域的GDI区域 CSize类:用于表示相对坐标或位置 CSpinButtonCtrl类:旋转控件Spin的控制类 CStatusBar类:状态栏窗口的基类 CString类:处理字符串 CStringList类:支持CString对象的列表 CWinApp类:派生的程序对象的基类 CWnd类:提供所有窗口类的基本函数 API函数 CArchive类:用于二进制保存档案 CArchive::CArchive 建立一个CArchive对象 CArchive(CFile* pFile,UINT nMode,int nBufSize=4096,void* lpBuf=NULL); 参数:pFile 指向CFile对象的指针,这个CFile对象是数据的最终源或目的;nMode是标志,取值为CArchive::load时,从文档中加载数据(要求CFile读许可),取值为CArchive::store时,将数据存入文档(要求CFile写许可);nBufSize 指定内部文件缓冲区的大小(按字节计); lpBuf 指向大小为nBufSize的缓冲区,若未指定,则从局部堆中分配一缓冲区,

常用API函数参数

常用API函数参数5 ImmIsIME 函数功能: 判断指定的句柄是否为IME; 函数原型: BOOL ImmIsIME( HKL hKL ); 参数hKL: 待检查的键盘布局句柄; 返回值: 函数调用成功返回1,失败返回0. 速查信息: Windows NT: 要求4.0或更高版本 Windows: 要求Windows 95 或更高. Windows CE:不支持. Header: 声明在imm.h. Import Library: imm32.lib. Windows XP没有自带五笔型输入法,这对五笔型用户而言无疑是个大大的遗憾。网上的五笔型输入法虽然种类很多,也不乏优秀的版本,但一方面有些版本是共享软件需要注册,另一方面也许很多五笔型输入法的老用户最习惯用的还是老牌的“王码五笔型输入法86/98版”。 微软的Office XP软件中包含了这个老牌的五笔型输入法,但如果用户并不使用Office XP中的任何组件,仅仅是为了使用“王码五笔型输入法”而运行Office XP安装程序,就显的有些小题大做了,更不用说是某些零时在外面用公用电脑而又想用五笔型输入法的情况。于是网上出现了很多简化的安装方法,大体上可以分为三个步骤: 拷贝输入法文件(从Of还是9x/ME。示例代码fice XP光盘中或已经安装了“王码五笔型输入法”的电脑中提取) 增加注册表项 重启后通过控制面板添加输入法

整个过程中拷贝输入法文件和增加注册表项可以用批处理和导入注册表文件来简化操作,但必须重启计算机才能在控制面板里添加输入法,这同样让使用者觉得比较烦琐。那么作为一个编程爱好者能不能通过写个小程序来实现在不重新启动计算机的情况下全自动的安装“王码五笔型输入法”呢(也就是即装即用)?答案是肯定的!因为微软的Office XP 安装程序做到了,这就表示微软肯定留有一个专门用来安装输入法的接口,一般来说应该是一系列API函数。 经过一番摸索,笔者在MSDN里找到了这个可以用来安装输入法的API:ImmInstallIME()。Ok,现在我们就开始利用这个API来实现自己的“王码五笔型输入法”全自动安装程序。 一、准备素材 我们先试着从Office XP光盘中提取“王码五笔型输入法”的输入法文件。通过Windows 的查找功能在Office XP的第一张安装盘中查找与“WINWB”相关的文件,在OFFICE1.CAB 中找到了一下14个文件:WINWB86.CHM.*、https://www.wendangku.net/doc/2118407839.html,T.*、WINWB86.HLP.*、WINWB86A.IME.*、WINWB86A.MB.*、WINWB86W.IME.*、WINWB86W.MB.*、WINWB98.CHM.*、https://www.wendangku.net/doc/2118407839.html,T.*、WINWB98.HLP.*、WINWB98A.IME.*、WINWB98A.MB.*、WINWB98W.IME.*、WINWB98W.MB.*,其中*是很长的一串由字母、数字和下滑线组成的序列(个人认为应该是微软为了校验文件内容的正确性而加上的内容为该文件效验码的后缀吧)。去掉这个长长的后缀,可以看到5 种类型的文件。很明显,*.CHM、*.CNT和*.HLP是五笔型输入法的帮助文件,*.MB是码表文件,而*.IME是主要的输入法文件。其中*.IME和*.MB有文件名部分以A结尾和以W结尾两个版本,经过笔者试验证实了它们分别是ANSI和UNICODE两种版本的输入法文件。文件名部分以A结尾的文件适用于Windows 9x,以W结尾的文件适用于NT系列Windows系统。 提取了输入法文件后必须让安装程序针对不同版本的操作系统将它们拷贝到正确的目录,以便调用API来进行输入法安装。笔者分别在安装了Office XP中自带的“王码五笔型输入法”的Windows 98SE和Windows XP操作系统中查找以上文件,发现帮助文件都存放在WINDOWSHELP目录中(这里假设Windows系统都安装在WINDOWS目录)。而主要的输入法文件(*.IME)和码表文件(*.MB)在Windows 9x下存放于WINDOWSSYSTEM目录中,在NT系列Windows系统中存放于WINDOWSSYSTEM32目录中。 二、相关API函数 素材的准备工作已经完成,现在我们来看一下代码编写过程中需要用到的4个主要的API函数。 2.1 GetVersion 函数原型:

OpenGL的库函数介绍

OpenGL的库函数介绍 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。 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核心库(GL) 核心库包含有115个函数,函数名的前缀为gl。这部分函数用于常规的、核心的图形处理。由于许多函数可以接收不同数据类型的参数,因此派生出来的函数原形多达300多个。核心库在Windows平台上的头文件为“GL.H”,库文件为“OPENGL32.LIB”,动态链接库为“OPENGL32.DLL”。核心库可以在所有的OpenGL平台上运行。 核心库中的函数主要分为以下几类: ●基本几何图元的绘制函数: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*();

API函数手册

POSTEK PPLⅠAPI函数手册 G Series 条码标签打印机 Version 2.00 深圳市博思得通信发展有限公司 二○○四年

API函数库文件说明 名称:CDFPSK.dll 中文版本编号:1.X.X.X 英文版本编号:2.X.X.X 版权所有:?2004深圳市博思得通信发展有限公司。保留所有权利。 用途 本API函数库为深圳市博思得通信发展有限公司条码标签打印机的用户提供一组命令,为他们编写基于Windows9X,NT,2000,XP等操作系统的应用程序提供便利。 本API函数库仅支持本公司产品。 缩略语对照 PPLⅠ:深圳市博思得通信发展有限公司的第一套打印机编程语言(Printer Porgram Language Ⅰ)。 API:应用程序编程接口(Application Program Interface)。 Dots:像素(pixel)是一种计算机科学技术尺寸单位,原指电视图像成像的最小单位,在打印机领域表示打印机的最小打印成像单位:1dot等于一英寸除以打印机的最大分辨率。 - 对于203DPI的打印机来说, 1dot = 25.4mm/203 = 0.125mm(1dot = 1000 / 203 = 5mil); - 对于300DPI的打印机来说, 1dot = 25.4mm/300 = 0.085mm(1dot = 1000 / 300 = 3mil)。 TrueType Font:是基于Windows操作系统使用,可装卸的字体。 - 已经安装的TrueType Font,都可以被本函数使用。 使用前须知 字符串 * 字符串以双引号(“)作为起始和结束标记; *

OpenGL 函数 gluLookAt

OpenGL 函数gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用 1.gluLookAt()——视图变换函数 把自己的眼睛当成是照相机,前三个参数表示眼睛的坐标,中间三个参数表示要拍照的物体的中心位置,可以理解成焦点吧, 后三个参数表示头顶的朝向,比如说头可以歪着(哈哈)。但是我测试过,如果歪的不对,原来的正前方现在已经不是正前方 了,那么就看不见物体了。举个例子: gluLookAt (0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//这个就表示头顶是朝着y方向 gluLookAt (0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0);//这个表示头歪了45度,头顶朝着(1.0,1.0,0.0)这个方向 2.glScalef() ——模型变换函数缩放 void glScalef(GLfloat x, GLfloat y, GLfloat z); 模型变换的目的是设置模型的位置和方向,例如可以对模型进行旋转、移动和缩放,或者联合这几种操作。 这个函数表示模型在各轴上是如果进行缩放的。举个例子: glScalef (1.0, 2.0, 1.0);//表示y坐标值扩大两倍,这样原本方的物体就变成长的了。 3.glTranslatef() ——模型变换函数移动 void glTranslatef(GLfloat x, GLfloat y, GLfloat z); 这个函数表示模型是怎样移动的。举个例子: glTranslatef(-1.0,0.0,-2.0);//表示物体沿x负方向移动1.0,沿z轴负方向移动2.0。所以就好像能看见侧面一样

API函数大全

? 1. API之网络函数 ? ?WNetAddConnection 创建同一个网络资源的永久性连接 ? ?WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接 WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称 WNetGetLastError 获取网络错误的扩展错误信息 WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC (统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 ? ? 2. API之消息函数 ?BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定窗口的消息队列 PostThreadMessage 将一条消息投递给应用程序 RegisterWindowMessage 获取分配给一个字串标识符的消息编号 ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口 SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 ? 3. API之文件处理函数 ?CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件 DeviceIoControl 对设备执行指定的操作

api接口文档

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。API除了有应用“应用程序接口”的意思外,还特指API的说明文档,也称为帮助文档。 API:应用程序接口(API:Application Program Interface) 应用程序接口(是一组定义、程序及协议的集合,通过API 接口实现计算机软件之间的相互通信。API 的一个主要功能是提供通用功能集。程序员通过调用API 函数对应用程序进行开发,可以减轻编程任务。API 同时也是一种中间件,为各种不同平台提供数据共享。 根据单个或分布式平台上不同软件应用程序间的数据共享性能,可以将API 分为四种类型: 远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。 标准查询语言(SQL):是标准的访问数据的查询语言,通过数据库实现应用程序间的数据共享。 文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。

信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。 当前应用于API 的标准包括ANSI 标准SQL API。另外还有一些应用于其它类型的标准尚在制定之中。API 可以应用于所有计算机平台和操作系统。这些API 以不同的格式连接数据(如共享数据缓存器、数据库结构、文件框架)。每种数据格式要求以不同的数据命令和参数实现正确的数据通信,但同时也会产生不同类型的错误。因此,除了具备执行数据共享任务所需的知识以外,这些类型的API 还必须解决很多网络参数问题和可能的差错条件,即每个应用程序都必须清楚自身是否有强大的性能支持程序间通信。相反由于这种API 只处理一种信息格式,所以该情形下的信息交付API 只提供较小的命令、网络参数以及差错条件子集。正因为如此,交付API 方式大大降低了系统复杂性,所以当应用程序需要通过多个平台实现数据共享时,采用信息交付API 类型是比较理想的选择。 API 与图形用户接口(GUI)或命令接口有着鲜明的差别:API 接口属于一种操作系统或程序接口,而后两者都属于直接用户接口。 有时公司会将API 作为其公共开放系统。也就是说,公司制定自己的系统接口标准,当需要执行系统整合、自定义和程序应用等操作时,公司所有成员都可以通过该接口标准调用源代码,该接口标准被称之为开放式API。

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()等。

常用API

转:OpenGL API 简介 开发基于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()。 2.OpenGL实用库The OpenGL Utility Library (GLU) 包含有43个函数,函数名的前缀为glu。OpenGL提供了强大的但是为数不多的绘图命令,所有较复杂的绘图都必须从点、线、面开始。Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现

OpenGL库函数一览表

OpenGL库函数列表 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的特殊功能

API函数大全

waveInAddBuffer 向波形输入设备添加一个输入缓冲区 WaveInClose 关闭指定的波形输入设置 waveInGetDevCaps 查询指定的波形输入设备以确定其性能 waveInGetErrorText 检取由指定的错误代码标识的文本说明 waveInGetID 获取指定的波形输入设备的标识符 waveInGetNumDevs 返回系统中存在的波形输入设备的数量 waveInGetPosition 检取指定波形输入设备的当前位置 waveInMessage 发送一条消息给波形输入设备的驱动器 waveInOpen 为录音而打开一个波形输入设备 waveInPrepareHeader 为波形输入准备一个输入缓冲区 waveInReset 停止给定的波形输入设备的输入,且将当前位置清零 waveInStart 启动在指定的波形输入设备的输入 waveInStop 停止在指定的波形输入设备上的输入 waveInUnprepareHeader 清除由waveInPrepareHeader函数实现的准备 waveOutBreakLoop 中断给定的波形输出设备上一个循环,并允许播放驱动器列表中的下一个块waveOutClose 关闭指定的波形输出设备 waveOutGetDevCaps 查询一个指定的波形输出设备以确定其性能 waveOutGetErrorText 检取由指定的错误代码标识的文本说明 waveOutGetID 检取指定的波形输出设备的标识符 waveOutGetNumDevs 检取系统中存在的波形输出设备的数量 waveOutGetPitch 查询一个波形输出设备的当前音调设置 waveOutGetPlaybackRate 查询一个波形输出设备当前播放的速度 waveOutGetPosition 检取指定波形输出设备的当前播放位置 waveOutGetV olume 查询指定波形输出设备的当前音量设置 waveOutMessage 发送一条消息给一个波形输出设备的驱动器 waveOutOpen 为播放打开一个波形输出设备 waveOutPause 暂停指定波形输出设备上的播放 waveOutPrepareHeader 为播放准备一个波形缓冲区 waveOutRestart 重新启动一个被暂停的波形输出设备 waveOutSetPitch 设置一个波形输出设备的音调 waveOutSetPlaybackRate 设置指定波形输出设备的速度 waveOutSetV olume 设置指定的波形输出设备的音量 waveOutUnprepareHeader 清除由waveOutPrepareHeader函数实现的准备 waveOutWrite 向指定的波形输出设备发送一个数据块

OpenGL函数原型

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 从帧缓冲区拷贝一个单空间纹理的子图象

API函数参考手册

《API函数参考手册》 收集:小红帽 https://www.wendangku.net/doc/2118407839.html, Copyright by vortex 1999.1 ================================================================================= ============== Api函数名函数说明WIN16可用WIN95可用WINNT可用 --------------------------------------------------------------------------------------------------------------- AbortDoc 终止一项打印作业是是是 AbortPath 终止或取消DC中的一切路径否是是 AbortPrinter 删除打印机缓冲文件否是是 AbortSystemShutdowna 停止系统工作否是是 AccessCheck 检验客户访问权限否是是 AccessCheckAndAuditAlarm 检验访问,产生声音或警报否是是 ActivateKeyboardLayout 激活一个新的键盘设备否是是 AddAccessAllowedAce 将ACCESS_ALLOWED_ACE加入ACL 否是是 AddAccessDeniedAce 将ACCESS_DENIED_ACE加入ACL 否是是 AddAce 将ACE加入一个已存在的ACL 否是是 AddAtom 将一个字符串加入本地原子表是是是 AddAuditAccessAce 将SYSTEM_AUDIT_ACE加入ACL 否是是 AddFontResource 将一种字体加入字体表是是是 AddForm 加入一个打印机窗体否是是 AddJob 启动一个打印作业否是是 AddMonitor 加入一个打印机管理器否是是 AddPort 加入一个打印机端口否是是 AddPrintProcessor 将打印处理器复制到打印机服务器中否是是 AddPrintProvidor 加入一个打印机支持器否是是 AddPrinter 在打印机服务器上建立一个打印机否是是 AddPrinterConnection 为当前用户建立与打印机的联系否是是 AddPrinterDriver 将打印机驱动程序复制到打印机服务器中否是是 AdjustTokenGroups 使能/取消令牌中的群否是是 AdjustTokenPrivileges 使能/取消令牌特权否是是 AdjustWindowRect 计算所需窗口矩形的大小是是是 AdjustWindowRectEx 计算所需窗口矩形的大小是是是 AdvancedDocumentProperties 进行打印机高级设置否是是 AllocConsole 为当前进程建立控制台否是是 AllocateAndInitializeSid 分配和初始化SID 否是是 AllocateLocallyUniqueId 分配LUID 否是是 AngleArc 按指定角度画弧否是是 AnimatePalette 替换逻辑调色板中的项目是是是 AnyPopup 标识弹出式窗口是否存在是是是 AppendMenu 在菜单中加入新的项目是是是

相关文档