13 KiB
13 KiB
iFlow 上下文文档
项目概述
这是一个基于 Panda3D 和 PyQt5 的 3D 虚拟现实 (VR) 应用程序框架。该项目旨在提供一个功能齐全、模块化的 3D 环境,支持 VR 设备(如 HTC Vive, Oculus Rift)的集成,包含场景管理、模型导入、GUI 系统、脚本系统、地形系统、碰撞检测、视频播放、插件系统以及完整的 VR 交互功能。
核心架构围绕 MyWorld 类构建,该类继承自 CoreWorld,并集成了各种管理器模块,如选择系统、工具管理器、脚本管理器、GUI 管理器、场景管理器、项目管理器、地形管理器、碰撞管理器、视频管理器、资源管理器和 VR 管理器。
核心技术栈
- 核心引擎: Panda3D 1.10.15
- 图形渲染: 可选择普通渲染或 RenderPipeline 高级渲染管线
- VR 支持: OpenVR/SteamVR 2.2.0
- 用户界面: PyQt5 5.15.9 + ImGui 集成
- 3D 模型格式: 支持 glTF, FBX (需转换), BAM, EGG, OBJ 等
- 脚本语言: Python (内嵌脚本系统)
- 物理/碰撞: Panda3D 内置碰撞系统
- 视频支持: MovieTexture (MP4, AVI, MOV, MKV, WebM)
- 插件架构: 动态插件加载系统
- 资源管理: 文件浏览、拖拽、右键菜单集成
项目结构
.
├── core/ # 核心模块
│ ├── world.py # CoreWorld 基础世界类
│ ├── vr/ # VR 子模块 (完整模块化结构)
│ │ ├── __init__.py
│ │ ├── config/ # VR 配置管理
│ │ ├── interaction/ # VR 交互系统 (动作、抓取、摇杆、传送)
│ │ ├── performance/ # VR 性能监控
│ │ ├── rendering/ # VR 渲染相关 (RenderPipeline 集成)
│ │ ├── testing/ # VR 测试模式
│ │ ├── tracking/ # VR 设备跟踪
│ │ └── visualization/ # VR 可视化 (控制器模型)
│ ├── drag_drop/ # 拖拽文件监控系统
│ ├── vr_manager.py # VR 管理器主文件
│ ├── selection.py # 选择系统
│ ├── tool_manager.py # 工具管理器
│ ├── script_system.py # 脚本系统
│ ├── gui_manager.py # GUI 管理器
│ ├── terrain_manager.py # 地形管理器
│ ├── collision_manager.py # 碰撞管理器
│ ├── event_handler.py # 事件处理器
│ ├── patrol_system.py # 巡检系统
│ ├── Command_System.py # 命令系统
│ ├── InfoPanelManager.py # 信息面板管理器
│ ├── resource_manager.py # 资源管理器 (ImGui版本)
│ ├── CustomMouseController.py # 自定义鼠标控制器
│ ├── maintenance_gui.py # 维护GUI系统
│ └── assembly_interaction.py # 装配交互系统
├── demo/ # 示例和测试文件 (包含大量测试和演示)
├── gui/ # GUI 相关模块
├── project/ # 项目管理模块
├── scene/ # 场景管理模块
├── scripts/ # 脚本文件目录
├── ui/ # UI 组件和主窗口
│ ├── widgets.py # 自定义UI组件
│ ├── property_panel.py # 属性面板
│ ├── interface_manager.py # 界面管理器
│ ├── main_window.py # 主窗口
│ ├── icon_manager.py # 图标管理器
│ └── maintenance_system.py # 维护系统UI
├── plugins/ # 插件系统
│ ├── core/ # 核心插件
│ ├── third_party/ # 第三方插件
│ ├── user/ # 用户插件
│ ├── plugin_manager.py # 插件管理器
│ └── plugin_interface_spec.py # 插件接口规范
├── QPanda3D/ # Panda3D 与 PyQt 集成库
├── QMeta3D/ # Meta3D 集成库
├── RenderPipelineFile/ # RenderPipeline 高级渲染管线
├── Resources/ # 资源文件 (模型、纹理等)
├── config/ # 配置文件
│ └── vr_settings.json # VR 配置文件
├── requirements/ # 依赖项文件
│ ├── requirements.txt # 主要依赖项
│ ├── conda-requirements.txt # Conda环境依赖
│ └── clean-requirements.txt # 精简依赖项
├── vr_actions/ # VR动作配置
├── icons/ # 图标资源
├── templates/ # 模板文件
├── tools/ # 工具脚本
├── tex/ # 纹理资源
├── main.py # 程序入口点
├── demo.py # ImGui演示程序
├── gui_preview_window.py # GUI预览窗口
├── Start_Run.py # 启动脚本
└── imgui.ini # ImGui配置文件
核心功能模块
1. World (core/world.py, main.py)
CoreWorld: 基础 3D 世界设置,包括相机、光照、地面、资源路径。MyWorld: 扩展的主世界类,整合所有管理器和功能模块。- 初始化: 设置资源路径、相机、光照、地面,加载中文字体。
- 兼容性: 提供旧版属性访问接口。
- 功能代理: 将大量功能委托给专门的管理器。
- 新增集成: 视频管理器、资源管理器、插件系统等。
2. VR 系统 (core/vr/)
这是一个高度模块化的 VR 子系统,核心是 VRManager (core/vr_manager.py)。
- VRManager:
- 初始化与状态管理: 检查 VR 可用性、初始化 OpenVR、管理启用/禁用状态。
- 渲染系统:
- 支持普通渲染和 RenderPipeline 高级渲染两种模式。
- 创建和管理左右眼的渲染缓冲区和相机。
- 实现高效的纹理提交到 OpenVR Compositor。
- 支持动态分辨率缩放和质量预设。
- 跟踪系统:
- 通过 OpenVR 获取 HMD 和控制器的姿态。
- 使用锚点层级系统 (
tracking_space,hmd_anchor等) 管理设备位置。 - 坐标系转换 (OpenVR 到 Panda3D)。
- 控制器:
LeftController,RightController: 管理具体的手柄输入和可视化。- 支持动作系统 (VRActionManager) 或直接输入读取。
- 交互系统:
- VRInteractionManager: 对象抓取和交互。
- VRTeleportSystem: 传送功能。
- VRJoystickManager: 摇杆移动控制。
- 性能优化:
- 对象池 (Mat4) 减少 GC 压力。
- 纹理 ID 缓存避免重复 prepare。
- 智能 GPU 同步策略。
- 性能模式自动切换。
- 配置管理:
VRConfigManager: 从config/vr_settings.json加载/保存配置。
- 测试与调试:
VRTestMode: 提供不同的测试显示模式和功能开关。VRPerformanceMonitor: 性能监控和报告。
3. GUI 系统 (core/gui_manager.py, gui/)
- GUIManager: 管理 2D 和 3D GUI 元素的创建、编辑、删除。
- 功能:
- 创建按钮、标签、输入框、2D/3D 图像、视频屏幕等。
- GUI 编辑模式,支持拖拽创建和属性编辑。
- 与场景树和属性面板集成。
- 独立的 GUI 预览窗口 (
gui_preview_window.py)。 - ImGui 集成支持现代化的界面设计。
4. 场景与模型管理 (scene/scene_manager.py)
- SceneManager: 管理 3D 场景中的所有模型。
- 功能:
- 模型导入 (支持 glTF, FBX 转换, BAM, EGG, OBJ)。
- 材质和几何体处理。
- 碰撞体设置。
- 场景保存/加载 (BAM 格式)。
- 场景树更新。
- Cesium 3D Tiles 支持 (
load_cesium_tileset)。
5. 脚本系统 (core/script_system.py)
- ScriptManager: 嵌入式 Python 脚本系统。
- 功能:
- 脚本文件的创建、加载、重载。
- 为游戏对象挂载/卸载脚本。
- 热重载支持。
- 脚本信息查询。
6. 地形系统 (core/terrain_manager.py)
- TerrainManager: 管理 3D 地形。
- 功能:
- 从高度图或创建平面地形。
- 地形 LOD 更新。
- 地形高度查询和编辑。
7. 碰撞系统 (core/collision_manager.py)
- CollisionManager: 处理场景中的碰撞检测。
- 功能:
- 模型间碰撞检测。
- 碰撞历史和统计。
8. 工具与选择系统 (core/tool_manager.py, core/selection.py)
- ToolManager: 管理当前使用的工具 (选择、移动、旋转、缩放)。
- SelectionSystem: 处理对象选择逻辑和相机聚焦。
- CustomMouseController: 自定义鼠标控制器,增强交互体验。
9. 视频系统 (demo/video_integration.py)
- VideoManager: 视频播放管理器。
- 功能:
- 支持多种视频格式 (MP4, AVI, MOV, MKV, WebM)。
- 2D/3D 视频屏幕创建。
- 360度球形视频播放。
- 视频控制 (播放、暂停、时间定位)。
10. 资源管理系统 (core/resource_manager.py)
- ResourceManager: ImGui风格的资源管理器。
- 功能:
- 文件浏览和导航。
- 图标显示和文件类型识别。
- 右键菜单操作。
- 搜索和过滤功能。
- 拖拽支持。
- 文件系统监控和自动刷新。
11. 插件系统 (plugins/)
- PluginManager: 动态插件加载和管理系统。
- 功能:
- 插件生命周期管理 (初始化、启用、禁用、清理)。
- 核心插件、第三方插件和用户插件分类。
- 插件接口规范 (
BasePlugin基类)。 - 插件配置管理。
12. 信息面板系统 (core/InfoPanelManager.py)
- InfoPanelManager: 信息面板管理器。
- 功能:
- 实时信息显示。
- 系统状态监控。
- 调试信息输出。
13. 巡检系统 (core/patrol_system.py)
- PatrolSystem: 自动巡检系统。
- 功能:
- 巡检点管理。
- 自动路径导航。
- 巡检状态控制 (P键切换)。
- 默认巡检路线创建。
14. 命令系统 (core/Command_System.py)
- CommandManager: 命令管理模式。
- 功能:
- 撤销/重做支持。
- 命令历史管理。
- 操作封装和批处理。
15. 装配交互系统 (core/assembly_interaction.py)
- AssemblyInteraction: 装配和拆卸交互系统。
- 功能:
- 装配流程管理。
- 零部件识别和匹配。
- 装配步骤指导。
16. 维护系统 (core/maintenance_gui.py, ui/maintenance_system.py)
- MaintenanceGUI: 维护界面系统。
- 功能:
- 维护任务管理。
- 故障诊断界面。
- 维护记录和报告。
构建与运行
入口点
main.py: 主程序入口,创建MyWorld实例并启动 PyQt5 主窗口。demo.py: ImGui演示程序,展示现代化界面功能。Start_Run.py: 启动脚本。gui_preview_window.py: GUI预览窗口,用于独立测试GUI元素。
运行方式
- 确保已安装所有依赖项(详见 requirements/requirements.txt)。
- 运行
python main.py启动主应用程序。 - 运行
python demo.py启动ImGui演示程序。 - 如果连接了 VR 设备并安装了 SteamVR,可以在应用内启用 VR 模式。
- VR配置可通过
config/vr_settings.json进行调整。
依赖项
项目提供完整的依赖项文件在 requirements/ 目录:
-
requirements.txt: 主要依赖项,包含:
Panda3D==1.10.15(核心3D引擎)PyQt5==5.15.9(GUI框架)openvr==2.2.0(VR支持)p3dimgui(ImGui集成)QPanda3D==0.2.10(Panda3D与PyQt5集成)- 以及其他辅助库
-
conda-requirements.txt: Conda环境依赖项
-
clean-requirements.txt: 精简依赖项
安装命令:
pip install -r requirements/requirements.txt
开发约定
- 模块化设计: 功能被分解到不同的管理器类中,
MyWorld主要起到集成和代理的作用。 - VR 子模块化: VR 功能被组织在
core/vr/目录下,具有清晰的子模块划分。 - 配置驱动: VR 设置通过
config/vr_settings.json文件进行管理,ImGui配置通过imgui.ini管理。 - 性能意识: VR 模块包含大量性能优化措施,如对象池、缓存、智能同步等。
- 向后兼容:
MyWorld通过属性代理保持与旧代码的兼容性。 - 测试模式: VR 系统包含专门的测试模式,便于调试和验证不同功能。
- 插件架构: 支持动态插件加载,核心插件、第三方插件和用户插件分离管理。
- 资源管理: 使用ImGui风格的资源管理器,支持拖拽、右键菜单等现代交互。
- 视频集成: 完整的视频播放支持,包括2D/3D屏幕和360度球形视频。
- 国际化支持: 内置中文字体支持,适合中文环境开发。
- 事件驱动: 完善的事件处理系统,支持键盘快捷键(如F键聚焦、P键巡检)。
- 命令模式: 使用命令系统实现撤销/重做功能。
- 演示系统: demo/ 目录包含大量测试和演示文件,便于功能验证和学习。