> # ♻️ 资源
> **大小:** 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 函数中,需要做一些初始化操作。考虑到三�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010591 利用 OpenGL 框架,设计一个日地月运动模型动画。 运动关系正确,相对速度合理,且地球绕太阳,月亮绕地球的轨道不能在一个平面内。 地球绕太阳,月亮绕地球可以使用简单圆或者椭圆轨道。 对球体纹理的处理,至少地球应该有纹理贴图。 增加光照处理,光源设在太阳上面。 为了提高太阳的显示效果,可以在侧后增加一个专门照射太阳的灯。
资源推荐
资源详情
资源评论
收起资源包目录
基于 C++ OpenGL框架实现日地月运动模型动画【100010591】 (155个子文件)
configurations.autopkg 224B
configurations.autopkg 224B
configurations.autopkg 224B
configurations.autopkg 224B
moon.bmp 24MB
moon.bmp 24MB
sun.bmp 1.5MB
earth.bmp 1.5MB
sun.bmp 1.5MB
earth.bmp 1.5MB
packages.config 221B
packages.config 221B
main.cpp 8KB
main.cpp 5KB
Browse.VC.db 34.62MB
Browse.VC.db 32.29MB
glew32.dll 356KB
glew32.dll 356KB
glew32.dll 330KB
glew32.dll 330KB
glew32.dll 330KB
glew32.dll 330KB
freeglut.dll 224KB
freeglut.dll 224KB
freeglut.dll 214KB
freeglut.dll 214KB
freeglut.dll 214KB
freeglut.dll 214KB
freeglut.dll 214KB
freeglut.dll 214KB
glfw3.dll 48KB
glfw3.dll 48KB
glfw3.dll 43KB
glfw3.dll 43KB
glfw3.dll 43KB
glfw3.dll 43KB
main.obj.enc 45KB
glewinfo.exe 379KB
glewinfo.exe 379KB
glewinfo.exe 343KB
glewinfo.exe 343KB
glewinfo.exe 343KB
glewinfo.exe 343KB
visualinfo.exe 243KB
visualinfo.exe 243KB
visualinfo.exe 218KB
visualinfo.exe 218KB
visualinfo.exe 218KB
visualinfo.exe 218KB
LightAndTexture.exe 85KB
LightAndTexture.exe 85KB
SunEarthMoon.exe 45KB
SunEarthMoon.exe 45KB
LightAndTexture.vcxproj.filters 996B
SunEarthMoon.vcxproj.filters 996B
glew.h 904KB
glfw3.h 80KB
glxew.h 67KB
glxew.h 67KB
wglew.h 61KB
wglew.h 61KB
freeglut_std.h 26KB
freeglut_std.h 26KB
freeglut_ext.h 9KB
freeglut_ext.h 9KB
glfw3native.h 6KB
glfw3native.h 6KB
freeglut.h 681B
freeglut.h 681B
glut.h 639B
glew.h0000664 904KB
glfw3.h0000664 80KB
glut.h0000664 639B
vc141.idb 179KB
vc141.idb 171KB
LightAndTexture.ilk 3.11MB
SunEarthMoon.ilk 450KB
MAIN.ipch 25.75MB
MAIN.ipch 25.63MB
moon.jpg 1.75MB
moon.jpg 1.75MB
earth.jpg 716KB
earth.jpg 716KB
sun.jpg 450KB
sun.jpg 450KB
space.jpg 54KB
space.jpg 54KB
LightAndTexture.lastbuildstate 285B
SunEarthMoon.lastbuildstate 282B
glew32.lib 549KB
glew32.lib 541KB
glew32.lib 541KB
freeglut.lib 36KB
freeglut.lib 36KB
freeglut.lib 33KB
glfw3dll.lib 17KB
glfw3dll.lib 17KB
glfw3dll.lib 17KB
glew32.lib0000664 549KB
freeglut.lib0000664 33KB
共 155 条
- 1
- 2
神仙别闹
- 粉丝: 3588
- 资源: 7460
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页