OpenGl绘制了一个雪人

请添加图片描述


#include <GL/glut.h>
#include <math.h>const int n = 1000;
int q;  //圆的半径
int m, p;//圆心
const GLfloat R = 0.5f;
const GLfloat Pi = 3.1415926536f;//初始化OpenGL
void init(void)
{glClearColor(0.0f, 0.0f, 0.0f, 0.0f);//设置背景颜色glShadeModel(GL_FLAT);//设置明暗处理
}//画空心圆
void DrawCircle()
{int i;glBegin(GL_LINE_LOOP);for (i = 0; i < n; ++i)glVertex2f(m + q * cos(2 * Pi / n * i), p + q * sin(2 * Pi / n * i));glEnd();glFlush();
}//画实心圆(雪人头)
void DrawCirclet1()
{glColor3f(1.0f, 0.0f, 0.0f);//设置颜色为红色GLfloat x, y, z, angle;z = 0.0f;glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINES);for (angle = 0.0f; angle <= Pi; angle += (Pi / 1000000.0f)){x = 610 + 110.0f * sin(angle);y = 460 + 110.0f * cos(angle);glVertex3f(x, y, z);x = 610 + 110.0f * sin(angle + Pi);y = 460 + 110.0f * cos(angle + Pi);glVertex3f(x, y, z);}
}
//画实心圆(雪人身)
void DrawCirclet2()
{glColor3f(1.0f, 0.0f, 0.0f);GLfloat x, y, z, angle;z = 0.0f;glColor3f(1.0, 1.0, 1.0); //设置颜色为白色glBegin(GL_LINES);for (angle = 0.0f; angle <= Pi; angle += (Pi / 1000000.0f)){x = 610 + 170.0f * sin(angle);y = 170 + 200.0f * cos(angle);glVertex3f(x, y, z);x = 610 + 170.0f * sin(angle + Pi);y = 170 + 200.0f * cos(angle + Pi);glVertex3f(x, y, z);}glEnd();
}
//画实心圆(左眼)
void DrawCirclet3()
{glColor3f(1.0f, 0.0f, 0.0f);GLfloat x, y, z, angle;z = 0.0f;glColor3f(0.0, 0.0, 0.0); //设置颜色为黑色glBegin(GL_LINES);for (angle = 0.0f; angle <= Pi; angle += (Pi / 1000000.0f)){x = 580 + 10.0f * sin(angle);y = 480 + 10.0f * cos(angle);glVertex3f(x, y, z);x = 580 + 10.0f * sin(angle + Pi);y = 480 + 10.0f * cos(angle + Pi);glVertex3f(x, y, z);}glEnd();
}
//画实心圆(右眼)
void DrawCirclet4()
{glColor3f(1.0f, 0.0f, 0.0f);GLfloat x, y, z, angle;z = 0.0f;glColor3f(0.0, 0.0, 0.0); //设置颜色为黑色glBegin(GL_LINES);for (angle = 0.0f; angle <= Pi; angle += (Pi / 1000000.0f)){x = 640 + 10.0f * sin(angle);y = 480 + 10.0f * cos(angle);glVertex3f(x, y, z);x = 640 + 10.0f * sin(angle + Pi);y = 480 + 10.0f * cos(angle + Pi);glVertex3f(x, y, z);}glEnd();
}//主要的绘制过程
void display(void)
{glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓存/*glBegin(GL_LINES);//开始画直线glColor3f(1.0f, 1.0f, 1.0f);//设置颜色为白色glVertex2f(30.0f, 30.0f);//第一根线的两个端点glVertex2f(200.0f, 400.0f);glColor3f(1.0f, 0.0f, 0.0f);//设置第二根线的颜色为红色glVertex2f(25.0f, 350.0f);//第二根线的两个端点glVertex2f(250.0f, 50.0f);glEnd();//画线结束glBegin(GL_TRIANGLES);//开始画三角形,注意,没有设颜色,所以还是红色glColor3f(1.0f, 0.2f, 0.2f);glVertex2f(400.0f, 100.0f);//三角形的三个顶点glVertex2f(600.0f, 100.0f);glVertex2f(500.0f, 300.0f);glEnd();//结束画三角形glFlush();//开始绘制*///画四角星	glBegin(GL_LINE_LOOP);glColor3f(1.0f, 0.2f, 0.2f);glVertex3f(50, 50, 0.0);glVertex3f(75, 60, 0.0);glVertex3f(100, 50, 0.0);glVertex3f(90, 75, 0.0);glVertex3f(100, 100, 0.0);glVertex3f(75, 90, 0.0);glVertex3f(50, 100, 0.0);glVertex3f(60, 75, 0.0);glEnd();//棒棒glColor3f(1.0f, 1.0f, 0.0f);glRectf(295.0f, 350.0f, 305.0f, 150.0f);//棒棒糖glColor3f(1.0f, 0.2f, 0.2f);//设置颜色为粉色q = 5;m = 300;p = 400;for (int i = 1; i < 11; i++){q = q + 5;DrawCircle();}glColor3f(1.0f, 1.0f, 1.0f);//设置颜色为白色//画雪人头DrawCirclet1();//画雪人身DrawCirclet2();//左眼DrawCirclet3();//右眼DrawCirclet4();glFlush();//开始绘制//鼻子glBegin(GL_TRIANGLES);//开始画三角形,注意,没有设颜色,所以还是红色glColor3f(1.0f, 0.0f, 0.0f);glVertex2f(620.0f, 420.0f);//三角形的三个顶点glVertex2f(570.0f, 420.0f);glVertex2f(610.0f, 440.0f);glEnd();//结束画三角形glFlush();//开始绘制}//在窗口改变大小时调用
void reshape(int width, int height)
{glViewport(0, 0, width, height);//设置视口glMatrixMode(GL_PROJECTION);//设置当前为投影变换模式glLoadIdentity();//用单位矩阵替换当前变换矩阵gluOrtho2D(0.0, width, 0.0, height);//设置正交投影视图体
}//处理键盘
void keyboard(unsigned char key, int x, int y)
{//switch (key)//{//case 27://esc键退出//	exit(0);//	break;//default://	break;//}
}//主函数
int main(int argc, char** argv)
{glutInit(&argc, argv);//初始化glutglutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//设置为单缓存,RGB模式glutInitWindowSize(900, 600); //设置窗口大小glutInitWindowPosition(230, 80);//设置窗口起始位置glutCreateWindow("Basic");//设置窗口标题init();//初始化OpenGLglutDisplayFunc(display);//设置显示回调函数 glutReshapeFunc(reshape);//设置reshape回调函数glutKeyboardFunc(keyboard);//设置键盘回调函数glutMainLoop();//进入主循环return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/9749.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Golang进阶

1.面向对象 1.1.golang语言面向对象编程说明 Golang 也支持面向对象编程(OOP)&#xff0c;但是和传统的面向对象编程有区别&#xff0c;并不是纯粹的面向对象语言。所以我们说 Golang 支持面向对象编程特性是比较准确的。Golang 没有类(class)&#xff0c;Go 语言的结构体(st…

kafka面试夺命连环三十问(上篇)

1、kafka消息发送的流程&#xff1f; 在消息发送的过程中&#xff0c;涉及到两个线程--main线程和sender线程。在main线程中创建了一个双端队列RecordAccumulator。main线程将消息发送给RecordAccumulator&#xff0c;然后sender线程不断从双端队列RecordAccumulator 拉取消息发…

【linux】再谈网络基础(二)

8. 再谈端口号 &#xff08;一&#xff09;与协议之间的关系 端口号(Port)标识了一个主机上进行通信的不同的应用程序 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识…

关键词策略的有效运用提升内容价值和搜索排名的关键

内容概要 在当今的数字时代&#xff0c;关键词策略是确保内容创作成功的重要基础。无论是个人博客还是商业网站&#xff0c;合适的关键词不仅能够提升文章的可见性&#xff0c;还能显著影响搜索引擎的排名。合理运用关键词&#xff0c;有助于吸引目标读者&#xff0c;将他们引…

1.62亿元!812个项目立项!上海市2024年度“科技创新行动计划”自然科学基金项目立项

本期精选SCI&EI ●IEEE 1区TOP 计算机类&#xff08;含CCF&#xff09;&#xff1b; ●EI快刊&#xff1a;最快1周录用&#xff01; 知网(CNKI)、谷歌学术期刊 ●7天录用-检索&#xff08;100%录用&#xff09;&#xff0c;1周上线&#xff1b; 免费稿件评估 免费匹配期…

【Ant Design Pro】不想用轻量的hook就喜欢用dva的数据状态管理

就像TS是JS的超集一样&#xff0c;antdpro框架也类似&#xff0c;底层也是用dva来构建的。关于数据管理&#xff0c;官方还是建议我们使用轻量的hooks方法来进行操作使用。 使用dva实现数据状态管理效果 框架中的数据管理模式 简单的数据共享 对于简单的应用&#xff0c;不需…

requestAnimationFrame与setInterval的抉择

&#x1f64c; 如文章有误&#xff0c;恳请评论区指正&#xff0c;谢谢&#xff01; ❤ 写作不易&#xff0c;「点赞」「收藏」「转发」 谢谢支持&#xff01; 背景 在之前的业务中遇到有 JS 动画的实现场景&#xff0c;但当电脑打开太多网页或是同时启动很多应用时&#xff0c…

【C++练习】使用海伦公式计算三角形面积

编写并调试一个计算三角形面积的程序 要求&#xff1a; 使用海伦公式&#xff08;Herons Formula&#xff09;来计算三角形的面积。程序需要从用户那里输入三角形的三边长&#xff08;实数类型&#xff09;。输出计算得到的三角形面积&#xff0c;结果保留默认精度。提示用户…

附件商户,用户签到,uv统计功能(geo,bitmap,hyperloglog结构的使用)

目录 附近商户一&#xff1a;Geo数据结构二&#xff1a;附近商户搜索 用户签到一&#xff1a;BitMap功能演示二&#xff1a;实现签到功能三&#xff1a;统计签到功能 uv统计一&#xff1a;hyperloglog的用法二&#xff1a;测试百万数据的tji二&#xff1a;测试百万数据的tji 附…

【LuatOS】修改LuatOS源码为PC模拟器添加高精度时间戳库timeplus

0x00 缘起 LuatOS以及Lua能够提供微秒或者毫秒的时间戳获取工具&#xff0c;但并没有提供获取纳秒的工具。通过编辑LuatOS源码以及相关BSP源码&#xff0c;添加能够获取纳秒的timeplus库并重新编译&#xff0c;以解决在64位Windows操作系统中LuatOS模拟器获取纳秒的问题&#…

[Python学习日记-64] 组合

[Python学习日记-64] 组合 简介 继承与组合 组合的使用 简介 继承其实就是生活当中的归类&#xff0c;就是把对象之间的共同特征再一次提炼&#xff0c;然后形成一个类&#xff0c;但是在实际的开发当中不单单只有归类这一个动作&#xff0c;对象与对象之间都会有一些关系&a…

关于stm32中IO映射的一些问题

在STM32固件库&#xff08;比如HAL或LL库&#xff09;中&#xff0c;GPIO的寄存器映射已经定义好了&#xff0c;开发者可以通过标准的读写操作访问GPIO引脚的状态。 一、我们可以直接通过位移操作来修改特定值。 二、下面我们提供另一种方法&#xff0c;位带操作 首先要定义一…

Python游戏开发之《人机大战象棋》-附完整源码-python教程

今天给大家带来的是人机大战的象棋 中国象棋 首先绘制一下棋盘&#xff0c;看看样子&#xff1a; 黑白经典款 绘制棋盘&#xff1a; class Board(QLabel):棋盘坐标与屏幕坐标类似&#xff0c;左上角为 (0, 0)&#xff0c;右下角为 (8, 9)BOARD str(dirpath / u"images…

AutoCAD2014

链接: https://pan.baidu.com/s/1Q4fhVmiSYDZ2DbPNi7m4cA 提取码: f3bm

免费送源码:Java+ssm+MySQL 在线购票影城 计算机毕业设计原创定制

摘要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设在线购票影城。 本设计…

MYSQL——事务管理

什么是事务 在数据库使用者角度&#xff0c;事务就是完成一个事件。例如一个员工信息数据库&#xff0c;要完成员工离职的事件&#xff0c;可能需要很多操作&#xff0c;比如删除员工基本信息以及员工在公司的表现&#xff0c;薪资水平等。而这一系列的操作就是为了完成员工离…

书生实战营第四期-基础岛第四关-InternLM + LlamaIndex RAG 实践

一、任务要求1 基于 LlamaIndex 构建自己的 RAG 知识库&#xff0c;寻找一个问题 A 在使用 LlamaIndex 之前 浦语 API 不会回答&#xff0c;借助 LlamaIndex 后 浦语 API 具备回答 A 的能力&#xff0c;截图保存。 1、配置开发机系统 镜像&#xff1a;使用 Cuda12.0-conda 镜…

LC:二分查找——杂记

文章目录 268. 丢失的数字162. 寻找峰值 268. 丢失的数字 LC将此题归类为二分查找&#xff0c;并且为简单题&#xff0c;下面记一下自己对这道题目的思考。 题目链接&#xff1a;268.丢失的数字 第一次看到这个题目&#xff0c;虽然标注的为简单&#xff0c;但肯定不能直接排…

推荐一款国产数据库管理工具Chat2DB

什么是 Chat2DB ? Chat2DB 是一款专为现代数据驱动型企业打造的数据库管理、数据开发及数据分析工具。作为一款AI原生的产品&#xff0c;Chat2DB 将人工智能技术与传统数据库管理功能深度融合&#xff0c;旨在提供更为智能、便捷的工作体验&#xff0c;助力用户高效地管理数据…

前端三件套(HTML + CSS + JS)

前言&#xff1a; 前端三件套&#xff0c;会用就行 毕竟在后面学习JavaWeb&#xff0c;以及在学习vue的时候也有帮助 前端三件套&#xff1a; HTML 定义网页的结构和内容。CSS 负责网页的样式和布局。JavaScript 添加动态交互和功能。 使用到的工具是Visual Studio Code 即…