计算机图形学-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,程序结束
}

相关文章
掌握销售之道:深入学习ERP系统的销售与客户关系管理模块
掌握销售之道:深入学习ERP系统的销售与客户关系管理模块
979 8
|
存储 SpringCloudAlibaba Java
Seata分布式事务实战 1
Seata分布式事务实战
316 0
|
人工智能 自然语言处理 安全
DALL·E 介绍
【10月更文挑战第9天】
1881 2
|
机器学习/深度学习 自然语言处理 数据处理
《量子机器学习:构建量子版神经网络模型》
量子计算与机器学习的融合带来了新机遇。量子卷积神经网络利用量子比特的叠加和纠缠特性,高效处理大规模数据,提升特征提取速度与泛化能力。量子循环神经网络则擅长处理复杂序列数据,通过量子比特状态传递信息,增强计算效率。设计量子神经网络需考虑量子比特选择、状态、操作及网络结构,尽管面临外界干扰等挑战,该模型在图像识别、语音识别等领域展现巨大潜力,未来将推动更多创新。
348 7
|
设计模式 API C#
C# 一分钟浅谈:GraphQL 服务器端实现
本文通过C#语言从零开始构建一个简单的GraphQL服务器端实现,介绍了环境准备、项目创建、定义Schema、配置GraphQL等步骤。同时,探讨了常见问题如数据源问题、类型定义不一致、性能问题和权限控制,提供了相应的解决方法。希望帮助读者更好地理解和应用GraphQL。
195 3
|
缓存 NoSQL Redis
go-zero微服务实战系列(七、请求量这么高该如何优化)
go-zero微服务实战系列(七、请求量这么高该如何优化)
|
自然语言处理 Rust 搜索推荐
elasticsearch简介
elasticsearch简介
246 0
|
机器学习/深度学习 人工智能 前端开发
WebAssembly:浏览器中的新语言,引领Web性能革命
【6月更文挑战第12天】WebAssembly,简称Wasm,是浏览器中的新语言,旨在带来近乎原生的性能,引领Web性能革命。它具有高效、可移植、安全和多语言支持的特点,适用于游戏开发、图形处理、计算机视觉等领域。随着浏览器支持增强,Wasm将在跨平台应用、AI、机器学习、云计算和边缘计算中发挥更大作用,推动Web应用的发展。
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的自习室座位管理系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的自习室座位管理系统附带文章和源代码部署视频讲解等
182 0
基于ssm+vue.js+uniapp小程序的自习室座位管理系统附带文章和源代码部署视频讲解等
|
Java 编译器
多线程(锁升级, 锁消除, 锁粗化)
多线程(锁升级, 锁消除, 锁粗化)
193 1

热门文章

最新文章