一、开源项目简介
一个有基础功能的3D编辑器,使用C++编写,图形基于OpenGL 但可能经过这一段时间以来的修订,不再仅仅只有基础功能。
二、开源协议
使用AGPL-3.0开源协议
三、界面展示
软件截图
四、功能概述
软件功能
- 基础建模
- 基础绘图
- UV坐标编辑以及贴图
- 音频解码
- 变声器
- 立体音频
- 渲染输出打印
- 动画制作
待加功能
- 材质
- 音频编码输出
- 视频编解码
- 着色器编辑器
- 渲染3D音频、动画、视频并编码输出
- 代码控制节点编辑器
- 着色器节点图编辑器
- 3D画刷
- 水彩仿真画刷
- 光线追踪渲染
- 插件系统,期望能注册窗口、菜单、对象、动画函数、修改器,操作对象,文件输入输出工具, 甚至游戏编译器等
- 内置小型MC游戏窗口(有点开玩笑的意思)
同时为了编译使用方便,将所有依赖(C++基础库及其操作系统平台库除外)都加入了此仓库, 确保编译时找依赖的烦恼更少一些
五、技术选型
加入的库
- OpenGL
- OpenAL
- stb_image
- SoundTouch
- FFmpeg
软件架构
编辑器
主要窗口:
- 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
快捷键一览表
特别注意: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: 打印
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)