目录
项目选择
核心技术细节
开发环境
体系结构概要
类详细介绍
TextureManager
Star
SolarSystem
Camera
总体逻辑介绍
全局变量
int main(int argc, char **argv)
void init()
void display()
void onTime(int value)
void onKeyDown(unsigned char key, int x, int y) 与void onKeyUp(unsigned char key, int x, int y)
小结
项目效果展示
运行演示
工作量
原创性
参考资料
项目选择
我选择的是opengl实现太阳系的项目。实现了月球绕地球转、地球绕太阳转的动画、第一人称摄像机、全局上帝视角、地球视角、材质贴图、Phong Shading等要求。
核心技术细节
开发环境
C++标准
|
C++17
|
操作系统平台
|
Linux
|
构建工具
|
cmake 3.16
|
桌面服务代理
|
wayland或XServer
|
依赖软件包
|
freeglut——opengl核心依赖
libsoil——用于加载贴图纹理
glm——用于线性代数计算
|
体系结构概要
main.cpp
|
主函数,包括opengl的初始化、注册回调等。
|
Camera类
|
用于摄影机相关功能的实现。
|
Star类
|
用于星体相关功能的实现。
|
SolarSystem类
|
管理所有星体的容器。
|
TextureManager类
|
管理纹理的容器。
|
本项目的设计思想参照前端设计与游戏设计中常见的“数据驱动”的方式,核心思路就是在控制阶段(初始化阶段、键盘控制回调、显示的回调等)更新各个对象的状态(属性值),在绘制阶段(每帧)集中使用对象的状态。这样做最大的益处在于对对象的操作只需要简单地修改其状态属性即可,而对这些状态的使用可以集中在同一个地方,极大地减少了代码量与耦合度,提高了开发效率与维护便利性。
类详细介绍
本项目涉及的类一般有两个功能:保存一些状态与被动地根据自身状态调用opengl的API来完成某种功能。状态的保存、API的调用均由主逻辑控制。这一节先介绍各个类的功能。