
# LiziEngine

## 项目概述

向量场可视化引擎，采用现代化的架构设计，提供高性能的向量场计算和渲染功能。

## 项目特点

- **模块化设计**: 将代码按功能划分为多个模块，每个模块职责单一
- **依赖注入**: 避免单例模式，降低模块间耦合
- **事件驱动**: 采用事件系统进行模块间通信，降低耦合度，支持异步处理
- **状态集中管理**: 统一的状态管理，避免全局变量滥用
- **配置统一管理**: 集中的配置管理，支持从文件加载配置和热更新
- **资源管理**: 更好的资源生命周期管理，防止内存泄漏
- **高性能计算**: 支持CPU和GPU加速计算

## 架构设计

### 核心模块 (core/)

- **container.py**: 依赖注入容器，提供依赖注入功能，避免单例模式，降低模块间耦合
- **events.py**: 事件系统，提供发布-订阅模式的事件通信机制，支持异步处理
- **state.py**: 状态管理，提供统一的状态管理功能，支持状态变更通知和状态快照
- **config.py**: 配置管理，提供统一的配置管理功能，支持从文件加载配置和热更新
- **app.py**: 应用核心，整合各个管理器，提供统一的应用程序接口

### 计算模块 (compute/)

- **vector_field.py**: 向量场计算，提供向量场计算的核心功能，支持CPU和GPU计算
- **cpu_vector_field.py**: CPU向量场计算，提供基于CPU的向量场计算功能
- **gpu_vector_field.py**: GPU向量场计算，提供基于OpenCL的GPU向量场计算实现

### 图形模块 (graphics/)

- **renderer.py**: 渲染器，提供向量场的渲染功能，支持OpenGL渲染和着色器程序

### 窗口管理模块 (window/)

- **window.py**: 窗口管理，提供窗口管理功能，支持OpenGL窗口创建和事件处理

## 项目结构

```
LiziEngine-Reborn/
├── docs/              # 文档目录
├── lizi_engine/       # 主代码目录
│   ├── core/          # 核心模块
│   ├── compute/       # 计算模块
│   ├── graphics/      # 图形渲染模块
│   ├── window/        # 窗口管理模块
├── examples/         # 示例代码
├── plugin/           # 插件模块
├── requirements.txt  # 项目依赖
```

## 快速开始

### 安装依赖

```bash
pip install -r requirements.txt
```

### 运行示例

```bash
# 基本使用示例
python examples/basic_usage.py

# 向量场模式示例
python examples/patterns.py
```

## 架构设计

LiziEngine采用现代化的架构设计，主要包括以下模块：

### 核心模块 (core)

- **容器 (container.py)**: 提供依赖注入功能，避免单例模式，降低模块间耦合
- **事件系统 (events.py)**: 提供发布-订阅模式的事件通信机制，支持异步处理
- **状态管理 (state.py)**: 提供统一的状态管理功能，支持状态变更通知和状态快照
- **配置管理 (config.py)**: 提供统一的配置管理功能，支持从文件加载配置和热更新
- **应用核心 (app.py)**: 整合各个管理器，提供统一的应用程序接口

### 计算模块 (compute)

- **向量场计算 (vector_field.py)**: 提供向量场计算的核心功能，支持CPU和GPU计算
- **CPU计算 (cpu_vector_field.py)**: 基于CPU的向量场计算实现
- **GPU计算 (gpu_vector_field.py)**: 基于OpenCL的GPU向量场计算实现

### 图形渲染模块 (graphics)

- **渲染器 (renderer.py)**: 提供向量场的渲染功能，支持OpenGL渲染和着色器程序

### 窗口管理模块 (window)

- **窗口管理 (window.py)**: 提供窗口管理功能，支持OpenGL窗口创建和事件处理

## 开发指南

### 添加新功能

1. 在相应的模块中添加新功能
2. 通过事件系统与其他模块通信
3. 更新配置文件（如需要）
4. 更新状态（如需要）

### 自定义渲染器

1. 继承 `VectorFieldRenderer` 类
2. 重写相应的渲染方法
3. 在应用核心中注册新的渲染器

### 自定义计算器

1. 继承 `VectorFieldCalculator` 类
2. 实现自定义的计算方法
3. 在应用核心中注册新的计算器

## 注意事项

1. 避免直接修改其他模块的内部状态
2. 使用事件系统进行模块间通信
3. 遵循单一职责原则
4. 保持配置和状态的一致性
5. 依赖注入容器负责管理组件的生命周期
6. 使用GPU计算时需要确保OpenCL环境已正确配置

## 许可证

MIT License

