计算机图形学-1-小试牛刀

简介: 这段代码使用 OpenGL 和 GLUT 库创建了一个简单的图形窗口,展示了多个几何形状。首先清屏并设置背景为黑色,然后绘制一个白色矩形和一个彩色大三角形。接着绘制三个不同颜色的点,并计算大三角形的中点,绘制一个小三角形。最后,再次计算小三角形的中点,绘制一个更小的三角形。通过 `glutDisplayFunc` 注册显示回调函数 `myDisplay`,并在 `glutMainLoop` 中进入事件处理循环。

include

void myDisplay(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);// 设置清空屏幕时的颜色为黑色
glClear(GL_COLOR_BUFFER_BIT);// 清除颜色缓冲区,以便重新绘制

glColor3f(1.0f, 1.0f, 1.0f);// 设置绘制颜色为白色
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);//绘制一个填充的矩形,范围从(-0.5, -0.5) 到(0.5, 0.5)

glBegin(GL_TRIANGLES);//大三角
glColor3f(1.0f, 0.0f, 0.0f);   glVertex2f(0.0f, 1.0f);//x 坐标:0.0f 表示这个点在 x 轴上位于原点(中心线)。y 坐标:1.0f 表示这个点在 y 轴上位于正方向的 1 处。视口范围是从 - 1 到 1
glColor3f(0.0f, 1.0f, 0.0f);   glVertex2f(0.8f, -0.5f);
glColor3f(0.0f, 0.0f, 1.0f);   glVertex2f(-0.8f, -0.5f);
glEnd();

glPointSize(3);//设置绘制点的大小为 3
glBegin(GL_POINTS);
glColor3f(1.0f, 0.0f, 0.0f);   glVertex2f(-0.4f, -0.4f);
glColor3f(0.0f, 1.0f, 0.0f);   glVertex2f(0.0f, 0.0f);
glColor3f(0.0f, 0.0f, 1.0f);   glVertex2f(0.4f, 0.4f);
glEnd();

// 计算中点
float Ax = 0.0f, Ay = 1.0f;        // A
float Bx = 0.8f, By = -0.5f;       // B
float Cx = -0.8f, Cy = -0.5f;      // C

float ABx = (Ax + Bx) / 2;         // AB 中点
float ABy = (Ay + By) / 2;

float BCx = (Bx + Cx) / 2; 
float BCy = (By + Cy) / 2;

float CAx = (Cx + Ax) / 2;     
float CAy = (Cy + Ay) / 2;

// 绘制小三角形
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 1.0f, 0.0f);   // 选择颜色
glVertex2f(ABx, ABy);         // 中点 AB
glVertex2f(BCx, BCy);       
glVertex2f(CAx, CAy);        
glEnd();

// 计算
float ABx2 = (ABx + BCx) / 2;     // 小三角形 AB 中点
float ABy2 = (ABy + BCy) / 2;

float BCx2 = (BCx + CAx) / 2;     
float BCy2 = (BCy + CAy) / 2;

float CAx2 = (CAx + ABx) / 2;     
float CAy2 = (CAy + ABy) / 2;

// 绘制小小三角形
glBegin(GL_TRIANGLES);
glColor3f(0.0f, 1.0f, 1.0f);   // 选择颜色
glVertex2f(ABx2, ABy2);       // 中点 AB
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(BCx2, BCy2);      
glColor3f(0.0f, 0.0f, 1.0f);
glVertex2f(CAx2, CAy2);      
glEnd();

glFlush();

}

int main(int argc, char* argv[]) // 主函数
{
glutInit(&argc, argv); // 初始化 GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); // 设置显示模式为 RGB 和单缓冲
glutInitWindowPosition(100, 100); // 设置窗口初始位置
glutInitWindowSize(400, 400); // 设置窗口大小为 400x400 像素
glutCreateWindow("Hello World!"); // 创建窗口并设置标题
glutDisplayFunc(&myDisplay); // 注册显示回调函数
glutMainLoop(); // 进入 GLUT 事件处理循环
return 0; // 返回 0,程序结束
}

相关文章
|
存储 数据库 Python
怎么解决字符乱码的问题
怎么解决字符乱码的问题
1936 0
|
1月前
|
传感器 运维 安全
数字孪生 + AR 巡检:在虚拟世界里 "预演" 一次巡检
在电力、石化等重资产行业,数字孪生+AR巡检实现“虚拟预演→现场执行”新模式:1:1映射物理厂区,支持路径规划、流程验证与应急推演;提升缺陷识别率至98%,缩短巡检时间50%以上,降低意外故障率70%,加速新人培养60%。安全、效率、成本、知识传承全面升级。(239字)
|
5月前
|
人工智能 运维 自然语言处理
2026年阿里云部署OpenClaw(Clawdbot)及Skills全场景应用指南
在AI智能体技术深度落地的2026年,OpenClaw(原Clawdbot,曾用名Moltbot)凭借大模型+技能插件的组合模式,打破了传统AI仅能语言交互的局限,成为个人办公提效、企业轻量协作的核心工具。而阿里云轻量应用服务器推出的OpenClaw专属一键部署方案,将原本繁琐的环境配置、依赖安装流程高度简化,让零基础用户也能快速搭建属于自己的AI自动化助手。本文将基于阿里云2026年最新部署方案,完整覆盖OpenClaw快速部署、默认Skills实战、新技能安装配置及故障排查全流程,嵌入可直接复用的代码命令,同时新增极简部署步骤速查,帮助用户高效解锁OpenClaw+Skills的全量能力。
488 1
|
11月前
|
消息中间件 网络性能优化
了解MQ
消息堆积处理核心在于平衡生产与消费速度,可通过限流生产、优化消费者处理能力及异步机制缓解。RabbitMQ通过持久化、确认机制保障消息可靠性,MQTT则依赖QoS等级确保传输。延迟消息常用死信队列实现,而幂等性可通过唯一ID避免重复消费。MQ广泛用于异步处理、系统解耦及分布式事务等场景。
|
6月前
|
人工智能 监控 机器人
快递企业AI客服机器人方案:查询分流+异常处理+赔付口径统一
合力亿捷基于自研MPaaS智能体平台,打造快递物流AI客服体系:实现80%高频查询自动分流、异常件智能协同处置、赔付口径统一与全量质检,深度打通TMS/CRM系统,提升人效20%,降本55%。
|
8月前
|
运维 监控 安全
从零到上线:去中心化合约开发测试与部署清单
本清单聚焦“从编写到上线的去中心化合约”全流程,涵盖目标映射、预置条件、分步操作与验收标准,通过测试覆盖、可追溯部署、监控告警三大验收结果确保低风险上线。适配治理、跨链等场景,提供模板化输入输出、阶段复用策略,并联动实操案例与路线图,实现可复制、可审计的高效落地。
|
10月前
|
人工智能 Cloud Native 中间件
【云栖大会】AI原生、AI可观测、AI Serverless、AI中间件,4场论坛20+议题公布!
2025 年 9 月 24 日至 26 日,杭州·云栖小镇,4 大论坛、20+ 主题分享,从云原生到 AI 原生,我们诚邀您共赴企业智能化升级浪潮之巅。
|
机器学习/深度学习 算法 算法框架/工具
埃式质数筛及性质
【10月更文挑战第8天】本文介绍质数,或素数,指大于1且仅能被1和自身整除的自然数。它们在数学中有独特地位,如算术基本定理指出任何大于1的自然数可唯一分解为质数乘积。质数的寻找方法多样,包括试除法、埃拉托斯特尼筛法等,后者通过筛除合数高效找出质数。质数在密码学中尤为重要,如RSA加密算法依赖大质数的乘积安全性。此外,还有多种算法和理论,如欧拉筛法、费马小定理、梅森质数等,丰富了质数的研究领域。
1007 2
|
数据采集 DataWorks 大数据
数据开发平台/工具对比测评:
数据开发平台/工具对比测评
603 23

热门文章

最新文章