- editor.py: tkinter IDE with explorer, code editor, output console - Toolbar: Run (F5), Stop, Build (F7), Scene management - 引擎文件说明.md: complete engine architecture documentation
6.5 KiB
6.5 KiB
Lity3D 引擎文件说明
顶层结构
lity3d/
├── Engine/ 核心引擎代码(C + MASM汇编)
├── Demo/ 示例程序
├── Assets/ 3D模型资源
├── EditorCS/ 编辑器(C#)
├── build/ 编译输出
├── CMakeLists.txt CMake构建配置
├── build.bat Windows一键编译
├── README.md 项目说明
├── DESIGN.md 架构设计
└── scene.txt 场景保存文件
Engine/ASM/ — 汇编加速层
引擎的性能热路径用 MASM x64 汇编实现,通过 SSE/AVX2 指令集加速。当汇编不可用时自动降级到纯C版本。
- math.asm (1013行) — 向量加减乘除、矩阵乘法、四元数旋转,全部用 SIMD 指令
- math_c_fallback.h (65行) — 数学函数的纯C实现,作为汇编的备选
- memory.asm (146行) — 对齐内存分配,保证 SIMD 操作需要的16/32/64字节对齐
- string_ops.asm (253行) — 用SIMD加速的内存拷贝、字符串长度计算、字符串比较
- profiling.asm (122行) — 用CPU的RDTSC指令做高精度计时,用于性能分析
Engine/Core/ — 引擎核心
- engine.c/h — 引擎主控。负责初始化所有子系统、运行游戏循环(每帧调update→render)、关闭时清理资源。这是整个引擎的入口
- timer.c/h — 用Windows的QueryPerformanceCounter做毫秒级计时,计算帧间隔(delta time)
- logger.c/h — 日志系统。支持INFO/WARN/FATAL三级日志,同时输出到控制台和文件
- asset_manager.c/h — 资源管理器。统一处理shader/mesh/texture的加载和缓存,避免重复加载
Engine/Window/ — 窗口系统
- window.c/h — 创建Win32窗口,处理Windows消息循环。把键盘、鼠标、窗口大小变化等事件转发给引擎回调函数
Engine/Rendering/ — D3D11渲染管线
- graphics_device.c/h — D3D11设备初始化。创建Device、SwapChain、RenderTarget、DepthStencil,管理渲染状态
- renderer.c/h — 渲染器。设置视口、清屏、管理渲染目标切换
- shader.c/h — 着色器管理。编译HLSL着色器、设置常量缓冲区、绑定到管线
- mesh.c/h — 网格系统。支持立方体/球体/平面程序化生成,也支持OBJ文件加载。管理顶点缓冲区和索引缓冲区
- texture.c/h — 纹理系统。通过WIC加载BMP/PNG/JPEG,也支持生成纯色和棋盘格纹理
- camera.c/h — 摄像机。透视投影、lookAt矩阵、自由移动和旋转
- camera_controller.c/h — 摄像机控制器。封装常用的WASD+鼠标操作
- frustum.c/h — 视锥体裁剪。判断物体是否在摄像机视野内,跳过不可见物体的渲染
- lighting.c/h — 光照系统。方向光+点光源,Lambert漫反射计算
- material.c/h — 材质。把shader和纹理组合在一起,定义物体的外观属性
Engine/Scene/ — 场景图
- scene_graph.c/h — 场景树。节点有父子关系,子节点继承父节点的位移/旋转/缩放
- scene_render.c/h — 场景渲染。遍历场景树,把每个节点的MeshRenderer提交给渲染器
- scene_serialize.c/h — 场景序列化。把整个场景树保存成text文件或从文件加载
Engine/Input/ — 输入系统
- input.c/h — 键盘/鼠标/手柄输入。跟踪按键状态,支持轮询(GetAsyncKeyState)和事件回调两种模式
Engine/Audio/ — 音频系统
- audio.c/h — XAudio2音频引擎。动态加载DLL(兼容Win7~11),加载WAV文件,播放/暂停/音量控制
Engine/Physics/ — 物理系统
- physics.c/h — 简易物理。AABB碰撞检测、球体碰撞、重力模拟、速度积分
Engine/ECS/ — 实体组件系统
- world.c/h — ECS世界。实体=组件的容器,系统批量处理同类组件
Engine/UI/ — 用户界面
- ui.c/h — 2D UI渲染。按钮、标签、面板等基础控件,用D3D11的2D投影绘制
Engine/Editor/ — 内置编辑器
- editor.c/h — 编辑器主逻辑
- editor_2d.c/h — 2D编辑模式(俯视图)
- uilayer.c/h — 编辑器UI层
- bitmap_font.c/h — 位图字体渲染
- glyph_atlas.c/h — 字体图集生成
Engine/VisualScript/ — 积木式可视化编程
这是引擎最复杂的模块之一,实现了类似Scratch的积木编程系统:
- block_core.c/h — 积木核心数据结构(输入/输出端口、连接线)
- block_types.c/h — 30+种积木类型定义(移动、旋转、条件、循环等)
- block_executor.c/h — 积木执行器。解析积木图,按连接顺序执行逻辑
- block_serializer.c/h — 积木序列化。把积木图保存为.ly文件或从文件加载
- block_workspace.c/h — 积木工作区。管理所有积木的位置和连接关系
- block_renderer.c/h — 积木渲染。在屏幕上绘制积木方块和贝塞尔连线
- block_interaction.c/h — 积木交互。拖拽移动、连线创建、端口连接
- block_palette.c/h — 积木面板。侧边栏显示可用积木列表
- block_editor.c/h — 积木编辑器主控
Engine/Scripting/ — 脚本系统
- lity.py — LityPy。Python脚本库,用Python语法写游戏逻辑
- lua_engine.c/h — Lua脚本引擎桩(预留接口)
Engine/Asset/ — 资源定义
- mesh.h — Mesh结构体定义(顶点数组、索引数组、顶点缓冲区)
- texture.h — Texture结构体定义(宽高、像素数据、SRV)
Engine/include/ — 对外接口
- engine_api.h — C/C++便利封装。暴露汇编函数给C代码,提供运算符重载
Demo/ — 示例程序
| 文件 | 说明 |
|---|---|
| main.c | 场景Demo(方块+球体+地面+光照) |
| lity_explorer.c | 3D开放世界探索(村庄+树木+第三人称) |
| cube_dodge.c | 躲避游戏(障碍物+碰撞+计分) |
| game_test.c | 纯D3D11渲染测试(无Engine依赖) |
| raw3d_test.c | 引擎3D渲染验证(彩色面) |
| scene_test.c | 场景图测试 |
| light_test.c | 光照系统测试 |
| input_test.c | 输入系统测试 |
| obj_viewer.c | OBJ模型查看器(鼠标旋转) |
| ly_interpreter.c | .ly积木文件解释器 |
| editor_main.c | 编辑器入口 |
| open_world_demo.c | 开放世界demo |
EditorCS/ — 编辑器
C# 编写的可视化积木编辑器,用Dear ImGui + D3D11实现。
Assets/ — 模型资源
- cube.obj — 简单立方体OBJ模型
- pyramid.obj — 金字塔OBJ模型