Opengl笔记之函数汇总
by Cracent
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。所以就好像能看见侧面一样
4.glRotatef()——模型变换函数 旋转
void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
angle表示旋转的角度(注意单位不是弧度),(x,y,z)表示转轴。举个例子:
glRotatef(45.0, 0.0, 0.0, 1.0);//表示模型沿着(0,0,1)这个轴旋转45°。
5.glFrustum() ——投影变换函数 透视投影
前四个参数表示裁剪范围,后两个参数(要求为正数)表示近的面和远的面离眼睛的距离。有点儿像调焦。裁剪完后拉伸铺满整个屏幕。
6.glPerspective() ——投影变换函数 透视投影
void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
第一个参数表示在y方向上的视角度数。个人理解:比如45,表示眼睛和模型中心这个条线与y轴的夹角。
第二个参数表示纵横比。x/y。比如2表示x、y本来都是1个长度,现在x可以当两个长度用,这样,模型就好像被x方向压缩了一样。
后两个参数glFrustum()中后两个相近。要求都是正数。
7. glLightfv如何使用
light0(float x,float y,float z,float a)//光 a齐次坐标
{ GLfloat light_position[] = {x,y,z,a};
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL); }
glLightfv(GL_LIGHT0, GL_POSITION, light_position); 这句是指定第0号光源的位置
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); 这两句是告诉OPENGL在后面的渲染中使用光照,默认情况下是关闭的,另外为了使用第0号光照,需要指定GL_LIGHT0(当然还有GL_LIGHT1、GL_LIGHT2……最大数目看你的OPENGL支持了,一般支持最多八个光照)
glEnable(GL_DEPTH_TEST); 这句是启用深度测试,这样,在后面的物体会被挡着,例如房子后面有棵树,如果不启用深度测试,你先画了房子再画树,树会覆盖房子的;但启用深度测试后无论你怎么画,树一定在房子后面(被房子挡着)
glEnable(GL_COLOR_MATERIAL); 这句是启用颜色跟踪~~ ========================== 你说的那个a是 {x,y,z,a}; 中的a吧,这个是齐次坐标……拜托你先看一下书……, 这个值默认是设置成1.0f的 你要设置双面绘制,要注意默认是逆时针的
8. glMatrixMode(mode)
glMatrixMode - 指定哪一个矩阵是当前矩阵
mode 指定哪一个矩阵堆栈是下一个矩阵操作的目标,可选值: GL_MODELVIEW、GL_PROJECTION、GL_TEXTURE.
说明
glMatrixMode设置当前矩阵模式:
GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作.
GL_PROJECTION,对投影矩阵应用随后的矩阵操作.
GL_TEXTURE,对纹理矩阵堆栈应用随后的矩阵操作.
与glLoadIdentity()一同使用
glLoadIdentity():将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作
在glLoadIdentity()之后我们为场景设置了透视图。glMatrixMode(GL_MODELVIEW)设置当前矩阵为模型视图矩阵,模型视图矩阵储存了有关物体的信息。
glMatrixMode与gluPerspective函数的使用折叠
GL_MODELVIEW 是模型矩阵GL_PROJECTION 是投影矩阵。 gluPerspective的是创建一个投影矩阵并且与当前矩阵相乘,得到的矩阵设定为当前变换,但要先通过glMatrixMode设定成投影矩阵才会得到想要的投影矩阵变换。
例如:
glMatrixMode(GL_MODELVIEW);
......
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0f,(GLfloat)cx/(GLfloat)cy,0.1f,100.0f);
可以出来结果,反之,换位置后;
glMatrixMode(GL_MODELVIEW);
......
gluPerspective(45.0f,(GLfloat)cx/(GLfloat)cy,0.1f,100.0f);
glMatrixMode(GL_PROJECTION);
则,投影矩阵位置不正确.
9. glShadeModel
void glShadeModel ( GLenum mode);
OpenGL1.0提供的接口。作用:设置着色模式。
参数mode可以是GL_SMOOTH(默认值)或GL_FLAT。采用恒定着色时(即GL_FLAT),使用图元中某个顶点的颜色来渲染整个图元。
在使用光滑着色时(即GL_SMOOTH),独立的处理图元中各个顶点的颜色。对于线段图元,线段上各点的颜色将根据两个顶点的颜色通过插值得到。对于多边形图元,多边形内部区域的颜色将根据所有顶点的颜色插值得到。
10. glMaterialfv()
指定用于光照计算的当前材质属性。参数face的取值可以是GL_FRONT、GL_BACK或GL_FRONT_AND_BACK,指出材质属性将应用于物体的哪面。
void glMaterial{if}(GLenum face, GLenum pname, TYPE param);
void glMaterial{if}v(GLenum face, GLenum pname, TYPE *param);
pname指出要设置的哪种材质属性。param为要设置的属性值,是一个指向数组的指针(向量版本)或一个数值(非向量版本)。只有设置参数值是GL_SHININESS时,才能使用非向量版本。下表列举出了参数pname的可能取值。GL_AMBIENT_AND_DIFFUSE让您能够同时设置材质的环境颜色和散射颜色,并将它们设置为相同的RGBA值。
下面是pname的可能取值和相应值的意义:
参数值
默认值
意义
GL_AMBIENT
(0.2,0.2,0.2,1.0)
材质的环境颜色
GL_DIFFUSE
(0.8,0.8,0.8,1.0)
材质的散射颜色
GL_AMBIENT_AND_DIFFUSE
材质的环境颜色和散射颜色
GL_SPECULAR
(0.0,0.0,0.0,1.0)
材质的镜面反射颜色
GL_SHININESS
0.0
镜面反射指数
GL_EMISSION
(0.0,0.0,0.1,1.0)
材质的发射光颜色
GL_COLOR_INDEXES
(0, 1, 1)
环境颜色索引、散射颜色索引和镜面反射颜色索引