第四章 绘制几何图形

23
1 第第第 第第第第第第 4.1 第第第第第第第第 4.2 第第第 第第第第第 4.3 第第第第第第第 第第 4.4 第第第第 4.5 第第第第

Upload: maisie-mcknight

Post on 02-Jan-2016

117 views

Category:

Documents


1 download

DESCRIPTION

第四章 绘制几何图形. 4.1 图形显示控制命令 4.2 绘制点、线和多边形 4.3 绘制规则三维物体函数 4.4 顶点数组 4.5 法线向量. 4.1 图形显示控制命令. 1. 清屏. 清空窗口,需调用 2 个函数 : glClearColor(red, green, blue, alpha) 说明:参数 red, green, blue, alpha 为采用 RGBA 颜色模式下的值。取值范围 [0 , 1] 。 glClear(GL_COLOR_BUFFER_BIT ) 说明: 清空窗口. 2. 指定颜色. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四章 绘制几何图形

1

第四章 绘制几何图形

4.1 图形显示控制命令 4.2 绘制点、线和多边形 4.3 绘制规则三维物体函数 4.4 顶点数组4.5 法线向量

Page 2: 第四章 绘制几何图形

2

4.1 图形显示控制命令 1. 清屏 清空窗口,需调用 2 个函数 : glClearColor(red, green, blue, alpha) 说明:参数 red, green, blue, alpha 为采用 RGBA 颜色模式下的值。取值范围 [0 , 1] 。

glClear(GL_COLOR_BUFFER_BIT )说明:清空窗口

Page 3: 第四章 绘制几何图形

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 种颜色设置值:

Page 4: 第四章 绘制几何图形

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 )的顶点。

Page 5: 第四章 绘制几何图形

5

( 2 )构造图元及其限制 绘制图形,必须使用一对函数 : glBegin(mode) // 开始绘制 ...... glEnd( ); // 结束绘制

glBegin(mode) 函数中的参数 mode 的值有多种选择 , 便可以绘制出不同的点、线或多边形 .

Page 6: 第四章 绘制几何图形

6

4.2 绘制点、线和多边形 1. 点的绘制 1 )基本图元选择 在 glBegin(mode) 函数中的参数 mode 选择 GL_POINTS

2 )确定顶点坐标 使用函数 glVertex*(…)

3 )设定点的大小 使用函数 glPointSize(size) 说明 : 该函数设定渲染点的像素宽度 , 参数 size 必须大于 0.0 ;其默认值为 1.0

Page 7: 第四章 绘制几何图形

7

例 :下列图形中不同大小的点

Page 8: 第四章 绘制几何图形

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( );

}

具体绘制的函数

Page 9: 第四章 绘制几何图形

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( );

}

Page 10: 第四章 绘制几何图形

10

2. 线的绘制 1 )类型选择 在 glBegin(mode) 函数中的参数 mode 选择如下

Mode 的值 解释

GL_LINES 每对顶点组成线段

GL_LINE_STRIP 折线(不闭合)

GL_LINE_LOOP 闭合线

Page 11: 第四章 绘制几何图形

11

2. 线的绘制 2 )设定线的宽度 使用函数 glLineWidth ( GLfloat width ) 说明 : 该函数设定线的像素宽度 参数 width 必须大于 0.0 ;其默认值为 1.0

Page 12: 第四章 绘制几何图形

12

2. 线的绘制 3 )设定线形 使用函数 : glLineStipple ( factor, pattern )说明 :参数 factor: 为 pattern 的扩展倍数, factor 的值限制在 1 到 256 之间。参数 pattern: 是一个 16 位二进制数。在这个二进制模板中, 0 表示不画点, 1 表示画点。

Page 13: 第四章 绘制几何图形

13

pattern 为 0x3f07 ,二进制表示为: 0011 1111 0000 0111 ,即是从低位起绘 3 个象素,不绘 5 个象素,绘 6

个象素和不绘 2 个象素来连成一条线。

例如 :

Page 14: 第四章 绘制几何图形

14

glLineStipple(2,0xAAAA); // 设置线型glEnable(GL_LINE_STIPPLE); // 启动线型 …glDisable(GL_LINE_STIPPLE); // 关闭线型

设置线型时的三个相关命令 :

Page 15: 第四章 绘制几何图形

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();

}

Page 16: 第四章 绘制几何图形

16

3. 多边形的绘制 1 )类型选择 在 glBegin(mode) 函数中的参数 mode 选择如下

Mode 的值 解释

GL_TRIANGLES 三点相连成为一个三角形

GL_QUADS 四点相连成为一个四边形

GL_POLYGON 顶点相连成为一个凸多边形

Page 17: 第四章 绘制几何图形

17

2) 多边形绘制方式选择

使用函数 : glPolygonMode(face, mode) 说明 : face: 取值为 :GL_FRONT 、 GL_BACK 、 GL_FRONT_AND_BACK 。 mode: 取值为 : GL_POINT 、 GL_LINE 、 GL_

FILL , 分别表示轮廓点多边形、轮廓线多边形、 全填充多边形。

Page 18: 第四章 绘制几何图形

18

编程画出下面图形

Page 19: 第四章 绘制几何图形

19

3 )多边形填充方式选择

使用函数 : glPolygonStipple(*mask)说明 : 该函数用于设置多边形的填充图案。 参数 mask 为一个指向 3232 位图的指针, 0 表示不画点, 1 表示画点。

Page 20: 第四章 绘制几何图形

20

glPolygonStipple(*mask) ; // 设置填充图案glEnable(GL_POLYGON_STIPPLE); // 启动图案 …

glDisable(GL_ POLYGON _STIPPLE); // 关闭图案

设置填充图案时的三个相关命令 :

Page 21: 第四章 绘制几何图形

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,

Page 22: 第四章 绘制几何图形

22

4.3 绘制规则三维物体函数 OpenGL 中可以直接绘制的三维图形

Page 23: 第四章 绘制几何图形

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);

三维图形的绘制函数 :