开源软件名称:Simple3DEditor
开源软件地址:https://gitee.com/lin-boheng/simple3-deditor
开源软件介绍:
Simple3DEditor介绍一个有基础功能的3D编辑器,使用C++编写,图形基于OpenGL但可能经过这一段时间以来的修订,不再仅仅只有基础功能 此仓库分支为多媒体加强版,目前主要维护的分支(虽然编译成主程序也只是差不多1MB大小) 加入的库- OpenGL
- OpenAL
- stb_image
- SoundTouch
- FFmpeg
软件功能- 基础建模
- 基础绘图
- UV坐标编辑以及贴图
- 音频解码
- 变声器
- 立体音频
- 渲染输出打印
- 动画制作
待加功能- 材质
- 音频编码输出
- 视频编解码
- 着色器编辑器
- 渲染3D音频、动画、视频并编码输出
- 代码控制节点编辑器
- 着色器节点图编辑器
- 3D画刷
- 水彩仿真画刷
- 光线追踪渲染
- 插件系统,期望能注册窗口、菜单、对象、动画函数、修改器,操作对象,文件输入输出工具,甚至游戏编译器等
- 内置小型MC游戏窗口(有点开玩笑的意思)
同时为了编译使用方便,将所有依赖(C++基础库及其操作系统平台库除外)都加入了此仓库,确保编译时找依赖的烦恼更少一些 此项目目前就是我对从高中开始OI快三年经历的留念,感觉不做个软件出来对不起这三年时光,很可能一直维护到大学及以后 软件架构编辑器主要窗口: - MainWindow 主窗口
- PaintWindow 绘画窗口
- UVEditWindow UV坐标编辑器
- TreeWindow 树状对象管理窗口
- AudioPlayerWindow 音频播放器
- AudioCaptureWindow 录音以及变声器
- AnimationWindow 动画控制窗口
- RenderWindow 渲染窗口
- NodeMapWindow 节点编辑器(尚未完成)
GUI容器、管理器、组件等: - AnimationCurve 动画曲线
- Container 容器
- Menu 菜单
- UIManager UI管理器
- ViewManager 视口管理器
外部对话框: - ColorBoard 颜色选择框
- Tips 提示信息
工具库注:部分功能平台相关,源代码位于platform目录下基本: - String 字符串(平台相关)
- List 可变数组
- File 文件(平台相关)
- Queue 队列
- StringBuilder 字符串构建类
- AudioUtils 音频工具
- DataBuffer 数据缓冲
图形库(如果有能力可以做其他图形API实现,甚至可以软光栅): - GLUtils 图形工具
- GLSimplified 简化OpenGL函数
- GLTexture2D 2D纹理
- GLLights 光照管理
- GLShader 着色器
- GLProgram 着色程序
- GLRenderTexture2D 2D可渲染纹理
- GLVertexArray 顶点数组
- GLVertexBuffer 顶点缓冲
- GLIndexBuffer 索引缓冲
- GLComputeProgram GPU计算程序
数学库: - Math 基本数学函数
- LinearAlgebra 线性代数
- Geometry 几何图形
- Mesh 网格体
- Property 属性
- ViewObject 可见对象
操作系统库(期望跨平台的实现): - AppFrame 应用主窗口
- Font 字体管理
- GLFunc OpenGL扩展函数
- Log 日志输出
- Resource 资源管理
- Shell 命令调用
- Thread 线程管理
- Time 时间
预想中待实现的部分: - GUIManager 2D对象管理,代替UIManager管理GUI组件,重要的是实现坐标变换的管理,这样也许还能实现3DGUI(其实如果使用AViewObject,继承产生一个CanvasObject也许也可以)
- PluginManager 插件管理器,目前已经实现将主程序部分变为动态链接库,插件应通过符号依赖主程序函数与类进行操作(另外一个思路是使用Java语言对接)
- WindowManager 窗口管理器,为了能在运行时注册更多类型的窗口
- test文件夹里面或许可以用来放一堆单元测试代码(具体测试流程Makefile里面管理)
- 集成AutoDesk的FBX SDK,导入导出.fbx格式的场景和对象(我还有一个2020.0.1版本的在电脑上)
- 渲染管线还是自定义的好,就是花时间
- 计算管线渲染光线追踪(实现起来很有难度,也不知道怎么拿到OpenRL SDK)
- UI组件还缺少很多,以前我所写组件UIEditA因为UIManager的缺陷,完全达不到我期望的功能,现在要大改,我觉得至少应该有个属性编辑框
- 集成json-cpp,方便程序或是插件保存一些简单配置
- 让所有需要保存信息的类继承序列化接口并实现,实现保存程序状态的功能大致所想结构[魔法字'SVFILE', 对象标识符{数据, [对象标识符{...}, ...]}],为单个根节点的多叉树结构,由主类发起序列化并多层遍历调用内部类
- 每次命令后实现对应的IUndo并加入LocalData的队列以实现撤销功能,就是实现真的很多很麻烦
- 用FreeType实现中文绘制并跨平台
- 用GLFW实现跨平台应用窗口(windows平台为了某些功能,独立出来写在platform目录下也行,比如WM_DROPFILES消息监听等)
- 换用GLEW获取OpenGL扩展函数(我手动导入完全是因为没配置好)
- 如果可以的话,将插件IDE集成进来,让插件编写运行方便(会不会变得像Houdini一样啊?)
- 如果选用Java作为插件语言,那也许可以带上一个运行时,将一堆插件集成为一个独立的程序(但说起来unity3d在Android平台上的做法是不是就是如此...)
- Epic Games的ShaderConductor是开源的,也许可以用于实现跨图形API的着色器
- "渲染功能"应该可以加入动画过程中的3D音频,想办法实现获取OpenAL的双声道输出,并借助FFmpeg直接渲染输出有声视频(这也是我相当想实现的功能)
- OpenAL播放时若当前设备拔出会无法再次播放声音,应写出一个平台相关的硬件更改事件,并在此事件过程中刷新所有音频数据,可以让所有音频播放由AViewObject的派生类实现,并且在事件中遍历场景所有音源类型的对象通知刷新,注意在音源对象中保存音频数据
设想终于写完了,也不知道几年能肝完。。。最近打算好好学习,我自己就不敲那么多代码了,求好心人帮忙实现一下(我觉得想多了,毕竟这怕都算是大工程了) 软件截图安装教程- 直接下载release或者下载源代码编译
- 确保mingw工具已经安装并配置路径(全依赖代码分支为AVDevelop)
- 下载文件夹路径下执行make.exe
使用说明- 文档暂且没时间写,更多快捷键可以看.rc文件
- 可能出现一些bug
- 截止目前实际上贡献者就我一个人,若求更新也请体谅作者的肝
快捷键一览表特别注意:Ctrl+W打开窗口控制菜单- "p":添加点
- "f":添加线、面(选择两个或三个点)
- "g":移动
- "r":旋转
- "s":缩放
- "c":选择颜色(先选择顶点)
- "x":X轴操作
- "y":Y轴操作
- "z":Z轴操作
- "X"(shift + x):YZ平面操作
- "Y"(shift + y):ZX平面操作
- "Z"(shift + z):XY平面操作
- delete:删除顶点
- ESC:退出
- Ctrl+S:保存
- Alt+/ Alt+?:软件信息
- Alt+(0-9): 工具选择
- Ctrl+L: 加载
- "e": 引出新顶点
- Shift+A: 基本菜单
- Ctrl+P: 打印
参与贡献- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request
特技- 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
- Gitee 官方博客 blog.gitee.com
- 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
- GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
- Gitee 官方提供的使用手册 https://gitee.com/help
- Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/
|
请发表评论