课程大作业:多形态自由视角天体运动系统

源目录没有单独保留教师发布的大作业题面,只保存了我当时的最终报告、代码和演示视频。因此下述任务范围来自我实际提交的内容,不反推未留存的评分要求。

实际完成目标

构建一个可交互的天体运动演示程序:

  • 展示原始比例太阳系、视觉优化比例太阳系与地月系。
  • 为太阳、行星、地球和月球使用不同着色器与纹理。
  • 模拟天体自转与公转,并考虑部分轨道或自转平面夹角。
  • 支持视野平移、前后缩放、视线偏移和沿三个坐标轴观察。
  • 在真实天体数据与可观察性冲突时,提供非线性比例调整。
查看项目实现与效果

1. 程序结构

  • Sphere.py:生成球面顶点、纹理坐标、索引和法线,负责纹理加载、MVP 更新与绘制。
  • Shader.py:保存并编译恒星、行星、地月系着色器。
  • Data.py:保存天体名称、半径、轨道半径、自转周期与公转周期。
  • AuxFunc.py:窗口、键盘控制、视口调整与资源释放。
  • main.py:选择场景、实例化天体并运行 GLFW 渲染循环。

2. 几何与运动

天体共用球体网格类,每个实例带自己的尺度、纹理和运动参数。模型矩阵同时表达:

  • 绕自身轴的自转。
  • 绕系统中心的公转。
  • 视效需要的尺度调整。

真实太阳系尺度跨度太大,若完全等比例显示,除太阳外的行星几乎不可见。因此我在项目中同时保留“原始比例”与“优化比例”模式,并在报告中明确说明后者是展示性缩放,不是物理尺度还原。

3. 着色

太阳使用恒星着色器并作为点光源,不再接受外部光照。行星使用表面纹理与 Phong shading,按环境、漫反射和镜面分量计算太阳光照。地月系着色器把太阳近似为远处平行光,用于表现晨昏变化。

4. 相机与交互

键盘可让 eye 与 center 同步平移以移动视野,也可单独改变 center 调整视线。窗口尺寸变化后重新计算投影与 glViewport,避免宽高比改变造成星球拉伸。

5. 输出效果

视觉优化后的太阳系:

视觉优化比例太阳系

地月系:

地月系渲染结果

这两张图只能说明我当时的最终渲染状态;源目录另有动态演示视频,但这里没有复制整段视频。

评论