Central South University Graphics Library – CSUGL,这是中南大学计算机学院计算机图形学大作业依赖的图形学框架,以OpenGL为基础的渲染引擎。由于部分模板未实例化,不方便导出为动态链接,生成目标暂为静态库。欢迎加入贡献!
推荐使用CMake进行构建
- CMake
mkdir build
cd build
cmake ..
- 根据系统和构建工具,选择使用make或者nmake等工具进行编译和链接 如果在Windows中,推荐使用MSVC以及nmake
- 将生成的静态链接库,移动至相应位置,方便自行配置链接
- 最后,不要忘记将src作为include目录
将CSUGL作为子项目,只需要在你的项目CMakeLists中加入一下
# add sub cmake configure path
add_subdirectory(your_3rd_parts_path/CSUGL)
# add header path of CSUGL
include_directories(your_3rd_parts_path/CSUGL/src)
__ TBC ...__
- C++17:使用了少量C++17特性
- 基础封装:将GLFW的大部分功能进行封装,例如
Window
,Event
,Input
等 - 渲染小部分封装:封装了shader,三个基本的object (vao, vbo, ibo)
- 内存自动管理:你将不几乎会在项目中用到delete,而是使用封装好的C++原生智能指针进行更加安全的内存管理。
__ TBC ...__
- src
- core
- core: 基础定义
- window: 窗口,封装GLFWWindow
- application: 应用程序,管理window
- transform: 基本变换,包括平移旋转缩放
- event: 事件
- input: 输入
- file_system: 文件系统,目前只实现了文件路径名处理
- camera: 相机系统
- render
- shader: 加载和使用shader
- light: 光照封装**(准备取消这个封装)**
- vertex_array: GL 的 Vertex Array 封装
- buffer: GL 的 Vertex Buffer 和 Index Buffer 封装
- utils
- singleton: 单例模板
- thread_pool: 简单的线程池
- model_loader: 模型元数据加载器
- asset_manager: 资源管理器模板
- core
TBC ...
-
渲染
- 窗口
- shader
- 基本变换
- 基本相机
- 封装各类缓冲和渲染对象(VBO,EBO,FBO、VAO、RBO等)
- 封装渲染对象(模型)
- 材质基本封装
- 分批渲染(渲染优化)
- 粒子效果(实例渲染)
- 层(Layer,不仅仅是渲染深度分层,还有各类功能作用的层级,例如碰撞层次)
- 自定义管线流程(引入render pass)
-
物理
- 3D或2D物理封装(Bullet、Box2D)
-
动画
- 自由变形(FFD)
- 骨骼绑定
- 动画加载、渲染
-
其他媒体
- 声音库
- 网络库
-
GUI
- 各类panel封装
- Project(asset与folder)
- Hierarchy(场景对象管理)
- Scene(场景编辑窗口)
- Gizmo封装
- Render(渲染结果窗口)
- Inspector(详细信息)
- 鼠标拖拽实现
- 各类panel封装
-
框架
- 应用程序
- 文件系统
- 系统配置、项目配置
- 程序脚本系统
- ECS框架(如果实现了高效的ECS以及脚本系统,以后可以将功能实现在扩展库中,类似Unity,CSUGL将作为动态链接核心库减少开发)
-
示例demo
- 智能指针
- 线程池
- 窗口创建和三角形绘制
- 变换和FPS相机
- 纹理加载、绘制
- 输入、事件
- 模型加载
- 阴影渲染
- 实时纹理绘制
TBC ...
基本要求:
- 了解C++项目组织原理
- 了解Git的基本使用
- 热爱图形学、不畏困难、愿意肝代码
加入contribution十分简单。推荐使用gitee进行贡献:
- 登录gitee
- fork 本仓库
- 克隆fork的仓库到本地,进行代码编写
- 提交修改至远程,在gitee中提交pull request
- 等待CSUGL管理员通过pr、合并修改,完成一次贡献
图形学是一个十分有趣的计算机学分支。你初次了解这个学科,可能是通过3A游戏的炫酷特效,或是迪士尼的动画渲染,或者是想做一款只属于自己的“Indie Game”。的确,当你实现了一个新的光影效果,或者花了大几个小时离线渲染完了一张图,这种 强烈的__”眼见为实“ __的成就感,前所未有。
但一个无法否认的事实是,图形学编程的__代码量__很大,需要掌握一定的计算机__底层优化__知识,甚至需要了解__GPU__的硬件构造。并且在实时渲染中,还存在着许多__奇技淫巧__,我们称之为__trick__。如果能够坚持下来,相信你的整体代码水平和思考问题的能力可以提升一个层次。
希望你能够热爱图形学,热爱游戏,热爱生活。