230 likes | 343 Views
第四章 绘制几何图形. 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. 指定颜色.
E N D
第四章 绘制几何图形 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. 指定颜色 使用函数: 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);白色
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)的顶点。
(2)构造图元及其限制 绘制图形,必须使用一对函数: glBegin(mode)// 开始绘制 ...... glEnd( );// 结束绘制 glBegin(mode)函数中的参数mode的值有多种选择,便可以绘制出不同的点、线或多边形.
4.2 绘制点、线和多边形 1.点的绘制 1)基本图元选择 在glBegin(mode)函数中的参数mode选择GL_POINTS 2)确定顶点坐标 使用函数 glVertex*(…) 3)设定点的大小 使用函数 glPointSize(size) 说明:该函数设定渲染点的像素宽度, 参数size必须大于0.0;其默认值为1.0
具体绘制的函数 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( ); }
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( ); }
Mode 的值 解释 GL_LINES 每对顶点组成线段 GL_LINE_STRIP 折线(不闭合) GL_LINE_LOOP 闭合线 2.线的绘制 1)类型选择 在glBegin(mode)函数中的参数mode选择如下
2.线的绘制 2)设定线的宽度 使用函数 glLineWidth(GLfloat width) 说明:该函数设定线的像素宽度 参数width必须大于0.0;其默认值为1.0
2.线的绘制 3)设定线形 使用函数: glLineStipple(factor, pattern) 说明: 参数factor:为pattern的扩展倍数,factor的值限制在1到256之间。 参数pattern:是一个16位二进制数。在这个二进制模板中,0表示不画点,1表示画点。
例如: pattern为0x3f07,二进制表示为: 0011 1111 0000 0111, 即是从低位起绘3个象素,不绘5个象素,绘6个象素和不绘2个象素来连成一条线。
设置线型时的三个相关命令: glLineStipple(2,0xAAAA); //设置线型 glEnable(GL_LINE_STIPPLE); //启动线型 … glDisable(GL_LINE_STIPPLE); //关闭线型
画线的例子: 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(); }
Mode 的值 解释 GL_TRIANGLES 三点相连成为一个三角形 GL_QUADS 四点相连成为一个四边形 GL_POLYGON 顶点相连成为一个凸多边形 3.多边形的绘制 1)类型选择 在glBegin(mode)函数中的参数mode选择如下
2) 多边形绘制方式选择 使用函数: glPolygonMode(face, mode) 说明: face:取值为:GL_FRONT、GL_BACK、 GL_FRONT_AND_BACK 。 mode:取值为: GL_POINT、GL_LINE、GL_FILL , 分别表示轮廓点多边形、轮廓线多边形、 全填充多边形。
3)多边形填充方式选择 使用函数: glPolygonStipple(*mask) 说明:该函数用于设置多边形的填充图案。 参数mask为一个指向3232位图的指针, 0表示不画点,1表示画点。
设置填充图案时的三个相关命令: glPolygonStipple(*mask); //设置填充图案 glEnable(GL_POLYGON_STIPPLE); //启动图案 … glDisable(GL_ POLYGON _STIPPLE); //关闭图案
填充图案例子: 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x06, 0xC0, 0x03, 0x60, 0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20,
4.3 绘制规则三维物体函数 OpenGL中可以直接绘制的三维图形
三维图形的绘制函数: 球体: 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);