Skip to content

Latest commit

 

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

计算机图形学实验week1:基于Taichi的万有引力粒子系统

📋 实验概述

本次实验旨在建立一个现代化、高效率的图形学开发环境,并基于此环境完成一个万有引力粒子系统的仿真。实验采用了当前主流的工程实践:uv包管理器实现项目级依赖隔离、src布局实现代码逻辑解耦、Taichi编程语言实现GPU并行计算,最终构建了一个完整的“环境搭建-逻辑解耦-GPU计算-可视化”开发链路。

项目地址: https://github.com/wrh-human/2026_CG_work0_wrh

姓名:王若涵

学号:202411081042


🏗️ 项目架构

1. 目录结构

本项目采用标准的 src 布局 (Source Layout),通过物理隔离核心代码与配置文件,彻底解决相对路径混淆和“根目录污染”问题:

2026_CG_work0_wrh/
├── src/                          # 核心源代码目录
│   ├── __init__.py               # 包初始化文件
│   ├── main.py                    # 程序入口:初始化并启动仿真
│   ├── physics.py                  # 物理引擎:万有引力计算
│   ├── config.py                    # 配置文件:仿真参数设置
│   └── test.py                       # 单元测试:验证物理逻辑
├── .gitignore                      # Git忽略配置
├── README.md                       # 项目文档
├── pyproject.toml                  # uv项目配置文件
└── uv.lock                          # 依赖版本锁定文件

2. 技术栈选型

组件 技术选型 作用
包管理器 uv 极速依赖解析,项目级环境隔离
编程语言 Python 3.x 快速开发,生态丰富
并行计算 Taichi GPU加速,类CUDA语法,实时可视化
项目结构 src布局 代码与配置分离,避免路径污染

🧠 代码逻辑设计

1. 模块职责划分

config.py - 配置中心

集中管理所有仿真参数,实现配置与逻辑的解耦:

# --- 物理系统参数 ---
NUM_PARTICLES = 100000     # 粒子总数 (卡顿请调小此数值,如 2000)
GRAVITY_STRENGTH = 0.001   # 鼠标引力强度
DRAG_COEF = 0.98           # 空气阻力系数
BOUNCE_COEF = -0.8         # 边界反弹能量损耗# --- 渲染系统参数 ---
WINDOW_RES = (800, 600)    # 窗口分辨率
PARTICLE_RADIUS = 1.5      # 粒子绘制半径
PARTICLE_COLOR = 0xFFC9ED  # 粒子颜色 (粉色) 

physics.py —— 物理引擎

封装万有引力计算核心算法,利用 Taichi 的 GPU 并行能力:

  • 万有引力计算F = G * (m1 * m2) / (r² + ε²)
  • 软化因子 (ε):避免粒子距离过近时引力趋于无穷大。
  • 并行加速:通过 @ti.kernel 装饰器在 GPU 上并行计算所有粒子的受力。

main.py—— 程序入口

负责任务调度与可视化循环:

  • 初始化 Taichi 系统和 GUI 窗口
  • 从 config 加载配置参数
  • 初始化粒子系统(随机位置、随机质量)
  • 主循环:计算引力 → 更新速度/位置 → 渲染粒子 → 处理交互
  • 实时显示帧率 (FPS)

2. 数据流图

┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│  config.py  │────▶│   main.py    │────▶│  physics.py │
│  (参数配置)  │     │  (初始化调度) │     │  (GPU计算)  │
└─────────────┘     └──────┬──────┘     └──────┬──────┘
                           │                    │
                           ▼                    ▼
                    ┌──────────────┐     ┌─────────────┐
                    │  可视化循环   │◀────│ 粒子状态更新 │
                    │  (GUI渲染)   │     │ (位置/速度) │
                    └──────────────┘     └─────────────┘

✨ 实现功能

1. 核心功能

功能 实现方式 技术亮点
✅ 万有引力模拟 牛顿万有引力公式 + 软化因子 Taichi GPU 并行计算所有粒子对
✅ 粒子系统 位置、速度、质量属性 支持大规模粒子(1024+)
✅ 碰撞避免 引力软化因子 (ε) 防止粒子过度靠近导致数值爆炸
✅ 实时可视化 Taichi 的 GUI 模块 实时显示粒子运动轨迹
✅ 性能监控 内置 FPS 计数器 展示 GPU 并行计算性能

2. 交互功能

交互方式 功能 操作说明
🖱️ 鼠标拖动 添加扰动 鼠标拖动区域内的粒子受到额外推力
⌨️ 空格键 重置仿真 重新初始化粒子系统
⌨️ ESC 键 退出程序 安全退出仿真

3. 工程实践

  • 环境隔离:uv 创建独立虚拟环境,避免依赖冲突
  • 代码解耦:src 布局分离核心代码与配置文件
  • GPU 加速:Taichi 自动将 Python 代码编译为 GPU 指令
  • 版本控制:.gitignore 忽略 .venv、pycache 等本地文件

🎥 效果展示

  • 运行演示视频 演示动画

About

Job Submission

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages