news 2026/6/20 22:14:08

基于 C++ OpenGL框架实现小桌模型绘制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 C++ OpenGL框架实现小桌模型绘制

实验目的和要求

在OpenGL编程基础上,通过实现实验内容,掌握OpenGL的矩阵使用,并验证课程中矩阵变换的内容。

实验内容和原理

使用Visual Studio C++编译已有项目工程,并修改代码生成以下图形(参考示例答案):

其中最左边的桌子循环上移(即匀速上移到一定位置后回到原点继续匀速上移),中间的桌子不断旋转,最右边的桌子循环缩小(即不断缩小到一定大小后回归原来大小继续缩小)。

桌子的模型尺寸如下:

主要仪器设备

Visual Studio C++

Ex2 工程

操作方法和实验步骤

绘制桌子

桌子是一个组合几何体,我们从绘制一个六面体开始。比如画一个桌子腿。

首先考虑到后续要组合多个图形并且要做矩阵变换,用glPushMatrix和glPopMatrix函数,对栈顶矩阵进行处理。对于矩阵的操作都是对于矩阵栈的栈顶来操作的。当前矩阵即为矩阵栈的栈顶元素,而对当前矩阵进行平移、旋转等的变换操作也同样是对栈顶矩阵的修改。所以我们在变换之前调用glPushMatrix()的话,就会把当前状态压入第二层,不过此时栈顶的矩阵也与第二层的相同。当经过一系列的变换后,栈顶矩阵被修改,此时调用glPopMatrix()时,栈顶矩阵被弹出,且又会恢复为原来的状态。

glScalef函数对于所要绘制图形的尺寸缩放做了说明,glutSolidCube函数可以画出一个实心的正方体,在前面缩放函数的限制下就会变成相应比例的直六面体。经过实际的观察,我认为边长为0.25比较符合视觉效果。

最后是组合的画出来一个桌子。

矩阵变换

关于几何变换部分的代码写在redraw函数中。首先把多边形显示模式的注释去掉,变成线框显示形式。平移与旋转的部分已经写好,将绘制部分换成前面写好的画桌子函数就可以了。

在写缩放部分之前先将缩放比例系数fScale定义为全局变量,初始化为1.0f(原始大小)。

下面完善变换函数:

对称地在右边画一个桌子,然后根据比例进行缩放,每次缩放比例减小0.0005,当缩放比例小于0.1的时候,恢复为原大小,循环进行。同时在这一步,把每次变化的系数都变小了,这样整个变化的过程更加明显,速度也会变慢,看起来没那么难受了。

实验数据记录和处理

(略)

实验结果与分析

实心效果:

线框效果:

讨论、心得

1.关于线框效果

源文件中给出的方法是glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

也可以在绘制的时候直接使用glutWireCube函数来画线框立方体。效果一样。

2.reshape函数中的一些重点函数的学习和了解

glViewport(GLint x,GLint y,GLsizei width,GLsizei height):x,y 以像素为单位,指定了视口的左下角位置。width,height 表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。

glMatrixMode(GLenum mode):用于指定用哪个矩阵作为当前矩阵,mode用于指定哪一种矩阵栈是其后矩阵操作的目标。mode可取:GL_MODELVIEW: 把其后的矩阵操作施加于造型视图矩阵栈;GL_PROJECTION: 把其后的矩阵操作施加于投影矩阵栈。;GL_TEXTURE: 把其后的矩阵操作施加于纹理矩阵栈。

glLoadIdentity(void):恢复初始坐标系。

gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar):fovy:视角的大小,如果设置为0,什么也看不到,如果为180,则为广角视野;aspect:实际窗口的纵横比;zNear:近处裁面;zFar:远处裁面。整体呈现一种透视效果。

♻️ 资源

大小:442KB

➡️资源下载:https://download.csdn.net/download/s1t16/87404320

注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 2:56:44

从理论到实践:Node-RED性能优化的完整案例解析

在物联网和自动化领域,Node-RED以其直观的可视化编程界面赢得了众多开发者的青睐。然而,许多用户在实际应用中都会遇到一个共同的问题:为什么我的Node-RED流程看起来逻辑清晰,运行起来却异常缓慢? 为什么你的Node-RED…

作者头像 李华
网站建设 2026/6/18 0:08:41

亲测好用10个降AIGC工具 千笔AI帮你高效降AI率

AI降重工具的崛起与实用价值 在当前学术写作日益依赖AI生成内容的背景下,越来越多的学生和研究者开始关注如何有效降低AIGC率、去除AI痕迹,同时保持文章的逻辑性和语义通顺。这不仅关乎论文通过查重系统的标准,更直接影响到学术诚信和论文质…

作者头像 李华
网站建设 2026/6/17 15:09:49

基于深度学习YOLOv10的辣椒叶片病害检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)

一、项目介绍 项目摘要 本项目基于YOLOv10目标检测算法,开发了一个针对辣椒叶片病害的智能检测系统。系统能够自动识别并分类5种常见的辣椒叶片状态,包括健康叶片和4种病害类型(黄单胞菌病、花叶病、尾孢菌病和卷叶病)。通过深度…

作者头像 李华
网站建设 2026/6/18 14:03:10

基于深度学习的水果品种分类检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)

一、项目介绍 摘要 水果品种的精准识别在农产品分级、智能零售和自动化分拣等领域具有重要应用价值。本研究开发了一种基于YOLOv10的高精度水果品种实时检测系统,可实现对6类常见水果品种(金冠苹果、澳洲青苹果、梨子、红富士苹果、红油桃、黄桃&#…

作者头像 李华
网站建设 2026/6/18 18:52:00

计算机毕业设计之基于.NET技术的吉他音乐社区系统的设计与实现

快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,然后线上管理系统也就相继涌现。与此同时,人们开始接受方便的生活方式…

作者头像 李华
网站建设 2026/6/18 18:52:20

语言数据类型的简明教程的20个例子

文章目录 关键概念总结: 1. 整数类型 2. 浮点类型 3. 字符类型 4. 特殊类型 5. 重要头文件 6. 字面量后缀 7. 格式说明符 以下是一个C语言数据类型的简明教程,包含20个代码示例: #include <stdio.h> #include <stdbool.h> #include <limits.h> #include &…

作者头像 李华