OpenGL国民党党徽、共青团团徽、花型的绘制
来源:互联网 发布:张大奕的淘宝店劣质 编辑:程序博客网 时间:2024/04/29 19:55
#include<gl/glut.h>#include<math.h>#include<windows.h>#include<algorithm>using namespace std;const double PI = acos(-1.0);#define getColor(a) (a/255.0)int cnt; //顶点数void drawCircle(float x, float y, float r) //画圆{ int n = 100; glBegin(GL_POLYGON); for (int i = 0; i < n; i++) { glVertex2f(r*cos(i * 2 * PI / n)+x, r*sin(i * 2 * PI / n)+y); } glEnd();}void graphy1() //国民党党徽{ glClear(GL_COLOR_BUFFER_BIT); glColor3f(getColor(14), getColor(0), getColor(140)); //外围大蓝圆 drawCircle(0, 0, 0.7); glColor3f(1, 1, 1); //白色多边形 glBegin(GL_TRIANGLE_FAN); glVertex2f(0, 0); for (int i = 0; i <= 24; i++) { if (i & 1) glVertex2f(0.4*sin(i * 2 * PI / 24), 0.4*cos(i * 2 * PI / 24)); else glVertex2f(0.68*sin(i * 2 * PI / 24), 0.68*cos(i * 2 * PI / 24)); } glEnd(); glColor3f(getColor(14), getColor(0), getColor(140)); //蓝色圆 drawCircle(0, 0, 0.36); glColor3f(1, 1, 1); //白色圆 drawCircle(0, 0, 0.32); glFlush();}void graphy2() //共青团团徽{ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1, 1, 0); //外围黄色圆 drawCircle(0, 0, 0.7); glColor3f(1, 0, 0); //红色圆 drawCircle(0, 0, 0.65); glColor3f(1, 1, 0); //五角星(填充) glBegin(GL_TRIANGLE_FAN); glVertex2f(0, 0); for (int i = 0; i <= 10; i++) { if (i&1) glVertex2f(0.25*sin(i * 2 * PI / 10), 0.25*cos(i * 2 * PI / 10)); else glVertex2f(0.65*sin(i * 2 * PI / 10), 0.65*cos(i * 2 * PI / 10)); } glEnd(); glColor3f(0, 0, 0); //五角星轮廓 for (int i = 0; i <= 10; i++) { float p1_x, p1_y, p2_x, p2_y; if (i & 1) { p1_x = 0.25*sin(i * 2 * PI / 10); p1_y = 0.25*cos(i * 2 * PI / 10); p2_x = 0.65*sin((i + 1) * 2 * PI / 10); p2_y = 0.65*cos((i + 1) * 2 * PI / 10); } else { p1_x = 0.65*sin(i * 2 * PI / 10); p1_y = 0.65*cos(i * 2 * PI / 10); p2_x = 0.25*sin((i+1) * 2 * PI / 10); p2_y = 0.25*cos((i+1) * 2 * PI / 10); } glBegin(GL_LINES); glVertex2f(0, 0); glVertex2f(p1_x, p1_y); glVertex2f(0, 0); glVertex2f(p2_x, p2_y); glVertex2f(p1_x, p1_y); glVertex2f(p2_x, p2_y); glEnd(); } glFlush();}void graphy3() //多边形{ glClear(GL_COLOR_BUFFER_BIT); const float r = 0.7; const float hr = r / 2.0; for (int i = 0; i < cnt; i++) { float p1_x, p1_y, p2_x, p2_y, p3_x, p3_y; p1_x = r*sin(i * 2 * PI / cnt); p1_y = r*cos(i * 2 * PI / cnt); p2_x = r*sin((i+1) * 2 * PI / cnt); p2_y = r*cos((i+1) * 2 * PI / cnt); p3_x = hr*sin((i<<1|1) * PI / cnt); p3_y = hr*cos((i<<1|1) * PI / cnt); glBegin(GL_TRIANGLES); //填充 glColor3f(1, 0, 1); glVertex2f(p1_x, p1_y); glVertex2f(p2_x, p2_y); glVertex2f(p3_x, p3_y); glEnd(); glBegin(GL_TRIANGLE_FAN); glColor3f(1, 1, 1); glVertex2f(0, 0); glVertex2f(p1_x, p1_y); glVertex2f(p3_x, p3_y); glVertex2f(p2_x, p2_y); glEnd(); glBegin(GL_LINES); //边界线条 glColor3f(1, 0, 0); glVertex2f(0, 0); glVertex2f(p1_x, p1_y); glVertex2f(0, 0); glVertex2f(p2_x, p2_y); glColor3f(0, 0, 0); glVertex2f(0, 0); glVertex2f(p3_x, p3_y); glVertex2f(p2_x, p2_y); glVertex2f(p1_x, p1_y); glVertex2f(p3_x, p3_y); glVertex2f(p1_x, p1_y); glVertex2f(p3_x, p3_y); glVertex2f(p2_x, p2_y); glEnd(); } glFlush();}void initWindow(int &argc, char *argv[], int width, int height, char *title) //初始化并显示到屏幕中央{ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition((GetSystemMetrics(SM_CXSCREEN) - width) >> 1, (GetSystemMetrics(SM_CYSCREEN) - height) >> 1); //指定窗口位置 glutInitWindowSize(width, height); //指定窗口大小 glutCreateWindow(title); glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); //设置颜色过渡模式,默认为GL_SMOOTH(渐变)}void welcome(){ puts("\n\t说明:\t图案形式选择1:绘制国民党党徽;"); puts("\t\t图案形式不为1,顶点数输入5;绘制共青团团徽!"); puts("\t\t其余绘制花型图案!"); printf("\n请输入图案形式(1:国民党党徽,其余不为1):");}int main(int argc, char *argv[]){ initWindow(argc, argv, 400, 400, "Test2"); welcome(); int op; scanf("%d", &op); if (op == 1) glutDisplayFunc(&graphy1); else { printf("请输入多边形的顶点数(1<n<100): "); while (~scanf("%d", &cnt)) { if (cnt == 5) glutDisplayFunc(&graphy2); else if (cnt > 1 && cnt < 100) glutDisplayFunc(&graphy3); else { printf("您的输入有误,请重新输入:"); continue; } break; } } glutMainLoop(); return 0;}
阅读全文
0 0
- OpenGL国民党党徽、共青团团徽、花型的绘制
- OpenGL 绘制国民党党徽 共青团团徽 花型(可变边的数目)
- 实验二、直线绘制(共青团团徽,绘制国民党党徽,多边形图案)
- 计算机图形学 -- 画线练习,国民党党旗,共青团团旗,花形图案
- WPF绘制党徽(立体效果,Cool)
- 共青团的性质是什么?
- 共青团的奋斗目标是什么?
- OpenGL的数组绘制
- Opengl -- 五角星的绘制
- Opengl -- 五角星的绘制
- opengl点的绘制
- opengl圆环的绘制
- 共青团正式成立的标志是什么?
- 共青团的基本任务是什么?
- [OpenGL]用OpenGL图形的绘制--矩形
- OpenGL中绘制的机场
- OpenGL中SolidCylinder的绘制
- 基于opengl的RoundBox绘制
- mysql 更改数据库字符编码的方法
- 开源分享-桌面版坦克大战
- ubuntu下安装pdo和pdo_mysql扩展
- [agc019c]Fountain Walk
- 第三单元man命令
- OpenGL国民党党徽、共青团团徽、花型的绘制
- 有关Response&Request知识点分析
- Oracle服务一键启动/关闭
- 2017 乌鲁木齐赛区网络赛 Islands(【点强连通问题】【缩点+点强连通分量】)
- 合并排序
- openlayers出现Failed to load resource: net::ERR_UNKNOWN_URL_SCHEME这个问题
- 手机界面设计-1
- process
- 用顺序表插入删除查找学生成绩