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

第四章 绘制几何图形

Embed Size (px)

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

Citation preview

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

三维图形的绘制函数 :