> # ♻️ 资源
> **大小:** 82.5MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010591**](https://www.yuque.com/sxbn/ks/100010591)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87404316**](https://download.csdn.net/download/s1t16/87404316)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 1.简答
(1)你选修计算机图形学课程,想得到的是什么知识?现在课程结束,对于所得的知识是否满意?如果不满意,你准备如何寻找自己需要的知识。
答:之前选修计算机图形学是出于对游戏渲染方面的兴趣,像是各种材质布料的仿真、水面云层之类的模拟、光线追踪效果的实现等。想了解如何将现实生活中的物理现象用图形学的知识在电脑上渲染出来,以上是我选这门课程的原因。对于课程我很满意,老师的讲解很清晰易懂,PPT 上的知识点都比较基础,适合从零开始,让我获益匪浅。不过在涉及到一些数学公式的时候由于自身数学基础不太牢固,也有仍然不太清晰的地方,在课程后会选择自己感兴趣的方向看一些博客文献加深了解。
(2)你对计算机图形学课程中的哪一个部分的内容最感兴趣,请叙述一下,并谈谈你现在的认识。
答:目前对光照仿真感兴趣。光在日常生活中有很多形态,观察点、距离、观察物体的形状和材质、光源和物体的位置、光照的强度等等这些因素都会造成物体的不同呈现。而要通过计算机图形学去仿真光照变化,就要将这些都考虑进去。我们在 opengl 可以通过设置光源和观察物体的材质来营造光照的效果。比如环境光表示其它光线照射到该材质上,经过多次反射后留在环境中的光线颜色(强度);漫反射光表示其它光线照射到该材质上,经过漫反射后形成的光线颜色(强度);镜面反射光表示其它光线照射到该材质上,经过镜面反射后形成的光线颜色(强度);辐射光则是材质本身散发的光颜色(强度)。以及还有镜面指数,影响材质的粗糙光滑度,该值越大,表示材质越类似于镜面,光源照射到上面后,会产生较小的亮点。这些属性的定义就可以比较完整的定义出一个物体的被光照到后渲染的情况。在这次实验中也实践用于各个天体之间光照关系。
(3)你对计算机图形学课程的内容,教学方法有什么看法和建议。
答:我认为老师讲的很好,除了知识点外还有很多模型和动图做辅助,学习起来并不枯燥。因为老师的内容整体偏基础,包括一些基础的图形变换以及光照和纹理处理。由于是补选的课所以前两节课没有听到,我的一点点建议是:希望老师也许可以在有空时讲一些当前图形学前沿的方向和技术、图形学的各种分支、与其它信息技术的结合应用等等,也许可以引起同学们更大的学习兴趣。
# 2.实验内容
利用 OpenGL 框架,设计一个日地月运动模型动画。
- 运动关系正确,相对速度合理,且地球绕太阳,月亮绕地球的轨道不能在一个平面内。
- 地球绕太阳,月亮绕地球可以使用简单圆或者椭圆轨道。
- 对球体纹理的处理,至少地球应该有纹理贴图。
- 增加光照处理,光源设在太阳上面。
- 为了提高太阳的显示效果,可以在侧后增加一个专门照射太阳的灯。
## 2.1实验方法和过程
### 2.1.1 opengl 环境配置
从网上下载 glut 包,主要是 glut.h 头文件以及 glut32.lib,将其放在 VS2017 的对应目录下面,方面项目直接引用头文件。
然后在“项目”的“管理 NuGet 程序包”中安装 nupengl.core,这一步在每次新建工程时都要重新操作。如下图 1 所示
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1713400910561-959c6c1e-605a-4bdb-822c-c1d13e24d0bc.png#averageHue=%232a3947&id=e2jid&originHeight=620&originWidth=1301&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
图 1 包管理
若能够成功运行示例程序,则说明环境配置成功。
### 2.2.2 准备工作
首先确定需要写三个重要函数,init()、display()、timer_callback(),分别负责初始化、渲染、计时器刷新的回调函数。
在初始化之前,在 main 函数需要初始化 glut 库以及设定窗口信息。窗口设置包括显示模式、窗口大小、窗口初始位置等。然后用 glutSpecialFunc()函数设定键盘输入操作,用 glutTimerFunc()指定刷新间隔以及对应的回调函数,用 glutDisplayFunc()指定 display 为当前窗口的显示内容函数,最后用 glutMainLoop()使窗口框架运行起来。相关代码如下所示:
```c
int main(int argc, char * argv[])
{
glutInit(&argc, argv); //使用glut库需要进行初始化
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); //设定窗口显示模式,RGB颜色模型和双缓存
glutInitWindowPosition(100, 100); //设定窗口的初始位置,屏幕左上角为原点,单位为像素
glutInitWindowSize(600, 600); //设定窗口的大小
glutCreateWindow("日地月-球体动态模型"); //创建一个窗口
…
initial();
glutSpecialFunc(&keyboard); //esc退出
glutTimerFunc(25, timer_callback, 1); //每25ms刷新一次
glutDisplayFunc(&display); //将myDisplay指定为当前窗口的显示内容函数
glutMainLoop(); //使窗口框架运行起来
return 0;
}
```
考虑到生成日地月模型系统所需要的数据,首先在全局变量中以天为单位,定义日地月的自转公转时间,以及计算球体相关数据时可能用到的参数 π,用于之后的计算。设定一个月 30 天,一年 360 天,则地球绕太阳的公转周期是 360 天,月球的自转周期和绕地球的公转周期是 30 天,地球的自转周期为 1 天,而太阳自转的天数约为 27 天。相关定义如下所示:
```c
# define Pi 3.14159
//一年的天数
static float day_per_year = 360.0; //地球自转角度
//一月的天数
static float day_per_month = 30.0; //月球自转和公转角度
//地球自转的天数
static float earth_per_circle = 7.0; //一天转一圈完全看不出来,这里假设要7天,放慢7倍
//太阳自转的天数
static float sun_per_circle = 27.0;
```
然后是按照差不多的比例定义日地月的球体半径、相互之间的距离,由于真实数据过于庞大,就简单缩成更小的数据,能看出相对大小关系和相对的距离即可。相关定义如下所示:
```c
//天体半径
static float r_sun = 70.0;
static float r_earth = 25.0;
static float r_moon = 15.0;
//天体距离
static float d_sun_earth = 200.0;
static float d_earth_moon = 50.0;
```
最后是设定球体的 slices 和 stacks。这是因为后面渲染球体需要用到 glutSolidSphere(radius,slices,stacks)这个方法,参数 1 是球体半径,参数 2、3 类似球体经纬线的条数,通常来说后两个值越大,球体渲染效果越逼真。所以就将其统一写到全局变量,方便随时对球体精细度进行调整。相关定义如下所示:
```c
//球体面数
static float sphere_slices = 30.0;
static float sphere_stacks = 30.0;
```
### 2.2.3 初始化:init()
在 init 函数中,需要做一些初始化操作。考虑到三�
神仙别闹
- 粉丝: 4201
- 资源: 7485
最新资源
- 2-一款检查MD5值的简单小软件
- 在线考试系统、考试系统、在线教育考试系统、在线教育、跨平台考试、考试、智能考试、试题、错误试题、考试题目、试题组卷等
- abaqus数值模拟案例系列-随机纤维分布二维RVE模型微观横向拉伸损伤,设置了周期边界,采用Drucker-Prager(dp)准则,Ductile-Damage延性损伤,界面采用cohesive单
- 湖南网络建设与运维技能竞赛规程及内容详解
- 2-MonitorOff 显示器的开启与关闭工具
- Screenshot_2024-12-31-14-41-43-682_tv.danmaku.bili.jpg
- 电击穿 介电击穿 相场模拟 相场模型 comsol pde做的
- Tyranor模拟器.zip
- 基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml) 只要是与数据库相关的代码都可以通过自定义模板来生成 支持数据库类型与java类型映射关系配置
- Nginx 配置文件详解(带示例)
- comsol仿真,变压器匝间短路5%的电磁振动噪声模型 包括电磁场分布,磁密分布,振动形变,噪声分布等结果
- 10kg级的承重计,可以用来测量小型物品的重量.zip、arduino代码(C++)含ppt
- 驱动AD7124,使用STM32 HAL库
- C 编译的MAKEFILE 的介绍
- ELK+Filebeat+Kafka+ZooKeeper构建大数据日志分析平台6.7.2安装包
- 单相交流调压器仿真实验报告
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页