利用OpenGL 绘制基本图元 五角星

更新时间:2023-12-09 12:41:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验1:利用OpenGL 绘制基本图元

1、 实验要求和目的:

a、 掌握vc++程序开发环境,熟悉OpenGL基本程序结构。 b、 掌握基本图元的绘制方法。

2、

实验内容:

a、 点、线、三角形、多边形的绘制

3、 实验步骤:

a、 OpenGL相关库文件的安装;

b、 新建工程,OpenGL相关.lib链接,.cpp文件中包含相关.h文件 c、 输入、调试、运行OpenGL绘制基本图元的程序。

d、 设计五角星(填充)及过渡色扇面(三角,四角)的生成算法的实现程序。

4、

实验代码

#include #include #include #include #include

voidmyDraw() {

glClear (GL_COLOR_BUFFER_BIT); glColor3f (0.0, 0.0, 1.0); glPointSize(1.0); /*

假设五角星外接圆半径为1,有一个角朝上,以五角星中心为原点: 则五个角顶点坐标分别为(按顺时针): A(0,1)

B(cos18°,sin18°)

C(cos54°,-sin54°) D(-cos54°,-sin54°) E(-cos18°,sin18°)

假设t为内部五边形外接圆半径,

t=(1+tan^2(18°))/(3-tan^2(18°)),即0.3819660112501 则五个顶点所对应的坐标为(即内部五边形的五个顶点):

BB(-t*cos18°,-t*sin18°)3 CC(-t*cos54°,t*sin54°) 2 DD(t*cos54°,t*sin54°) 1 AA(0,-t) 4 EE(t*cos18°,-t*sin18°)5 */

//up

glBegin(GL_TRIANGLES); // 绘制三角形 glVertex3f( 0.0f, 1.0f, 0.0f); // 上顶点

glVertex3f(0.38f*cos(54*3.14/180.0),0.38f*sin(54*3.14/180.0), 0.0f); // 1 glVertex3f(-0.38f*cos(54*3.14/180.0),0.38f*sin(54*3.14/180.0),0.0f); // 2 glEnd();

glColor3f (0.0, 1.0, 1.0); //left-up

glBegin(GL_TRIANGLES); // 绘制三角形

glVertex3f( -1.0f*cos(18*3.14/180.0), 1.0*sin(18*3.14/180.0), 0.0f); // glVertex3f(-0.38f*cos(54*3.14/180.0),0.38f*sin(54*3.14/180.0),0.0f);//2 glVertex3f(-0.38f*cos(18*3.14/180.0),-0.38f*sin(18*3.14/180.0),0.0f); // 3 glEnd();

glColor3f (1.0, 0.0, 1.0); //left-down

glBegin(GL_TRIANGLES); // 绘制三角形

glVertex3f( -1.0f*cos(54*3.14/180.0), -1.0*sin(54*3.14/180.0), 0.0f); // glVertex3f(-0.38f*cos(18*3.14/180.0),-0.38f*sin(18*3.14/180.0),0.0f); //3 glVertex3f(0.0,-0.38f, 0.0f); // 4 glEnd();

glColor3f (0.0, 1.0, 0.0); //right-down

glBegin(GL_TRIANGLES); // 绘制三角形

glVertex3f(1.0f*cos(54*3.14/180.0),-1.0f*sin(54*3.14/180.0), 0.0f); glVertex3f(0.0,-0.38f, 0.0f); // 4

glVertex3f(0.38f*cos(18*3.14/180.0),-0.38f*sin(18*3.14/180.0),0.0f); // 5

glEnd();

glColor3f (1.0, 0.4, 0.5); //right-up

glBegin(GL_TRIANGLES); // 绘制三角形

glVertex3f( 1.0f*cos(18*3.14/180.0), 1.0*sin(18*3.14/180.0), 0.0f); // glVertex3f(0.38f*cos(18*3.14/180.0),-0.38f*sin(18*3.14/180.0),0.0f); // 5 glVertex3f(0.38f*cos(54*3.14/180.0),0.38f*sin(54*3.14/180.0), 0.0f); // 1 glEnd();

glColor3f (0.5, 1.0, 1.0); glBegin(GL_POLYGON);

glVertex3f(0.38f*cos(54*3.14/180.0),0.38f*sin(54*3.14/180.0), 0.0f); // 1 glVertex3f(-0.38f*cos(54*3.14/180.0),0.38f*sin(54*3.14/180.0),0.0f); // 2 glVertex3f(-0.38f*cos(18*3.14/180.0),-0.38f*sin(18*3.14/180.0),0.0f); //3 glVertex3f(0.0,-0.38f, 0.0f); // 4

glVertex3f(0.38f*cos(18*3.14/180.0),-0.38f*sin(18*3.14/180.0),0.0f); // 5 glEnd();

glFlush(); }

int main(intargc, char* argv[]) { glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(500, 500); glutInitWindowPosition(0,0);

glutCreateWindow(\ glutDisplayFunc(myDraw); glutMainLoop(); return 0; }

本文来源:https://www.bwwdw.com/article/gyc5.html

Top