前段时间老师布置一作业,我画了一个哆啦A梦,代码如下

#include <Windows.h>
#include <gl\glut.h>
#include <stdio.h>
#include<math.h>#define GLUT_DISABLE_ATEXIT_HACK
#define N 100
const GLfloat tempR = 0.5f;//脸半径
const GLfloat PI = 3.1415926536f;//颜色设置
static GLfloat ColorChoose[5][3] = {{ 0.0, 0.74, 1.0 }, { 1.0, 1.0, 1.0 }, { 1.0, 0.0, 0.0 }, { 0.0, 0.0, 0.0 },{ 1.0, 1.0, 0.0 } };static GLfloat r = 1.0f, g = 1.0f, b = 0.0f;
static GLfloat spin = 0.0;
int fg = 0;
static float x = 400, y = 400;static int FACE_COLOR = 0;//湖蓝色
static int EYE_COLOR = 1;//白色
static int NOSE_COLOR = 2;//红色
static int LINE_COLOR = 3;//黑色
static int LINGDANG_COLOR = 4;//黄色//画脸 0.0, 0.4, 0.4
void face(float x, float y, float radius)
{int count;int sections = 200;GLfloat TWOPI = 2.0f * 3.14159f;//glLineWidth(1.f);glColor3f(ColorChoose[FACE_COLOR][0], ColorChoose[FACE_COLOR][1], ColorChoose[FACE_COLOR][2]);glBegin(GL_TRIANGLE_FAN);glVertex2f(x, y);for (count = 0; count <= sections; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();
}//脸白
void face1(float x, float y, float radius)
{int count;int sections = 200;GLfloat TWOPI = 2.0f * 3.14159f;//glLineWidth(1.f);glColor3f(ColorChoose[EYE_COLOR][0], ColorChoose[EYE_COLOR][1], ColorChoose[EYE_COLOR][2]);glBegin(GL_TRIANGLE_FAN);glVertex2f(x, y);for (count = 0; count <= sections; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();
}//描线
void drawline(float x, float y, float radius)
{int count;int sections = 200;GLfloat TWOPI = 2.0f * 3.14159f;glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINE_STRIP);for (count = 0; count <= sections; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();
}//嘴巴
void mouthhalf(float x, float y, float radius)
{int count;int sections = 200;GLfloat TWOPI = 2.0f * 3.14159f;//glLineWidth(1.f);glColor3f(ColorChoose[NOSE_COLOR][0], ColorChoose[NOSE_COLOR][1], ColorChoose[NOSE_COLOR][2]);glBegin(GL_TRIANGLE_FAN);glVertex2f(x, y);for (count = 100; count <= sections; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();
}//嘴巴描线
void drawlinehalfmouth(float x, float y, float radius)
{int count;int sections = 200;GLfloat TWOPI = 2.0f * 3.14159f;glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);//嘴上那个横线glBegin(GL_LINES);glVertex2f(-0.2, 0.26);glVertex2f(0.2, 0.26);glEnd();//嘴巴半圆绘制,用红色填充glBegin(GL_LINE_STRIP);for (count = 100; count <= sections; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();
}//画眼睛
void eyes(float x, float y, float radius)
{int count;int sections = 200;GLfloat TWOPI = 3.0f * 3.14159f;glColor3f(ColorChoose[EYE_COLOR][0], ColorChoose[EYE_COLOR][1], ColorChoose[EYE_COLOR][2]);glBegin(GL_TRIANGLE_FAN);glVertex2f(x, y);for (count = 0; count <= sections; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();
}//眼珠子
void eyeskernel(float x, float y, float radius)
{//眼珠子int count;int sections = 200;GLfloat TWOPI = 3.0f * 3.14159f;glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_TRIANGLE_FAN);glVertex2f(x, y);for (count = 0; count <= sections; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();
}//画鼻子
void nose(float x, float y, float radius)
{int count;int sections = 200;GLfloat TWOPI = 2.0f * 3.14159f;//glLineWidth(1.f);glColor3f(ColorChoose[NOSE_COLOR][0], ColorChoose[NOSE_COLOR][1], ColorChoose[NOSE_COLOR][2]);glBegin(GL_TRIANGLE_FAN);glVertex2f(x, y);for (count = 0; count <= sections; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();
}//鼻子线+胡子+牙齿
void nosebeard()
{//鼻子线 1条直线//glClear(GL_COLOR_BUFFER_BIT);glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINES);glVertex2f(0.0, 0.47);glVertex2f(0.0, 0.26);glEnd();//胡须 4根glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINES);glVertex2f(-0.07, 0.40);glVertex2f(-0.25, 0.45);glVertex2f(0.07, 0.40);glVertex2f(0.25, 0.45);glVertex2f(-0.07, 0.36);glVertex2f(-0.25, 0.34);glVertex2f(0.07, 0.36);glVertex2f(0.25, 0.34);glEnd();}//装饰物:铃铛
void decorate(float x, float y, float radius)
{int count;int sections = 200;GLfloat TWOPI = 2.0f * 3.14159f;//铃铛glColor3f(r,g,b);glBegin(GL_TRIANGLE_FAN);glVertex2f(x, y);for (count = 0; count <= sections; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();}
//下半圆
void halfdown(float x, float y, float radius)
{int count;int sections = 200;GLfloat TWOPI = 2.0f * 3.14159f;glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINE_STRIP);for (count = 100; count <= sections; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();
}//上半圆
void halfup(float x, float y, float radius)
{int count;int sections = 200;GLfloat TWOPI = 2.0f * 3.14159f;glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINE_STRIP);for (count = 0; count <= sections/2; count++){glVertex2f(x + radius*cos(count*TWOPI / sections), y + radius*sin(count*TWOPI / sections));}glEnd();
}//身体
void body()
{glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);//左边拳头drawline(-0.40, 0.14, 0.08);//左边手臂glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINES);glVertex2f(-0.40,0.07);glVertex2f(-0.28, -0.1);glEnd();//右边拳头drawline(0.32, 0.026, 0.08);//右边手臂glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINES);glVertex2f(0.32, -0.06);glVertex2f(0.23, -0.16);glEnd();//矩形身体glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINES);glVertex2f(-0.28, -0.1);glVertex2f(-0.28, -0.41);glEnd();glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINES);glVertex2f(0.23, -0.16);glVertex2f(0.23, -0.41);glEnd();glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINES);glVertex2f(-0.28, -0.41);glVertex2f(0.23, -0.41);glEnd();//腿子 下半圆halfdown(-0.17, -0.4, 0.12);halfdown(0.12, -0.4, 0.12);//双脚之间//halfup(-0.025, - 0.4,0.02);//包  halfdown(0.0, -0.18, 0.08);glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);//包上那个横线glBegin(GL_LINES);glVertex2f(-0.09, -0.18);glVertex2f(0.09, -0.18);glEnd();//肚皮glBegin(GL_LINES);glVertex2f(-0.15, -0.3);glVertex2f(0.15, -0.3);glVertex2f(-0.15, -0.3);glVertex2f(-0.15, 0);glVertex2f(0.15, -0.3);glVertex2f(0.15, 0);glEnd();//给身体填充颜色glBegin(GL_TRIANGLE_FAN);glColor3f(ColorChoose[FACE_COLOR][0], ColorChoose[FACE_COLOR][1], ColorChoose[FACE_COLOR][2]);glVertex2f(-0.28, -0.40);glVertex2f(0.23, -0.40);glVertex2f(0.23, -0.3);glVertex2f(-0.28, -0.3);glVertex2f(-0.28, -0.40);glEnd();glBegin(GL_TRIANGLE_FAN);glColor3f(ColorChoose[FACE_COLOR][0], ColorChoose[FACE_COLOR][1], ColorChoose[FACE_COLOR][2]);glVertex2f(-0.28, -0.3);glVertex2f(-0.15, -0.3);glVertex2f(-0.15, 0);glVertex2f(-0.28, 0.1);glVertex2f(-0.28, -0.3);glEnd();glBegin(GL_TRIANGLE_FAN);glColor3f(ColorChoose[FACE_COLOR][0], ColorChoose[FACE_COLOR][1], ColorChoose[FACE_COLOR][2]);glVertex2f(0.15, -0.3);glVertex2f(0.23, -0.3);glVertex2f(0.23,0.06);glVertex2f(0.15, 0);glVertex2f(0.15, -0.3);glEnd();glBegin(GL_TRIANGLE_FAN);glColor3f(ColorChoose[FACE_COLOR][0], ColorChoose[FACE_COLOR][1], ColorChoose[FACE_COLOR][2]);glVertex2f(-0.28, -0.1);glVertex2f(-0.28, 0.1);glVertex2f(-0.4, 0.05);glVertex2f(-0.28, -0.1);glEnd();glBegin(GL_TRIANGLE_FAN);glColor3f(ColorChoose[FACE_COLOR][0], ColorChoose[FACE_COLOR][1], ColorChoose[FACE_COLOR][2]);glVertex2f(0.23, -0.16);glVertex2f(0.30, -0.06);glVertex2f(0.23, 0.06);glVertex2f(0.23, -0.16);glEnd();glBegin(GL_TRIANGLE_FAN);glColor3f(ColorChoose[FACE_COLOR][0], ColorChoose[FACE_COLOR][1], ColorChoose[FACE_COLOR][2]);glVertex2f(-0.3, 0.08);glVertex2f(-0.27, 0.1);glVertex2f(-0.32, 0.16);glVertex2f(-0.3, 0.08);glEnd();}//动态变颜色
void time(int v)
{if (r == 1.0f){r = 0.0f;g = 1.0f;}else if (g == 1.0f){g = 0.0f;b = 1.0f;}else{b = 0.0f;r = 1.0f;}if (fg % 2 == 0){fg = 1;x = 390;y = 390;}else{fg = 0;x = 410;y = 410;}glutPostRedisplay();glutTimerFunc(100, time, 1);
}//旋转角度控制
void spinDisplay(int value)
{spin = spin + 6;if (spin > 360.0){spin = spin - 360.0;}glutPostRedisplay();glutTimerFunc(10, spinDisplay, 2);
}//风车绘制
void windcar()
{//风车棒子glLineWidth(3);glColor3f(ColorChoose[LINE_COLOR][0], ColorChoose[LINE_COLOR][1], ColorChoose[LINE_COLOR][2]);glBegin(GL_LINES);glVertex2f(-0.4, 0.2);glVertex2f(-0.6, 0.5);glEnd();glPushMatrix();//把中心给移动了,这我居然还被难住了...glTranslatef(-0.6, 0.5f, 0.0f);glRotatef(spin,0.0, 0.0, 1.0);//glRotatef(spin, 0.0, 1.0, 0.0);glLineWidth(5.0f);glBegin(GL_LINES);glColor3f(1.0, 0.0, 0.0);//glRectf(-0.7, -0.3, 0.7, 0.3);glVertex3f(-0.1, -0.1, 0.0);glVertex3f(0.1, 0.1, 0.0);glColor3f(0.0, 1.0, 0.0);glVertex3f(0, -0.12, 0.0);glVertex3f(0, 0.12, 0.0);glColor3f(0.0, 0.0, 1.0);glVertex3f(0.1, -0.1, 0.0);glVertex3f(-0.1, 0.1, 0.0);glEnd();glPopMatrix();
}void ini()
{glClearColor(0.0f, 0.0f, 0.0f, 0.0f);glMatrixMode(GL_PROJECTION);glShadeModel(GL_FLAT);gluOrtho2D(0.0, 200.0, 0.0, 200.0);
}void display()
{glClearColor(1.0f, 1.0f, 1.0f, 0.0f);glClear(GL_COLOR_BUFFER_BIT);   //用当前背景色填充窗口//画脸 圆形 x,y,rface(0.0, 0.4, 0.4);//脸白色部分face1(0.0, 0.26, 0.3);//给脸描线drawline(0.0, 0.4, 0.4);//脸白部分描线drawline(0.0, 0.26, 0.3);//左眼eyes(-0.10, 0.63, 0.08);//右眼eyes(0.10, 0.63, 0.08);//左眼珠子eyeskernel(-0.06, 0.63, 0.03);//右眼珠子eyeskernel(0.06, 0.63, 0.03);//左右眼描线drawline(-0.10, 0.63, 0.08);drawline(0.10, 0.63, 0.08);//鼻子nose(0.0, 0.53, 0.06);//鼻子描线drawline(0.0, 0.53, 0.06);//嘴巴nosebeard();mouthhalf(0.0, 0.26, 0.2);//嘴巴描线 half!!!drawlinehalfmouth(0.0, 0.26, 0.2);//铃铛decorate(0.0, -0.1, 0.05);//铃铛描线drawline(0.0, -0.1, 0.05);//身子body();//风车windcar();glFlush();
}int main(int argc, char *argv[])
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE| GLUT_DEPTH);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("哆啦A梦");glutDisplayFunc(display);//glutReshapeFunc(reshape);//铃铛变颜色glutTimerFunc(100, time, 1);//风车旋转glutTimerFunc(10, spinDisplay, 2);glutMainLoop();return 0;
}

是一个有动画的但是我不会截取动图,下面有个静态的,填充不规则图元使用三角填充真的是很费时间啊。但是学到了一招下次可以把要搞的东西放在cs6里面应该就可以很好地找出坐标了

opengl绘制卡通人物哆啦A梦相关推荐

  1. html画布动漫人物,canvas画布画卡通人物--哆啦A梦

    #canvas1 {background-color: #5F9EA0;} var can = document.getElementById("canvas1"); var pe ...

  2. PHOTOSHOP绘制卡通人物简单教程

    PHOTOSHOP绘制卡通人物简单教程 一,用路径画出选区. 二,填充路径. 三,分层画出脸上各部位 . 四,按住CRTY点图层一,反选删除多余的部份. 五,用同样的方法用路径勾出身体各部位,填充相应 ...

  3. opengl绘制三维人物luweiqi

    素材中有四个.bmp格式的纹理文件和一个.txt的模型参数文件 文件格式说明: 纹理文件数量纹理文件1(字符串)//.bmp纹理文件2(字符串)纹理文件3(字符串)... 材质数量ambient(fl ...

  4. css+html弄出哆啦a梦,祝儿童节快乐(DIV+CSS绘制哆啦A梦)

    之前看到别人用DIV+CSS绘制大白,就顺手绘制了一个哆啦A梦,刚好昨天蓝胖子3D版上映,借此祝大家儿童节快乐. 效果图: 请在CHROME & FIREFOX查看 HTML [html] [ ...

  5. canvas综合应用绘制哆啦A梦

    HTML5中canvas元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.通过这一元素,我们可以在画布上画出各种图形,线条,矩形,圆形,椭圆,字体,渐变等,当然可以自己设计组合绘制自 ...

  6. 用python画哆啦a梦的身体_用Python画一个哆啦A梦

    Python自带的turtle海龟绘图库功能十分强大,使用起来也很简单方便,今天我们就使用海龟绘图画一个我们都很喜欢的卡通形象-哆啦A梦头像.我们将整个头像分为几个部分分别定义相关的绘制函数,下面分别 ...

  7. 《Turtle绘图》Python用Turtle库绘制多啦爱梦、小猪佩奇、皮卡丘等卡通人物

    声明 本文仅在CSDN发布,未经允许请勿转载或引用! 本文链接:https://blog.csdn.net/meenr/article/details/107245170 目录 利用Turtle库绘制 ...

  8. CSS画卡通人物:哆啦A梦

    哆啦A梦 HTML代码块 <!DOCTYPE html> <html><head><meta charset="utf-8" />& ...

  9. OpenGL初探:二维卡通人物交互设计

    使用OpenGL实现基于鼠标交互的卡通人物和其它环境物体的设计与绘制.使用颜色填充与反走样技术对卡通人物外貌以及衣着进行绘制.实现对卡通人物或物体轮廓的交互控制,点击鼠标左键可以对人物或者物体进行拖拽 ...

最新文章

  1. android 代码设置alignleft,如何动态的设置Relative Layout中按钮的layout_align_parent_right属性...
  2. linux基础命令练习,Linux常用命令练习
  3. 简单介绍Kubernetes
  4. autocad2014 菜单栏 闪退_AutoCAD2014闪退的原因与处理办法 1打开就闪退怎样办
  5. python discuz搜索api_Django用内置方法实现简单搜索功能的方法
  6. CSS多行文本溢出省略号...显示设置
  7. 深入理解 Javascript 面向对象编程
  8. 163企业邮箱 端口服务器,163企业邮箱端口
  9. vue省市区遍历数据
  10. android支付宝运动修改器,一键修改支付宝运动步数-修改支付宝运动步数工具下载不要root手机版-西西软件下载...
  11. mysql 日历表_mysql创建日历表
  12. 人生如游戏,容错性很关键
  13. java移位加密_凯撒加密解密(java字母移位)
  14. 源码看JAVA【五】Byte
  15. 盘点:2017科技改变你我
  16. Tandem Repeats Finder:串联重复序列查找工具
  17. linux下磁盘坏道修复
  18. 赞!原来还有这些免费图片下载网站(内附部分爬虫代码)
  19. 跳转到指定的邮箱登录页面
  20. 11--字符流缓冲区编码表

热门文章

  1. 空气净化器的研究概况
  2. 深度学习与自然语言处理(5)_斯坦福cs224d 大作业测验2与解答
  3. 阿里云认证攻略,考试注意事项
  4. 云从科技 OCR任务 pixel-anchor 方法
  5. HTTP状态码完整介绍
  6. cors nginx 怎么解决_NGINX配置跨域CORS支持的正确方式
  7. TypeError: ctor is not a constructor报错
  8. kswapd线程的前世今生
  9. 我吐了72行金色爱心代码(༗清ཻ辞ཻ࿐入门原创)———永远清楚,不是只有你一个人在努力
  10. 如何证明根号3是无理数?------顺便说下希帕索斯和第一次数学危机