在学长项目的结构上,初步认识OpenGL里面的一些函数。
Init()
glEnable()
GL_DEPTH_TEST
打开深度测试
GL_COLOR_MATERIAL
执行它后,图形(材料)将根据光线的照耀进行反射
GL_NORMALIZE
根据函数glNormal的设置条件,启用法向量
GL_LIGHTING
启用灯源
GL_LIGHT0
启用0号灯
glClear()
GL_DEPTH_BUFFER_BIT
清除深度缓冲区
GL_COLOR_BUFFER_BIT
清除当前可写的颜色缓冲
Reshape()
glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
x,y 以像素为单位,指定了视口的左下角位置。width,height 表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。
glMatrixMode()
GL_MODELVIEW
对模型视图的操作,接下来的语句来描绘一个模型
视图变换 gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz)
该函数定义一个视图矩阵,并与当前矩阵相乘
- eyex, eyey, eyez 相机在世界坐标系的位置;
- centerx, centery, centerz 相机镜头对准的物体在世界坐标的位置;
- upx, upy, upz 相机向上的方向在世界坐标系中的方向;
可以把相机的位置确定下来
GL_PROJECTION
就像照相一样,把3维物体投影到2维平面上去,接下来可以用glFrustum()或gluPerspective()
投影变换 gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear, GLdouble zFar)
- fovy : 视野在Y-Z平面的角度,范围是[0.0, 180.0];
- aspect : 投影平面宽度与高度的比率;
- Near : 近裁剪面到视点的距离
- Far : 远裁剪面到视点的距离
Display()
灯光
glLightfv()
- GL_AMBIENT : 环境光成分;
- GL_DIFFUSE : 漫反射光成分;
- GL_SPECULAR : 聚光成分;
- GL_POSITION : 位置
最后一个参数 w : 0 -> 直射光(directional source),否则是位置光; - GL_SPOT_DIRECTION : 照射方向,默认方向 (0, 0, 1);
- GL_SPOT_EXPONENT : 光线分布,范围是[0, 128],数值越大,越集中,设为0时,等效于均匀分布;
- GL_SPOT_CUTOFF : 灯光照射的角度范围,数值范围是[0, 90]或180;
反光
glMaterialfv(GL_FRONT,GL_DIFFUSE,@Diffuse)
- 决定该材质运用于图元得正面还是反面:
- GL_FRONT 正面
- GL_BACK 反面
- GL_FRONT_AND_BACK 正反两面
- 表示对何种光进行设置:
- GL_DIFFUSE 漫射光,具有方向性,来自一个特定的方向,它根据入射光线的角度在表面上均匀地反射开来;
- GL_AMBIENT 环境光,并不来自任何特定的方向,会四处反射;
- GL_AMBIENT_AND_DIFFUSE 环境光和漫射光
- GL_SPECULAR 平行/镜面光,具有极强的方向性,但它的反射角度很尖锐,只沿一个特定的方向反射;
- GL_EMISSION 向外散发的光,较弱
- 反光率的RGB值,每一项取值都为0~1之间;
平移、旋转
glTranslatef
普通画图
glBegin(GLenum mode)
- GL_POINTS : 每个顶点作为一个点;
- GL_LINES : 每个顶点作为一个独立的线段;
- GL_LINE_STRIP : 一组线段依次相连,不成环;
- GL_LINE_LOOP : 一组线段依次相连,成环;
- GL_TRIANGLES : 依次组成三角形,不相连;
- GL_TRIANGLE_STPIP : 依次组成三角形,相连;
- GL_QUADS : 依次组成四边形,不相连;
- GL_QUAD_STRIP : 依次组成四边形,相连;
- GL_POLYGON : 绘制凸多边形;