一、绘制方式。
方式 | 说明 |
---|---|
网格线绘图方式(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();
图示 如下:
丝状茶壶:
圆:
实心圆环:
丝状圆环: