1 / 23

第四章 绘制几何图形

第四章 绘制几何图形. 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. 指定颜色.

Download Presentation

第四章 绘制几何图形

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 (red, green, blue) 说明:参数red,green,blue指定当前颜色的RGB 值,取值范围在[0,1] 以下为8种颜色设置值: 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);白色

  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. Mode 的值 解释 GL_LINES 每对顶点组成线段 GL_LINE_STRIP 折线(不闭合) GL_LINE_LOOP 闭合线 2.线的绘制 1)类型选择 在glBegin(mode)函数中的参数mode选择如下

  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. Mode 的值 解释 GL_TRIANGLES 三点相连成为一个三角形 GL_QUADS 四点相连成为一个四边形 GL_POLYGON 顶点相连成为一个凸多边形 3.多边形的绘制 1)类型选择 在glBegin(mode)函数中的参数mode选择如下

  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为一个指向3232位图的指针, 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);

More Related