openGL学习笔记(1)——几个函数

(一)gl,glu,glut的区别

OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库,
gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台工具库,gl中包含了最基本的3D函数,而glu似乎对gl的辅助,如果算数好,不用glu的情况下,也是可以做出同样的效果。
glut是基本的窗口界面,是独立于gl和glu的,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这就保证了我们编出的程序是跨平台的,如果用MFC或者Win32只能在windows操作系统上使用。选择OpenGL的一个很大原因就是因为它的跨平台性,所以我们可以尽量的使用glut库。
opengl 实用库 : 43个函数,以glu开头,包括纹理映射、座标变换、多边形分化、绘制一些如椭球、圆柱、茶壶等简单多边形实体 部分函数象核心函数一样在任何OpenGL平台都可以应用。
opengl辅助库: 31个函数,以aux 开头,
OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。从图1可以看出,gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。

转载自:http://dxwang.blog.51cto.com/384651/698750

(二)一些函数的详细用法

glBegin()

1.在glBegin()和glEnd()之间可调用的函数
函数 函数意义
glVertex*() 设置顶点座标
glColor*() 设置当前颜色
glIndex*() 设置当前颜色表
glNormal*() 设置法向座标
glEvalCoord*() 产生座标
glCallList(),glCallLists() 执行显示列表
glTexCoord*() 设置纹理座标
glEdgeFlag*() 控制边界绘制
glMaterial*() 设置材质
以上为可在glBegin()和glEnd()之间可调用的函数

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 连续填充四边形串
gluLookAt()

函数原型为

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

gluLookAt()共有九个参数,三个一组,分为三组,分别是眼睛的位置,眼睛朝向的位置,以及相片朝上的方向。

详细介绍参考:http://blog.163.com/zhaoxin851055@126/blog/static/81129298200921052929831/

glMatrixMode()

这个函数是对模型矩阵进行变换,即对接下来要做什么进行一下声明,可选值: GL_MODELVIEW、GL_PROJECTION、GL_TEXTURE.

如果参数是GL_PROJECTION,这个是投影的意思,就是要对投影相关进行操作,也就是把物体投影到一个平面上,就像我们照相一样,把3维物体投到2维的平面上。这样,接下来的语句可以是跟透视相关的函数,比如glFrustum()或gluPerspective();
在opengl中,视图和模型变换是在一个矩阵中进行控制的,这个矩阵就是GL_MODELVIEW_MATRIX,可以使用glGetFloatv函数来获取这个矩阵,而我们所要使用glTranslate*, glRotate*,glScale* 等操作均最后反映到这个矩阵的变化中,所以了解这个矩阵的构造对于灵活运用OpenGL比较重要。

变换矩阵在内存中的存放方式如下:
m[0] m[4] m[ 8] m[12]

m[1] m[5] m[ 9] m[13]

m[2] m[6] m[10] m[14]

m[3] m[7] m[11] m[15]

可以看出,OpenGL是以列序来存放这个矩阵的,位于矩阵上方的3*3矩阵是旋转矩阵,可以用来控制刚体的旋转和尺度变化,如下:
m[0] m[4] m[ 8]

m[1] m[5] m[ 9]

m[2] m[6] m[10]

而左上角的3*1矩阵是用来控制刚体的平移的。就是m[12],m[13],m[14]这三个值,分别控制X,Y ,Z方向的平移。所有16个值组成一标准的齐次矩阵。

参考博文:http://www.cnblogs.com/txwd0033/archive/2009/09/25/1574087.html

若是GL_TEXTURE,就是对纹理相关进行操作;
顺便说下,OpenGL里面的操作,很多是基于对矩阵的操作的,比如位移,旋转,缩放,所以,这里其实说的规范一点就是glMatrixMode是用来指定哪一个矩阵是当前矩阵,而它的参数代表要操作的目标,GL_PROJECTION是对投影矩阵操作,GL_MODELVIEW是对模型视景矩阵操作,GL_TEXTURE是对纹理矩阵进行随后的操作。

参考博文:http://blog.sina.com.cn/s/blog_61ac952e0100grop.html
gluPerspective()

函数原型
  void gluPerspective(   GLdouble fovy, //角度
  GLdouble aspect,//视景体的宽高比
  GLdouble zNear,//沿z轴方向的两裁面之间的距离的近处
  GLdouble zFar //沿z轴方向的两裁面之间的距离的远处
  )

 

详细介绍:http://www.cppblog.com/COOOOOOOOL/archive/2009/12/30/104255.html讲的非常详细,有图有真相。

透视投影原理介绍:《深入探索透视投影变换》

gluPerspective()与gluLookAt()的关系

http://wenku.baidu.com/view/ead1690c844769eae009ed06.html

glViewport()函数和glOrtho()函数的理解

http://blog.163.com/bingcaihuang@126/blog/static/198942122010015104833960/

发布了22 篇原创文章 · 获赞 5 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章