实验三基于 OpenGL的圆柱绘制1. 实验目的通过圆柱的绘制, 掌握 OpenGL 编程环境的设置, 基本图元的使用, 光照的设置以及纹理的设置,理解曲面绘制的基本原理。2. 实验内容(1)设置 OpenGL 编程环境;(2)利用三角形和四边形等基本图元绘制底面圆圆心在坐标原点,半径为 r,高为 h,方向沿 z 轴方向的圆柱;(3)设置光照(4)设置纹理:在圆柱的侧面上显示一张图片3.主要问题 &结果截图①如何绘制圆柱?一种方法是调用 gluc 中的函数 gluCylinder 但本实验要求利用三角形和四边形等基本图元绘制所以这里主要采用类似微积分的方式绘制,就是将椭圆的侧面用多个四边形,底面用多个三角形来表示关键代码void Circle()底面的圆形void Cylinder()圆柱的侧面glBegin(GL_TRIANGLE_FAN);//扇形连续填充三角形串glVertex3f(0.0f, 0.0f, 0.0f);//圆心: 这是三角形作为圆心的顶点int i = 0; for (i = 0; i <= 360; i += 15) glBegin(GL_QUAD_STRIP);//连续填充四边形串int i = 0; for (i = 0; i <= 360; i += 15) { float p = i * 3.14 / 180; glTexCoord2f(p/10,0.1f); { float p = i * 3.14 / 180; glVertex3f(sin(p), cos(p), 0.0f);//圆周:这是三角形作为扇形弧端点的顶点(p 的值取 0-2PI )就能画出一个类似圆形} glEnd();glVertex3f(sin(p), cos(p), 1.0f);// 这个 1.0f指定的是高度glTexCoord2f(p/10,0.0f); glVertex3f(sin(p), cos(p), 0.0f); } glEnd();效果:再调用画圆形的函数画上两个底面Circle(); glTranslatef(0, 0, 1);//设定高度为1,画上底面Circle();效果:②如何纹理贴图?关键代码:glEnable(GL_TEXTURE_2D);// 执行纹理映射,启用二维文理glBindTexture(GL_TEXTURE_2D, ID);// 允许建立一个绑定到目标纹理的有名称的纹理//ID ——纹理的名称,并且,该纹理的名称在当前的应用中不能被再次使用纹理贴图的原理是纹理映射,即将纹理图片上的点和图形中的点建立对应关系。所以,我们需要 glEnable 底下的点定义之前关联上与之对应的纹理坐标即先调用 glTexCoord2f设置纹理,再调用glVertex3f 绘制点例如之前的圆形:glBegin(GL_TRIANGLE_FAN);//扇形连续填充三角形串glTexCoord2f(0.0f, 0.0f); // 将纹理图( 0,0 )映射到圆心glVertex3f(0.0f, 0.0f, 0.0f); int i = 0; for (i = 0; i <= 360; i += 15)...