`

OpenGL 图形编程 学习笔记 三

 
阅读更多


[2012-12-31 16:53] openGL笔记 - 杨溪 - 博客园 - Google Chrome

所有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。这部分函数用于常规的、核心的图形处理。

绘制基本几何图元的函数
如绘制图元的函数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()、gluTessCallback()、gluBeginPolygon() gluTessVertex()、gluNextContour()、gluEndPolygon()等等。
二次曲面绘制工具
主要有绘制球面、锥面、柱面、圆环面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric()等等。
非均匀有理B样条绘制工具
主要用来定义和绘制Nurbs曲线和曲面,包括gluNewNurbsRenderer()、gluNurbsCurve()、 gluBeginSurface()、gluEndSurface()、gluBeginCurve()、gluNurbsProperty()等函数。
错误反馈工具
获取出错信息的字符串gluErrorString().
3  OpenGL辅助库
包含有31个函数,函数名前缀为aux。这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。此函数由glaux.dll来负责解释执 行。创建aux库是为了学习和编写OpenGL程序,它更像是一个用于测试创意的预备基础接管。Aux库在windows实现有很多错误,因此很容易导致 频繁的崩溃。在跨平台的编程实例和演示中,aux很大程度上已经被glut库取代。 OpenGL中的辅助库不能在所有的OpenGL平台上运行。

窗口初始化和退出函数
auxInitDisplayMode()和auxInitPosition()。
窗口处理和时间输入函数
auxReshapeFunc()、auxKeyFunc()和auxMouseFunc()。
颜色索引装入函数
auxSetOneColor()。
三维物体绘制函数
包括了两种形式网状体和实心体,如绘制立方体auxWireCube()和 auxSolidCube()。这里以网状体为例,长方体auxWireBox()、环形圆纹面auxWireTorus()、圆柱 auxWireCylinder()、二十面体auxWireIcosahedron()、八面体auxWireOctahedron()、四面体 auxWireTetrahedron()、十二面体auxWireDodecahedron()、圆锥体auxWireCone()和茶壶 auxWireTeapot()。
背景过程管理函数
auxIdleFunc()。
程序运行函数
auxMainLoop()。
4  OpenGL工具库 OpenGL Utility Toolkit
包含大约30多个函数,函数名前缀为glut。glut是不依赖于窗口平台的 OpenGL工具包,由Mark KLilgrad在SGI编写(现在在Nvidia),目的是隐藏不同窗口平台API的复杂度。函数以glut开头,它们作为aux库功能更强的替代品, 提供更为复杂的绘制功能,此函数由glut.dll来负责解释执行。由于glut中的窗口管理函数是不依赖于运行环境的,因此OpenGL中的工具库可以 在X-Window, Windows NT, OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。对于有经验的程序员来说,一般先用glut理顺3D图形代码,然后再集成为 完整的应用程序。

窗口操作函数
窗口初始化、窗口大小、窗口位置等函数glutInit() glutInitDisplayMode() glutInitWindowSize() glutInitWindowPosition()等。
回调函数
响应刷新消息、键盘消息、鼠标消息、定时器函数等,GlutDisplayFunc() glutPostRedisplay() glutReshapeFunc() glutTimerFunc() glutKeyboardFunc() glutMouseFunc()。
创建复杂的三维物体
这些和aux库的函数功能相同。创建网状体和实心体。如glutSolidSphere()、glutWireSphere()等。在此不再叙述。
菜单函数
创建添加菜单的函数GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu() 和glutAttachMenu()。
程序运行函数
glutMainLoop()。
5  X窗口专用库
是针对Unix和Linux的扩展函数。包括渲染上下文、绘制图元、显示列表、纹理贴图、等等

初始化
glXQueryExtension()
渲染上下文函数
glXCreateContext() glXDestroyContext() glXCopyContext() glXMakeCurrent() glXCreateGLXPixmap()
执行
glXWaitGL()、glXWaitX()
缓冲区和字体
glXSwapBuffers()、glXUseXFont()
(http://www.cnblogs.com/yangxi/archive/2011/11/16/2251208.html)

 

[2012-12-31 16:57] OpenGL编程基础之一 - 杨溪 - 博客园 - Google Chrome

OpenGL的组成

OpenGL包含200多个函数。依据功能对这些函数进行分类无疑是有意义的。

(1) 图元函数(primitive function)指定要生成屏幕图像的图元。

(2) 属性函数(attribute function)负责控制图元的外观。

(3) 观察函数(viewing function)制定摄像机的属性。

(4) 控制函数(control function)允许我们启用或禁用各种OpenGL特性。

(5) 查询函数(query function)允许我们决定某一特定系统的性能以及OpenGL状态变量的取值。

(6) 输入与窗口函数不属于OpenGL核心库,但是由于它们在交互式程序中的重要地位,这类函数已被包含在GLUT库中。这些函数使我们能够对屏幕中的窗口进行控制并使用鼠标和键盘。
(http://www.cnblogs.com/yangxi/archive/2011/11/20/2256390.html)

 

[2012-12-31 16:57] OpenGL编程基础之一 - 杨溪 - 博客园 - Google Chrome

OpenGL绘制流水线

OpenGL的基础是一个所谓的流水线模型(pipeline model)。

顶点→几何处理器(geometry processor)→光栅化器(rasterizer)→片段处理器(fragment processor)→帧缓存(frame buffer)→显示
(http://www.cnblogs.com/yangxi/archive/2011/11/20/2256390.html)

 

[2012-12-31 16:58] OpenGL编程基础之二 - 杨溪 - 博客园 - Google Chrome

状态的保存

OpenGL状态决定了图元的绘制方式。矩阵堆栈(matrix stack)可用来保存投影矩阵和模型矩阵。每种堆栈只能容纳相应类型的矩阵。可用函数glPushMatrix()和glPopMatrix()使矩阵入栈或出栈。所使用的矩阵由当前矩阵模式glMatrixMode(GL_MODELVIEW或GL_PROJECTON)决定。注意,入栈和出栈操作必须成对使用;一次出栈必须与一次入栈对应。

OpenGL依据相关性将其属性划分为20组。我们可将多组属性或全部属性(GL_ALL_ATTRIBUTE_BITS)通过函数glPushAttrib()压入属性堆栈中,恢复这些状态则使用函数glPopAttrib()。
(http://www.cnblogs.com/yangxi/archive/2011/11/20/2256391.html)

 

[2012-12-31 17:36] OpenGL函数思考-glRotatef - v5qqcom - ITeye技术网站 - Google Chrome

OpenGL函数思考-glRotatef
函数原型:
void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLdouble z)
函数说明:
这两个函数用来计算旋转矩阵,该矩阵围绕原点到点(x,y,z)的向量逆时针旋转angle度
(http://v5qqcom.iteye.com/blog/1399843)

 

[2012-12-31 17:36] OpenGL函数思考-glColor - v5qqcom - ITeye技术网站 - Google Chrome

OpenGL函数思考-glColor
函数原型:
glColor3b,glColor3d,glColor3f,glColor3i,glColor3s,glColor3ub,glColor3ui,glColor3us,glColor4b,glColor4d,glColor4f,glColor4i,glColor4s,glColor4ub,glColor4ui,glColor4us,glColor3bv,glColor3dv,glColor3fv,glColor3iv,glColor3sv,glColor3ubv,glColor3uiv,glColor3usv,glColor4bv,glColor4dv,glColor4fv,glColor4iv,glColor4sv,glColor4ubv,glColor4uiv,glColor4usv
例子:void glColor3f(GLfloatred,GLfloatgreen,GLfloat blue)
函数说明:
设置当前颜色。如下例子
例1:绘制一个平滑过度填充色的三角形和一个平面着色的四边形

glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // 根据glClearColor和glClearDepth指定的值清除颜色和深度缓存
(http://v5qqcom.iteye.com/blog/1399844)

 

[2012-12-31 17:36] OpenGL函数思考-glFlush和glutSwapBuffers - v5qqcom - ITeye技术网站 - Google Chrome

OpenGL函数思考-glFlush和glutSwapBuffers
函数原型:
void glFlush(void void)
void glutSwapBuffers(void)
函数说明:
glFlush 是强制马上输出命令执行的结果,而不是存储在缓冲区中,继续等待其他OpenGL命令。
当执行双缓冲交换的时候,使用glutSwapBuffers。
但是在有 glutSwapBuffers 的情况下, 不需要 glFlush 就可以达到同样的效果,因为我们执行双缓冲交换的时候,就隐形的执行了一次刷新操作。
(http://v5qqcom.iteye.com/blog/1399845)

 

[2012-12-31 17:37] OpenGL函数思考-glVertex - v5qqcom - ITeye技术网站 - Google Chrome

OpenGL函数思考-glVertex
函数原型:
glVertex4i, glVertex4s, glVertex2dv, glVertex2fv, glVertex2iv, glVertex2sv, glVertex3dv, glVertex3fv, glVertex3iv, glVertex3sv, glVertex4dv, glVertex4fv, glVertex4iv, glVertex4sv
例子:
glVertex3f(GLfloat x, GLfloat y, GLfloat z)
函数说明:
glVertex函数用在glBegin和glEnd之间,除此以外没有意义。用来指定点、线和多边形的顶点。当调用glVertex时,可以为该顶点指定颜色、法线量和纹理坐标。当只指定x,y时,z缺省为0.0,w缺省为1.0;当只指定x、y和z时,w缺省为1.0。
(http://v5qqcom.iteye.com/blog/1399846)

 

[2012-12-31 17:37] OpenGL函数思考-glBegin和glEnd - v5qqcom - ITeye技术网站 - Google Chrome

OpenGL函数思考-glBegin和glEnd
函数原型:
void glBegin(GLenum mode)
void glEnd(void)
参数说明:
mode:创建图元的类型。可以是以下数值
GL_POINTS:把每一个顶点作为一个点进行处理,顶点n即定义了点n,共绘制N个点
GL_LINES:把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n条线段,总共绘制N/2条线段
GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,总共绘制n-1条线段
GL_LINE_LOOP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,总共绘制n条线段
GL_TRIANGLES:把每个顶点作为一个独立的三角形,顶点3n-2、3n-1和3n定义了第n个三角形,总共绘制N/3个三角形
GL_TRIANGLE_STRIP:绘制一组相连的三角形,对于奇数n,顶点n、n+1和n+2定义了第n个三角形;对于偶数n,顶点n+1、n和n+2定义了第n个三角形,总共绘制N-2个三角形
GL_TRIANGLE_FAN:绘制一组相连的三角形,三角形是由第一个顶点及其后给定的顶点确定,顶点1、n+1和n+2定义了第n个三角形,总共绘制N-2个三角形
GL_QUADS:绘制由四个顶点组成的一组单独的四边形。顶点4n-3、4n-2、4n-1和4n定义了第n个四边形。总共绘制N/4个四边形
GL_QUAD_STRIP:绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-1、2n、2n+2和2n+1定义了第n个四边形,总共绘制N/2-1个四边形
GL_POLYGON:绘制一个凸多边形。顶点1到n定义了这个多边形。
函数说明:
glBegin和glEnd函数限定了一组或多组图元的定点定义。
(http://v5qqcom.iteye.com/blog/1399847)

分享到:
评论

相关推荐

    opengl es 2.0 学习笔记

    ### OpenGL ES 2.0 学习笔记 #### 一、概述 《OpenGL ES 2.0 学习笔记》是一份针对英文版《OpenGL ES 2.0 Programming Guide》的阅读总结,旨在帮助读者更好地理解和掌握OpenGL ES 2.0的核心概念和技术要点。以下...

    NeHe OpenGL教程 学习笔记1

    OpenGL是计算机图形学中的一种广泛应用的编程接口,用于在各种操作系统和硬件上生成二维和三维图像。NeHe教程是OpenGL初学者的经典学习资源,由Jeffrey Ventrella创建,提供了丰富的实例代码和解释,帮助开发者逐步...

    Java OpenGL(JOGL)学习笔记,含代码

    Java OpenGL(JOGL)学习笔记 在学习 JOGL 时,我们需要了解图形显示器是如何工作的。图形显示器是一个由许多像素点组成的绘图区域,图形系统的核心是一个魔法画笔,这支画笔能以非常快的速度移动到一个确定的像素...

    OpenGL 学习笔记整理

    GLSL(OpenGL Shading Language)是为图形编程设计的专用语言,用于编写这些着色器。着色器的渲染流程包括从顶点数据开始,通过一系列处理,最终由片段着色器生成屏幕上的像素。在这个过程中,属性和uniform变量被...

    code_opengl学习笔记3-1-在3D中绘制点

    在本节“code_opengl学习笔记3-1-在3D中绘制点”中,我们将深入探讨如何使用OpenGL来在三维空间中绘制点,这是构建更复杂图形的基础。 在OpenGL中,点是最基本的图元之一,它不具有长度、宽度或深度,但当在屏幕上...

    android OpenGL学习笔记(一)

    在本篇“Android OpenGL 学习笔记(一)”中,我们将探讨如何在Android平台上使用OpenGL ES进行图形渲染。OpenGL ES是OpenGL的一个轻量级版本,专为嵌入式系统设计,包括移动设备如智能手机和平板电脑。这篇笔记将...

    OpenGL_Qt学习笔记之_01(创建一个OpenGL窗口) - tornadomeet - 博客园

    OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。它使用一种特殊的状态机架构,每条命令都会改变渲染管道的状态。OpenGL的核心优势在于: - **跨平台性**...

    opengl学习笔记

    "OpenGL图形管线和坐标变换"这一部分将讲解如何使用矩阵来完成物体在三维空间中的移动、旋转和缩放。这涉及到基本的线性代数知识,如向量和矩阵运算,以及如何使用glMultMatrix、glRotate、glTranslate等函数来实现...

    code__opengl学习笔记2-绘制矩形

    本学习笔记主要关注如何使用OpenGL绘制矩形,这是一个基础但至关重要的概念,因为几乎所有的图形绘制都可以通过组合基本形状如矩形来实现。 在OpenGL中,没有内置的“绘制矩形”函数。相反,我们通常使用四条直线...

    games101计算机图形学 学习笔记分享

    在"games101计算机图形学学习笔记分享"中,我们可以期待了解到一系列关于这个主题的基础概念、理论和技术。 首先,笔记可能会从基础的图形学原理开始讲解,包括二维和三维坐标系的概念,以及如何在笛卡尔坐标系中...

    Opengl学习笔记

    ### OpenGL学习笔记关键知识点 #### 一、OpenGL坐标系与绘图函数 ...通过以上知识点的学习,我们可以更好地理解OpenGL的基本概念和操作方法,这对于深入学习和应用OpenGL进行三维图形编程至关重要。

    OpenGL超级宝典 笔记15之前 清单3.12之前所有有关代码.rar

    OpenGL超级宝典是一本深入学习图形编程的权威书籍,涵盖了从基础到高级的大量OpenGL编程技术。这份笔记包含了第15章之前的全部代码示例,这些示例是基于C++语言实现的,主要关注OpenGL的核心功能和编程模式。在...

    code__opengl学习笔记1-基本的运行框架

    OpenGL学习笔记1 - 基本的运行框架 在计算机图形学领域,OpenGL是一个广泛使用的跨语言、跨平台的应用程序编程接口(API),用于渲染2D、3D图像。本笔记将聚焦于如何在Visual Studio 2012环境下搭建一个基本的...

    C#版的OpenGL

    5. **着色器编程**:编写GLSL(OpenGL Shading Language)着色器,实现复杂的图形效果。 6. **资源管理**:加载和管理纹理、模型、着色器等资源。 总的来说,C#版的OpenGL为C#开发者提供了一个与原生OpenGL接口兼容...

    Android OpenGL ES 2.0学习书籍.rar

    总之,“Android 3D游戏开发技术宝典 OpenGL ES2.0学习”这本书将引导读者全面掌握OpenGL ES 2.0在Android平台上的应用,从基础概念到高级技巧,涵盖3D图形编程的各个方面,对于想要进入移动游戏开发领域的开发者来...

    OpenGL学习笔记

    ### OpenGL学习笔记知识点详解 #### 一、OpenGL简介与安装准备 OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。它被广泛应用于游戏开发、图形软件以及...

    orge学习笔记

    "orge学习笔记"是关于orge 3D引擎的个人学习...总之,"orge学习笔记"为我们提供了一个深入学习和掌握orge 3D引擎的机会,通过这份资料,无论是新手还是有经验的开发者,都能提升自己在3D图形编程和游戏开发领域的技能。

    OpenGL初学笔记

    在"OpenGL学习笔记.doc"中,可能包含以下内容: 1. **基本概念**:介绍OpenGL的架构、管线模型以及主要的数据类型和函数。 2. **环境设置**:详述如何在Visual C++ 6.0中创建OpenGL项目,设置链接器选项,以及如何...

    Xcode高级图形编程实例6

    在Xcode高级图形编程中,我们探讨的是如何利用iOS平台强大的图形处理能力来构建更为复杂且视觉效果丰富的应用程序。这个实例“Xcode高级图形编程实例6”是《企业级iOS应用开发实践》一书第六章的配套源码,旨在帮助...

Global site tag (gtag.js) - Google Analytics