v2.0.0 最新版本

百万粒子
GPU 物理引擎

高性能 N-body 模拟,CUDA 加速,实时 OpenGL 可视化, 三种力计算算法。可模拟高达 100 万粒子,帧率达 60+ FPS。

100万+ 粒子
60+ FPS
3 算法

力计算算法

根据您的模拟需求选择合适的算法

直接 N²

O(N²)

精确的成对力计算

Barnes-Hut

O(N log N)

层次八叉树近似

空间哈希

O(N)

基于网格的短程力

性能基准

在 NVIDIA RTX 3080, CUDA 11.8 上的实时 FPS

粒子数 直接 N² Barnes-Hut 空间哈希
10K 60 FPS 120 FPS 120 FPS
100K 10 FPS 60 FPS 90 FPS
1M 1 FPS 25 FPS 60 FPS

FPS 对比(越高越好)

10K
100K
1M
直接 N²
Barnes-Hut
空间哈希

内存占用: 每粒子约 52 字节 + 算法开销。大规模模拟推荐: Barnes-Hut 适用于引力系统,空间哈希适用于短程力。

核心特性

高性能粒子模拟所需的一切

GPU 加速

CUDA 并行处理,每个粒子一个线程

三种算法

直接 N²、Barnes-Hut O(N log N)、空间哈希 O(N)

零拷贝渲染

CUDA-OpenGL 互操作,消除 CPU↔GPU 数据传输

能量守恒

Velocity Verlet 辛积分器

实时 60+ FPS

流畅可视化,支持高达 100 万粒子

跨平台

支持 Linux、Windows、macOS(需 NVIDIA GPU)

系统架构

模拟系统组件的高层概览

CPU (主机端) SimulationConfig 配置管理 ParticleSystem 协调器 Render Loop 可视化 CUDA-GL 互操作 GPU (设备端) 力计算内核 N² / Barnes-Hut / 空间哈希 (策略模式) 积分器 Velocity Verlet (辛积分器) OpenGL 点精灵渲染 (零拷贝)

设计模式

  • 策略模式 — 运行时算法切换
  • 桥接模式 — CUDA-OpenGL 互操作抽象
  • 外观模式 — 简洁的 ParticleSystem API

内存布局

  • 结构数组 (SoA) — GPU 合并访问
  • 共享 VBO — 零拷贝渲染
  • 共享内存 — 内核缓存

快速开始

几分钟内开始 N-Body 模拟

example.cpp
#include "nbody/particle_system.hpp"

using namespace nbody;

int main() {
    // 配置模拟
    SimulationConfig config;
    config.particle_count = 100'000;
    config.force_method = ForceMethod::BARNES_HUT;
    config.dt = 0.001f;
    config.init_distribution = InitDistribution::SPHERICAL;

    // 初始化并运行
    ParticleSystem system;
    system.initialize(config);

    for (int step = 0; step < 10'000; ++step) {
        system.update(system.getTimeStep());

        // 保存检查点
        if (step % 1000 == 0) {
            system.saveState("checkpoint_" + std::to_string(step) + ".nbody");
        }
    }

    return 0;
}

开源项目

加入 GitHub 社区

发现 Bug 或有功能建议?

提交 Issue