# XCEngine 基于 DirectX 12 的模块化游戏引擎,支持体积渲染、跨平台渲染后端和核心模块单元测试。 当前工程状态、RHI 近期收敛结果、推荐构建与测试入口,请优先参考 [AGENT.md](AGENT.md)。 ## 项目概述 XCEngine 是一个正在开发中的模块化 C++ 游戏引擎,采用 RHI(Render Hardware Interface)抽象层设计,支持 DirectX 12 和 OpenGL 4.6+ 多种渲染 API。项目采用模块化设计,包含核心库、示例程序和单元测试。 ## 技术栈 - **渲染 API**: DirectX 12, OpenGL 4.6+ - **语言**: C++17 - **构建系统**: CMake 3.15+ - **测试框架**: Google Test - **UI**: ImGui(用于编辑器) ## 项目结构 ```text XCEngine/ ├── engine/ # 核心引擎库 │ ├── include/XCEngine/ │ │ ├── Audio/ # 音频系统 │ │ │ ├── AudioSystem.h # 音频系统主类 │ │ │ ├── AudioTypes.h # 音频类型定义 │ │ │ ├── AudioConfig.h # 音频配置 │ │ │ ├── AudioMixer.h # 音频混音器 │ │ │ ├── HRTF.h # HRTF 空间音频 │ │ │ ├── FFTFilter.h # FFT 滤波器 │ │ │ ├── Reverbation.h # 混响效果 │ │ │ ├── Equalizer.h # 均衡器 │ │ │ ├── IAudioEffect.h # 音频效果接口 │ │ │ ├── IAudioBackend.h # 音频后端接口 │ │ │ └── WindowsAudioBackend.h # Windows 音频后端 │ │ ├── Components/ # 游戏组件系统 │ │ │ ├── Component.h # 组件基类 │ │ │ ├── GameObject.h # 游戏对象 │ │ │ ├── TransformComponent.h # 变换组件 │ │ │ ├── AudioSourceComponent.h # 音频源组件 │ │ │ └── AudioListenerComponent.h # 音频监听器组件 │ │ ├── Core/ # 核心基础模块 │ │ │ ├── Asset/ # 资源系统核心 │ │ │ │ ├── IResource.h # 资源接口 │ │ │ │ ├── ResourceTypes.h # 资源类型定义 │ │ │ │ ├── ResourceHandle.h # 资源句柄 │ │ │ │ ├── ResourceManager.h # 资源管理器 │ │ │ │ ├── ResourceCache.h # 资源缓存 │ │ │ │ ├── AsyncLoader.h # 异步加载器 │ │ │ │ ├── ResourceDependencyGraph.h # 依赖图 │ │ │ │ └── ImportSettings.h # 导入设置基类 │ │ │ ├── IO/ # IO 系统 │ │ │ │ ├── IResourceLoader.h # 资源加载器接口 │ │ │ │ ├── ResourceFileSystem.h # 资源文件系统 │ │ │ │ ├── ResourcePath.h # 资源路径 │ │ │ │ ├── FileArchive.h # 文件归档 │ │ │ │ └── ResourcePackage.h # 资源包 │ │ │ ├── Containers/ # 容器模块 │ │ │ │ ├── Array.h # 动态数组 │ │ │ │ ├── String.h # 字符串类 │ │ │ │ ├── HashMap.h # 哈希表 │ │ │ │ └── Containers.h # 模块统一头文件 │ │ │ ├── Math/ # 数学库 │ │ │ │ ├── Vector2.h # 二维向量 │ │ │ │ ├── Vector3.h # 三维向量 │ │ │ │ ├── Vector4.h # 四维向量 │ │ │ │ ├── Matrix3.h # 3x3 矩阵 │ │ │ │ ├── Matrix4.h # 4x4 矩阵 │ │ │ │ ├── Quaternion.h # 四元数 │ │ │ │ ├── Transform.h # 变换 │ │ │ │ ├── Color.h # 颜色 │ │ │ │ ├── Rect.h # 矩形 │ │ │ │ ├── Sphere.h # 球体 │ │ │ │ ├── Box.h # 盒子 │ │ │ │ ├── Plane.h # 平面 │ │ │ │ ├── Ray.h # 射线 │ │ │ │ ├── AABB.h # 轴对齐包围盒 │ │ │ │ ├── Bounds.h # 包围体 │ │ │ │ ├── Frustum.h # 视锥体 │ │ │ │ └── Math.h # 数学库统一头文件 │ │ │ ├── Layer.h # 层级 │ │ │ ├── LayerStack.h # 层级栈 │ │ │ ├── Types.h # 基础类型别名 │ │ │ ├── RefCounted.h # 引用计数基类 │ │ │ ├── SmartPtr.h # 智能指针 │ │ │ ├── Event.h # 事件系统 │ │ │ └── FileWriter.h # 文件写入 │ │ ├── Debug/ # 调试与日志模块 │ │ │ ├── Logger.h # 日志系统 │ │ │ ├── LogLevel.h # 日志级别 │ │ │ ├── LogCategory.h # 日志分类 │ │ │ ├── LogEntry.h # 日志条目 │ │ │ ├── ConsoleLogSink.h # 控制台输出 │ │ │ ├── FileLogSink.h # 文件输出 │ │ │ ├── ILogSink.h # 日志槽接口 │ │ │ ├── Debug.h # 调试宏 │ │ │ └── Profiler.h # 性能分析 │ │ ├── Memory/ # 内存管理模块 │ │ │ ├── Allocator.h # 分配器接口 │ │ │ ├── LinearAllocator.h # 线性分配器 │ │ │ ├── PoolAllocator.h # 内存池分配器 │ │ │ ├── ProxyAllocator.h # 代理分配器 │ │ │ └── MemoryManager.h # 全局内存管理器 │ │ ├── Threading/ # 线程模块 │ │ │ ├── Thread.h # 线程类 │ │ │ ├── Mutex.h # 互斥锁 │ │ │ ├── SpinLock.h # 自旋锁 │ │ │ ├── ReadWriteLock.h # 读写锁 │ │ │ ├── Task.h # 任务基类 │ │ │ ├── LambdaTask.h # Lambda 任务 │ │ │ ├── TaskGroup.h # 任务组 │ │ │ ├── TaskSystem.h # 任务系统 │ │ │ ├── TaskSystemConfig.h # 任务系统配置 │ │ │ └── Threading.h # 线程模块统一头文件 │ │ ├── Platform/ # 平台抽象层 │ │ │ ├── PlatformTypes.h # 平台类型 │ │ │ ├── IPlatform.h # 平台接口 │ │ │ ├── IWindow.h # 窗口接口 │ │ │ ├── IFileSystem.h # 文件系统接口 │ │ │ ├── IClock.h # 时钟接口 │ │ │ ├── IDynamicLibrary.h # 动态库接口 │ │ │ ├── IDisplayEnumerator.h # 显示枚举接口 │ │ │ ├── GameTime.h # 游戏时间 │ │ │ ├── Window.h # 窗口类 │ │ │ ├── Windows/ # Windows 平台实现 │ │ │ │ ├── WindowsWindow.h │ │ │ │ └── WindowsInputModule.h │ │ │ ├── Linux/ # Linux 平台实现 │ │ │ ├── Android/ # Android 平台实现 │ │ │ └── macOS/ # macOS 平台实现 │ │ ├── Input/ # 输入模块 │ │ │ ├── InputTypes.h # 输入类型 │ │ │ ├── InputEvent.h # 输入事件 │ │ │ ├── InputAxis.h # 输入轴 │ │ │ ├── InputModule.h # 输入模块基类 │ │ │ └── InputManager.h # 输入管理器 │ │ ├── Resources/ # 资源管理模块 (按类型分目录) │ │ │ ├── Texture/ # 纹理资源 │ │ │ │ ├── Texture.h │ │ │ │ ├── TextureLoader.h │ │ │ │ └── TextureImportSettings.h │ │ │ ├── Mesh/ # 网格资源 │ │ │ │ ├── Mesh.h │ │ │ │ ├── MeshLoader.h │ │ │ │ └── MeshImportSettings.h │ │ │ ├── Shader/ # 着色器资源 │ │ │ │ ├── Shader.h │ │ │ │ └── ShaderLoader.h │ │ │ ├── Material/ # 材质资源 │ │ │ │ ├── Material.h │ │ │ │ └── MaterialLoader.h │ │ │ ├── AudioClip/ # 音频资源 │ │ │ │ ├── AudioClip.h │ │ │ │ └── AudioLoader.h │ │ │ └── Resources.h # 资源模块统一头文件 │ │ ├── Scene/ # 场景管理模块 │ │ │ ├── Scene.h # 场景类 │ │ │ └── SceneManager.h # 场景管理器 │ │ └── RHI/ # 渲染硬件接口抽象层 │ │ ├── RHITypes.h # RHI 类型定义 │ │ ├── RHIEnums.h # RHI 枚举 │ │ ├── RHICapabilities.h # 硬件能力查询 │ │ ├── RHIFactory.h # 设备工厂 │ │ ├── RHIDevice.h # 渲染设备抽象 │ │ ├── RHICommandQueue.h # 命令队列抽象 │ │ ├── RHICommandList.h # 命令列表抽象 │ │ ├── RHIBuffer.h # 缓冲区抽象 │ │ ├── RHITexture.h # 纹理抽象 │ │ ├── RHIShader.h # 着色器抽象 │ │ ├── RHISampler.h # 采样器抽象 │ │ ├── RHIFence.h # 同步栅栏抽象 │ │ ├── RHISwapChain.h # 交换链抽象 │ │ ├── RHIPipelineState.h # 管线状态抽象 │ │ ├── RHIPipelineLayout.h # 管线布局抽象 │ │ ├── RHIDescriptorPool.h # 描述符池抽象 │ │ ├── RHIDescriptorSet.h # 描述符集抽象 │ │ ├── RHIRenderPass.h # 渲染通道抽象 │ │ ├── RHIFramebuffer.h # 帧缓冲抽象 │ │ ├── RHIResource.h # 资源基类 │ │ ├── RHIResourceView.h # 资源视图抽象 │ │ ├── OpenGL/ # OpenGL 后端实现 │ │ │ ├── OpenGLDevice.h │ │ │ ├── OpenGLCommandQueue.h │ │ │ ├── OpenGLCommandList.h │ │ │ ├── OpenGLSwapChain.h │ │ │ ├── OpenGLPipelineState.h │ │ │ ├── OpenGLBuffer.h │ │ │ ├── OpenGLTexture.h │ │ │ ├── OpenGLShader.h │ │ │ ├── OpenGLSampler.h │ │ │ ├── OpenGLFence.h │ │ │ ├── OpenGLVertexArray.h │ │ │ ├── OpenGLRenderTargetView.h │ │ │ ├── OpenGLDepthStencilView.h │ │ │ ├── OpenGLFramebuffer.h │ │ │ ├── OpenGLRenderPass.h │ │ │ ├── OpenGLResourceView.h │ │ │ ├── OpenGLDescriptorPool.h │ │ │ ├── OpenGLDescriptorSet.h │ │ │ ├── OpenGLTextureUnitAllocator.h │ │ │ ├── OpenGLUniformBufferManager.h │ │ │ └── OpenGLScreenshot.h │ │ └── D3D12/ # DirectX 12 后端实现 │ │ ├── D3D12Device.h │ │ ├── D3D12CommandQueue.h │ │ ├── D3D12CommandAllocator.h │ │ ├── D3D12CommandList.h │ │ ├── D3D12SwapChain.h │ │ ├── D3D12PipelineState.h │ │ ├── D3D12Buffer.h │ │ ├── D3D12Texture.h │ │ ├── D3D12Shader.h │ │ ├── D3D12Sampler.h │ │ ├── D3D12Fence.h │ │ ├── D3D12DescriptorHeap.h │ │ ├── D3D12DescriptorSet.h │ │ ├── D3D12RootSignature.h │ │ ├── D3D12PipelineLayout.h │ │ ├── D3D12RenderTargetView.h │ │ ├── D3D12DepthStencilView.h │ │ ├── D3D12ShaderResourceView.h │ │ ├── D3D12UnorderedAccessView.h │ │ ├── D3D12ConstantBufferView.h │ │ ├── D3D12ResourceView.h │ │ ├── D3D12QueryHeap.h │ │ ├── D3D12RenderPass.h │ │ ├── D3D12Framebuffer.h │ │ ├── D3D12Screenshot.h │ │ ├── D3D12Types.h │ │ ├── D3D12Enums.h │ │ └── D3D12Common.h │ ├── src/ # 实现文件 │ │ ├── Audio/ │ │ ├── Containers/ │ │ ├── Core/ │ │ │ ├── Asset/ # Core/Asset 实现 │ │ │ └── IO/ # Core/IO 实现 │ │ ├── Debug/ │ │ ├── Math/ │ │ ├── Memory/ │ │ ├── Threading/ │ │ ├── Platform/ │ │ │ └── Windows/ │ │ ├── Input/ │ │ ├── Resources/ │ │ │ ├── Texture/ │ │ │ ├── Mesh/ │ │ │ ├── Shader/ │ │ │ ├── Material/ │ │ │ └── AudioClip/ │ │ ├── Scene/ │ │ └── RHI/ │ │ ├── D3D12/ │ │ ├── OpenGL/ │ │ └── RHIFactory.cpp │ └── third_party/ # 第三方库 │ ├── kissfft/ # FFT 库 │ ├── stb/ # 图像处理库 (stb_image, stb_image_write) │ ├── GLAD/ # OpenGL 加载器 │ └── renderdoc/ # RenderDoc 调试库 │ ├── editor/ # 编辑器 UI 应用程序 │ ├── src/ # 编辑器源代码 │ │ ├── Application.cpp/h # 编辑器应用入口 │ │ ├── main.cpp # 主函数 │ │ ├── Core/ # 编辑器核心 │ │ ├── Layers/ # 编辑器层级 │ │ ├── Managers/ # 管理器 │ │ ├── panels/ # 编辑器面板 │ │ └── UI/ # UI 控件 │ ├── bin/ # 资源文件和可执行文件 │ └── build/ # 构建目录 │ ├── tests/ # 单元测试 │ ├── math/ # 数学库测试 │ ├── containers/ # 容器测试 │ ├── memory/ # 内存管理测试 │ ├── threading/ # 线程模块测试 │ ├── debug/ # 调试模块测试 │ ├── core/ # 核心模块测试 │ │ ├── Asset/ # Core/Asset 模块测试 │ │ └── IO/ # Core/IO 模块测试 │ ├── Components/ # 组件测试 │ ├── Scene/ # 场景测试 │ ├── Resources/ # 资源管理测试 │ │ ├── Texture/ │ │ ├── Mesh/ │ │ ├── Material/ │ │ ├── Shader/ │ │ └── AudioClip/ │ ├── Input/ # 输入模块测试 │ └── RHI/ # RHI 抽象层测试 │ ├── unit/ # RHI 抽象层单元测试 │ ├── D3D12/ # D3D12 后端测试 │ │ ├── unit/ │ │ └── integration/ │ ├── OpenGL/ # OpenGL 后端测试 │ │ ├── unit/ │ │ └── integration/ │ └── integration/ # RHI 抽象层集成测试 │ ├── fixtures/ │ ├── minimal/ │ ├── triangle/ │ ├── quad/ │ └── sphere/ │ ├── mvs/ # 示例程序 │ ├── D3D12/ # DirectX 12 渲染示例 │ ├── OpenGL/ # OpenGL 渲染示例 │ ├── Music fluctuations/ # 音频可视化示例 │ ├── VolumeRenderer/ # 体积渲染器(NanoVDB) │ ├── RenderDoc/ # RenderDoc 集成示例 │ ├── ui/ # 编辑器 UI 示例 │ └── Res/ # 示例资源文件 │ ├── docs/ # 文档 │ ├── api/ # API 文档 │ │ ├── audio/ # 音频系统 API │ │ ├── components/ # 组件系统 API │ │ ├── containers/ # 容器 API │ │ ├── core/ # 核心 API │ │ ├── d3d12/ # D3D12 API │ │ ├── debug/ # 调试 API │ │ ├── math/ # 数学库 API │ │ ├── memory/ # 内存管理 API │ │ ├── resources/ # 资源管理 API │ │ └── main.md # API 文档总索引 │ ├── plan/ # 开发计划与架构设计 │ └── api-skill.md # API 技能文档 │ ├── 参考/ # 参考资料 │ └── Fermion/ # 参考项目 │ ├── build/ # 构建目录 │ └── imgui.ini # ImGui 配置文件 ``` ## 快速开始 ### 前置要求 - Windows 10/11 - Visual Studio 2019 或更高版本 - CMake 3.15+ ### 构建项目 ```bash # 创建构建目录 mkdir build && cd build # 配置 CMake cmake .. -A x64 # 编译 cmake --build . --config Debug ``` ### 运行测试 ```bash cd build/tests ctest -C Debug --output-on-failure ``` 或直接运行测试可执行文件: ```bash build/tests/containers/Debug/xcengine_containers_tests.exe build/tests/memory/Debug/xcengine_memory_tests.exe build/tests/threading/Debug/xcengine_threading_tests.exe ``` ## 核心模块说明 ### Audio(音频系统) - **AudioSystem**: 音频系统主类,管理所有音频设备 - **AudioMixer**: 音频混音器,多通道混合与效果处理 - **HRTF**: 头部相关传输函数,支持空间音频定位 - **FFTFilter**: 快速傅里叶变换滤波器 - **Reverbation**: 混响效果 - **Equalizer**: 音频均衡器 - **WindowsAudioBackend**: Windows WASAPI 音频后端实现 - **AudioSourceComponent**: 音频源组件(用于游戏对象) - **AudioListenerComponent**: 音频监听器组件(用于游戏对象) ### Components(游戏组件系统) - **Component**: 组件基类,提供生命周期管理 - **GameObject**: 游戏对象,支持层级结构 - **TransformComponent**: 变换组件,管理位置、旋转、缩放 - **AudioSourceComponent**: 音频源组件 - **AudioListenerComponent**: 音频监听器组件 ### Containers(容器) - **String**: 动态字符串类,支持常用字符串操作 - **Array**: 模板动态数组,自动内存管理 - **HashMap**: 模板哈希表,支持自定义键类型 ### Core(核心基础) - **Types**: 基础类型别名(int8、uint32 等) - **RefCounted**: 引用计数基类,支持多线程安全释放 - **SmartPtr**: 智能指针实现(Ref、UniqueRef) - **Event**: 事件系统,支持订阅/发布模式 - **FileWriter**: 文件写入工具 - **Layer/LayerStack**: 层级与层级栈管理 ### Platform(平台抽象层) 跨平台抽象接口,支持 Windows、Linux、Android、macOS: - **IPlatform**: 平台接口 - **IWindow**: 窗口接口 - **IFileSystem**: 文件系统接口 - **IClock**: 时钟接口 - **IDynamicLibrary**: 动态库加载接口 - **IDisplayEnumerator**: 显示设备枚举接口 - **Window**: 窗口实现类 ### Input(输入模块) - **InputManager**: 输入管理器 - **InputModule**: 输入模块基类 - **InputEvent**: 输入事件定义 - **InputAxis**: 输入轴配置 ### Debug(调试与日志) - **Logger**: 分级日志系统(Info、Warning、Error) - **ConsoleLogSink**: 控制台日志输出 - **FileLogSink**: 文件日志输出 - **Profiler**: 性能分析工具 - **RenderDocCapture**: RenderDoc 帧捕获集成,支持 D3D12/OpenGL GPU 调试 ### Memory(内存管理) - **IAllocator**: 内存分配器接口 - **LinearAllocator**: 线性分配器,适合帧分配 - **PoolAllocator**: 内存池分配器,适合固定大小对象 - **ProxyAllocator**: 代理分配器,跟踪内存使用统计 - **MemoryManager**: 全局内存管理器 ### Threading(线程) - **Thread**: 线程封装类 - **Mutex**: 互斥锁 - **SpinLock**: 自旋锁,适合短临界区 - **ReadWriteLock**: 读写锁 - **TaskSystem**: 多线程任务系统 - **Task/TaskGroup**: 任务和任务组管理 ### Math(数学库) - **Vector2/3/4**: 向量运算 - **Matrix3/4**: 矩阵运算 - **Quaternion**: 四元数 - **Transform**: 变换(位姿) - **Color**: 颜色 - **Rect**: 矩形 - **Sphere/Box/Plane**: 基本几何体 - **Ray**: 射线 - **AABB/Bounds**: 包围体 - **Frustum**: 视锥体 ### Resources(资源管理) XCEngine 资源系统采用分层架构: #### Core/Asset(资源系统核心) - **IResource**: 资源接口基类 - **ResourceTypes**: 资源类型定义(GUID、状态等) - **ResourceHandle**: 资源句柄,安全引用资源 - **ResourceManager**: 全局资源管理器,资源加载/卸载 - **ResourceCache**: 资源缓存,支持引用计数 - **AsyncLoader**: 异步资源加载器 - **ResourceDependencyGraph**: 资源依赖图管理 #### Core/IO(资源 IO 系统) - **IResourceLoader**: 资源加载器接口 - **ResourceFileSystem**: 资源文件系统 - **ResourcePath**: 资源路径解析 - **FileArchive**: 文件归档支持 - **ResourcePackage**: 资源包批量管理 #### Resources/(具体资源类型) - **Texture**: 纹理资源(Texture.h、TextureLoader.h、TextureImportSettings.h) - **Mesh**: 网格资源(Mesh.h、MeshLoader.h、MeshImportSettings.h) - **Shader**: 着色器资源(Shader.h、ShaderLoader.h) - **Material**: 材质资源(Material.h、MaterialLoader.h) - **AudioClip**: 音频资源(AudioClip.h、AudioLoader.h) ### Scene(场景管理) - **Scene**: 场景类,管理场景内的所有游戏对象 - **SceneManager**: 场景管理器,处理场景切换 ### RHI(渲染硬件接口) XCEngine 采用 RHI(Render Hardware Interface)抽象层设计,支持多渲染后端。 #### 设计原则 - **求同存异**: 提取各 API 共同特性,统一抽象接口 - **分层抽象**: 核心抽象层 → 后端实现层 → 平台适配层 - **特性降级**: 后端不支持的特性优雅降级 - **底层逃逸**: 后端特有方法通过重载暴露 #### 抽象接口 - **RHIDevice**: 渲染设备抽象 - **RHICommandQueue**: 命令队列抽象 - **RHICommandList**: 命令列表抽象 - **RHISwapChain**: 交换链抽象 - **RHIPipelineState**: 渲染管线状态抽象 - **RHIPipelineLayout**: 管线布局抽象 - **RHIBuffer/RHITexture**: 资源抽象 - **RHIShader**: 着色器抽象 - **RHISampler**: 采样器抽象 - **RHIFence**: 同步栅栏抽象 - **RHIDescriptorPool**: 描述符池抽象 - **RHIDescriptorSet**: 描述符集抽象 - **RHIRenderPass**: 渲染通道抽象 - **RHIFramebuffer**: 帧缓冲抽象 - **RHIResourceView**: 资源视图抽象 #### 后端实现 - **OpenGL 后端**: OpenGL 4.6+ 支持 - **D3D12 后端**: DirectX 12 支持 当前更偏向“工程协作”和“当前状态”的入口说明见 [AGENT.md](AGENT.md)。 ## 测试覆盖 | 模块 | 测试用例数 | |------|-----------| | Math | ~4 | | Containers | ~3 | | Memory | ~3 | | Threading | ~3 | | Debug | ~3 | | Core | ~10 | | Components | ~3 | | Scene | ~2 | | Resources | ~12 | | Input | ~2 | | RHI/unit | ~10 | | RHI/D3D12 | ~18 (unit + integration) | | RHI/OpenGL | ~16 (unit + integration) | ## mvs 示例程序 mvs(Multiple Version Samples)展示游戏引擎的各类功能。所有示例均基于 RHI 抽象层开发,可无缝切换 DirectX 12 或 OpenGL 后端。 ### D3D12 / OpenGL 跨平台渲染示例,展示如何: - 初始化 RHI 渲染环境(支持 D3D12/OpenGL) - 加载和渲染静态网格 - 纹理映射 - 常量缓冲区更新 ### RenderDoc D3D12 + RenderDoc 集成示例,展示如何使用 RenderDoc API 进行 GPU 帧捕获和调试: - 动态加载 renderdoc.dll - 帧捕获 API(BeginCapture/EndCapture/TriggerCapture) - 捕获文件路径和注释设置 > 注意:renderdoc.dll 需单独放置于 `engine/third_party/renderdoc/renderdoc.dll` ### VolumeRenderer XCEngine 的体积渲染模块,基于 NanoVDB 实现云、烟雾等体积数据的实时渲染: - NanoVDB 格式体积数据加载 - 光线步进(Ray Marching)渲染 - HDDA 空间跳跃加速 - 体积阴影(Volumetric Shadow) - 动态光照参数调节 ### Music fluctuations 音频可视化示例,基于 FFT 实时分析音频频谱: - 音频播放与 FFT 分析 - 频谱可视化渲染 - 音频与视觉效果同步 ### Editor UI Unity 风格的编辑器 UI,基于 ImGui 实现: - 场景层级面板 - 属性检查器 - 游戏视图与场景视图 - 项目资源浏览器 - 控制台日志面板 ## 文档 API 文档位于 `docs/api/` 目录,包含各模块的完整 API 参考。 详细设计文档请参考 `docs/plan/` 目录。 当前工程协作入口见 [AGENT.md](AGENT.md)。 ## 许可证 MIT License