opengl学习笔记


一、绘制方式。

绘制方式
方式 说明
网格线绘图方式(wireframe) 这种方式仅绘制三维物体的网格轮廓线
深度优先网格线绘图方式(depth_cued) 用网格线方式绘图,增加模拟人眼看物体一样,远处的物体比近处的物体要暗一些。
反走样网格线绘图方式(antialiased)

用网格线方式绘图,绘图时采用反走样技术以减少图形线条的参差不齐。

平面消隐绘图方式(flat_shade) 对模型的隐藏面进行消隐,对模型的平面单元按光照程度进行着色但不进行光滑处理。
光滑消隐绘图方式(smooth_shade) 对模型进行消隐按光照渲染着色的过程中再进行光滑处理,这种方式更接近于现实。
加阴影和纹理的绘图方式(shadows、textures) 在模型表面贴上纹理甚至于加上光照阴影,使得三维景观像照片一样。
运动模糊的绘图方式(motion_blured) 模拟物体运动时人眼观察所感觉的动感现象。
大气环境效果(atmosphere_effects) 在三维景观中加入如雾等大气环境效果。
深度域效果(depth_effects) 类似于照相机镜头效果,模型在聚焦点处清晰,反之则模糊。

二、OpenGL核心库

1、基本图元

几何图元类型和说明
类型 说明
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 连续填充四边形串
   

 

2、调用函数

调用函数
函数 说明
glVertex*() 设置顶点坐标
glColor*() 设置当前颜色
glIndex*() 设置当前颜色表
glNormal*() 设置法向坐标
glEvalCoord*() 产生坐标
glCallList(),glCallLists() 执行显示列表
glTexCoord*() 设置纹理坐标
glEdgeFlag*() 控制边界绘制
glMaterial*() 设置材质

例如绘制一个三角形:
glBegin( GL_TRIANGLES );
glVertex3f( 0.0, 1.0, 0.0 );
glVertex3f( -1.0, -1.0, 0.0 );
glVertex3f( 1.0, -1.0, 0.0 );
glEnd();

例如绘制一个矩形:

glBegin( GL_QUADS );
glColor3f( 0.0, 1.0, 1.0 );
glVertex3f( 1.0, -1.0,  0.0 );
glVertex3f( 1.0, -3.0, 0.0 );
glVertex3f( 2.0, -4.0, 0.0 );
glVertex3f( 2.0, -2.0, 0.0 );
glEnd();

 

二、OpenGL变换
1、几何变换(视点变换、模型变换)
1)平移 void glTranslatef( GLfloat x, GLfloat y, GLfloat z );
      x、y、z分别为沿三个轴向平移的偏移量。
      例如:glTranslatef( -20.0, 0.0, 0.0 );//在绘制点坐标基础上x轴平移-20

2)缩放 void glScalef( GLfloat x, GLfloat y, GLfloat z );
      x、y、z分别为沿三个轴向缩放的比例因子。
      例如:glScalef( 1.5, 0.5, 1.0 );//x轴缩放1.5,y轴缩放0.5,z轴缩放1.0。

3)旋转 void glRoteatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z );
      angle表示从点(x, y, z)到原点的方向逆时针旋转的角度,x、y、z是旋转方向点坐标。
      例如:glRotatef( 90.0, 0.0, 0.0, 1.0 );// 以( 0.0, 0.0, 1.0 )绕z轴正向旋转90度

2、投影变换
1)正射投影:glOrtho
2)透视投影:glFrustum, gluPerspective

3、视口变换:glViewport

4、裁剪变换:glClipPlane

 

三、OpenGL颜色
    glColor3f、glColor3d等。

 

四、光照
1、创建光源
2、启动光照
3、明暗处理
4、材质

实例:绘制粉色实心茶壶
GLfloat mat_ambient[]={ 0.8, 0.8, 0.8, 1.0 };
GLfloat mat_diffuse[]={ 0.8, 0.0, 0.8, 1.0 };
GLfloat mat_specular[]={ 1.0, 0.0, 1.0, 1.0 };
GLflaot mat_shininess[]={ 50.0 };

glMaterialfv( GL_FRONT, GL_AMBIENT, mat_ambient );
glMaterialfv( GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv( GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv( GL_FRONT, GL_SHININESS, mat_shininess);

GLfloat light_postion[]={ 1.0, 1.0, 1.0, 0.0 };
glLightfv( GL_LIGHT0, GL_POSITION, light_position );

glEnable( GL_LIGHTING );
glEnable( GL_LIGHT0 );
glDepthFunc( GL_LESS );
glEnable( GL_DEPTH_TEST );

glClear( GL_COLOR_BUFFER_BIT );
glColor3f( 0.0, 1.0, 1.0 );
glLoadIdentity();

glutSolidTeapot( 1.0 );
glFlush();

图示 如下:

 

丝状茶壶:

圆:

 

实心圆环:

丝状圆环: