Download - 第四章 绘制几何图形
1
第四章 绘制几何图形
4.1 图形显示控制命令 4.2 绘制点、线和多边形 4.3 绘制规则三维物体函数 4.4 顶点数组4.5 法线向量
2
4.1 图形显示控制命令 1. 清屏 清空窗口,需调用 2 个函数 : glClearColor(red, green, blue, alpha) 说明:参数 red, green, blue, alpha 为采用 RGBA 颜色模式下的值。取值范围 [0 , 1] 。
glClear(GL_COLOR_BUFFER_BIT )说明:清空窗口
3
2. 指定颜色
glColor3f ( 0.0 , 0.0 , 0.0 );黑色glColor3f ( 1.0 , 0.0 , 0.0 );红色glColor3f ( 0.0 , 1.0 , 0.0 );绿色glColor3f ( 1.0 , 1.0 , 0.0 );黄色glColor3f ( 0.0 , 0.0 , 1.0 );兰色glColor3f ( 1.0 , 0.0 , 1.0 );洋红色glColor3f ( 0.0 , 1.0 , 1.0 );蓝绿色
glColor3f ( 1.0 , 1.0 , 1.0 );白色
使用函数 : glColor3f (red, green, blue)说明:参数 red , green , blue 指定当前颜色的 RGB 值,取值范围在 [0 , 1]
以下为 8 种颜色设置值:
4
3. 构造图形 ( 1 )定义顶点 使用函数: glVertex{234}{sifd}( ... );说明: {234}---- 指定顶点的维数, 2 为二维; 3 为三维; 4 为四维; {sifd}---- 指定点的数据类型: s 为短整型精度; i 为整型精度; f 为浮点精度; d 为双精度。 二元数组中包含的元素是 x 和 y ;三元数组中包含的元素是x , y 和 z ;四元数组中包含的元素是 x , y , z 和 w 。 如:glVertex2s(2,3) ;表示一个三维坐标为( 2 , 3 , 0 )的顶点;glVertex3f(1.0,2.1,3.5) ;表示一个三维坐标为( 1.0 , 2.1 , 3.5 )的顶点。
5
( 2 )构造图元及其限制 绘制图形,必须使用一对函数 : glBegin(mode) // 开始绘制 ...... glEnd( ); // 结束绘制
glBegin(mode) 函数中的参数 mode 的值有多种选择 , 便可以绘制出不同的点、线或多边形 .
6
4.2 绘制点、线和多边形 1. 点的绘制 1 )基本图元选择 在 glBegin(mode) 函数中的参数 mode 选择 GL_POINTS
2 )确定顶点坐标 使用函数 glVertex*(…)
3 )设定点的大小 使用函数 glPointSize(size) 说明 : 该函数设定渲染点的像素宽度 , 参数 size 必须大于 0.0 ;其默认值为 1.0
7
例 :下列图形中不同大小的点
8
void display(void)
{ glClear(GL_COLOR_BUFFER_BIT); // 清屏 glColor3f(1.0f,1.0f,1.0f); // 白色
glPointSize(1.0f); // 点的大小为一个像素for(int i=0; i<10; i++) // 画第一组点{ glBegin(GL_POINTS);
glVertex3f(20.0f+i*30.0f,50.0f,0.0f);
glEnd( );
}
具体绘制的函数
9
glColor3f(0.0f,1.0f,0.0f); // 绿色glPointSize(3.0f); 灯 // 点的大小为三个像素for(i=0; i<10; i++) // 画第二组点{ glBegin(GL_POINTS);
glVertex3f(20.0f+i*30.0f,30.0f,0.0f);glEnd( );
}glColor3f(0.0f,0.0f,1.0f); // 蓝色glPointSize(5.0f); // 点的大小为五个像素for(i=0; i<10; i++) // 画第三组点{ glBegin(GL_POINTS);
glVertex3f(20.0f+i*30.0f,10.0f,0.0f);glEnd( );
}glutSwapBuffers( );
}
10
2. 线的绘制 1 )类型选择 在 glBegin(mode) 函数中的参数 mode 选择如下
Mode 的值 解释
GL_LINES 每对顶点组成线段
GL_LINE_STRIP 折线(不闭合)
GL_LINE_LOOP 闭合线
11
2. 线的绘制 2 )设定线的宽度 使用函数 glLineWidth ( GLfloat width ) 说明 : 该函数设定线的像素宽度 参数 width 必须大于 0.0 ;其默认值为 1.0
12
2. 线的绘制 3 )设定线形 使用函数 : glLineStipple ( factor, pattern )说明 :参数 factor: 为 pattern 的扩展倍数, factor 的值限制在 1 到 256 之间。参数 pattern: 是一个 16 位二进制数。在这个二进制模板中, 0 表示不画点, 1 表示画点。
13
pattern 为 0x3f07 ,二进制表示为: 0011 1111 0000 0111 ,即是从低位起绘 3 个象素,不绘 5 个象素,绘 6
个象素和不绘 2 个象素来连成一条线。
例如 :
14
glLineStipple(2,0xAAAA); // 设置线型glEnable(GL_LINE_STIPPLE); // 启动线型 …glDisable(GL_LINE_STIPPLE); // 关闭线型
设置线型时的三个相关命令 :
15
画线的例子 :void display(void)
{ glLineWidth(3);
glLineStipple(4,0xAAAA);
glEnable(GL_LINE_STIPPLE);
glColor3f(0.0,1.0,0.0);
glBegin(GL_LINES);
glVertex2s(10,10);
glVertex2s(200,320);
glEnd();
glDisable(GL_LINE_STIPPLE);
glutSwapBuffers();
}
16
3. 多边形的绘制 1 )类型选择 在 glBegin(mode) 函数中的参数 mode 选择如下
Mode 的值 解释
GL_TRIANGLES 三点相连成为一个三角形
GL_QUADS 四点相连成为一个四边形
GL_POLYGON 顶点相连成为一个凸多边形
17
2) 多边形绘制方式选择
使用函数 : glPolygonMode(face, mode) 说明 : face: 取值为 :GL_FRONT 、 GL_BACK 、 GL_FRONT_AND_BACK 。 mode: 取值为 : GL_POINT 、 GL_LINE 、 GL_
FILL , 分别表示轮廓点多边形、轮廓线多边形、 全填充多边形。
18
编程画出下面图形
19
3 )多边形填充方式选择
使用函数 : glPolygonStipple(*mask)说明 : 该函数用于设置多边形的填充图案。 参数 mask 为一个指向 3232 位图的指针, 0 表示不画点, 1 表示画点。
20
glPolygonStipple(*mask) ; // 设置填充图案glEnable(GL_POLYGON_STIPPLE); // 启动图案 …
glDisable(GL_ POLYGON _STIPPLE); // 关闭图案
设置填充图案时的三个相关命令 :
21
填充图案例子:
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x03, 0x80, 0x01, 0xC0,
0x06, 0xC0, 0x03, 0x60,
0x04, 0x60, 0x06, 0x20,
0x04, 0x30, 0x0C, 0x20,
22
4.3 绘制规则三维物体函数 OpenGL 中可以直接绘制的三维图形
23
球体: auxWireSphere(r) ;长方体: auxWireBox(x,y,z);圆柱体: auxWireCylinder(r,h);圆环体: auxWireTorus(r1, r2);正二十面 : auxWireIcosahedron(r);正八面体 : auxWireOctahehen(r); 正四面体 : auxWireTetrahedron(r);正十二面体 : auxWireDodecahedron(r); 圆锥体: auxWireCone(r,h);茶壶: auxWireTeapot(size);立方体: auxWireCube(x);
三维图形的绘制函数 :