engvis 0.1.0

Engineering visualization framework with GPU rendering
engvis-0.1.0 is not a library.

engvis

工程可视化框架 - 基于Rust和wgpu的高性能3D工程可视化工具

项目简介

engvis是一个用Rust编写的工程可视化框架,专为工程应用设计。它提供了完整的3D渲染管线,支持glTF模型加载、PBR材质渲染、灵活的相机控制和丰富的UI界面。

主要特性

  • GPU加速渲染: 基于wgpu实现跨平台GPU渲染
  • glTF模型支持: 支持加载glTF格式的3D模型
  • PBR材质系统: 完整的物理渲染材质系统
  • 灵活的相机控制: 轨道相机,支持多种视图模式(前视图、顶视图、右视图、等轴测视图)
  • 顶点和边线渲染: 可视化显示网格的顶点和边线
  • 高级光照系统: 支持环境光、方向光和点光源
  • 实时UI界面: 基于egui的实时参数调整界面
  • 场景管理: 完整的场景图和节点管理系统

项目结构

engvis/
├── crates/
│   ├── engvis-core/      # 核心数据类型和算法
│   └── engvis-renderer/  # GPU渲染实现
└── src/
    └── main.rs           # 主应用程序

engvis-core

核心库,提供:

  • 相机系统(OrbitCamera)
  • 网格数据结构(Mesh, SubMesh, MeshVertex)
  • 材质系统(PbrMaterial)
  • 光照系统(AmbientLight, DirectionalLight, PointLight)
  • 场景管理(Scene, SceneNode)
  • 输入处理(InputState)
  • 包围盒(Aabb)

engvis-renderer

渲染库,提供:

  • GPU上下文管理(GpuContext, GpuResources)
  • 网格渲染器(MeshRenderer)
  • 材质管线(MaterialPipeline)
  • 网格渲染(GridRenderer)
  • 覆盖层渲染(OverlayRenderer)
  • 光照缓冲(LightingBuffer)
  • 纹理缓存(TextureCache)
  • glTF加载器
  • egui集成

快速开始

环境要求

  • Rust 1.70或更高版本
  • 支持Vulkan、Metal或DirectX 12的GPU

运行示例

# 克隆仓库
git clone https://github.com/yourusername/engvis.git
cd engvis

# 运行程序
cargo run --release

使用方法

程序启动后会显示一个默认的立方体场景。你可以:

  1. 加载glTF模型:

    • 点击菜单栏 File -> 输入模型路径 -> 点击 Load glTF
  2. 相机控制:

    • 鼠标左键拖动:旋转视图
    • 鼠标右键拖动:平移视图
    • 鼠标滚轮:缩放
    • 底部面板提供预设视图按钮:Front、Top、Right、Iso、Fit
  3. 调整渲染参数:

    • 左侧面板:场景信息
    • 右侧面板:材质、光照、渲染选项
    • 可以调整表面透明度、边线颜色和宽度、顶点大小等
  4. 光照调整:

    • 在右侧面板调整环境光和方向光的颜色和强度

作为库使用

添加依赖

在你的 Cargo.toml 中添加:

[dependencies]
engvis-core = "0.1.0"
engvis-renderer = "0.1.0"

示例代码

use engvis_core::{OrbitCamera, Scene, SceneNode, Mesh, PbrMaterial};
use engvis_renderer::{Renderer, create_window_and_gpu};
use glam::{Vec3, Affine3A};

// 创建场景
let mut scene = Scene::default();

// 添加网格和材质
scene.meshes.push(your_mesh);
scene.materials.push(PbrMaterial::default());

// 添加场景节点
scene.nodes.push(SceneNode {
    name: "MyObject".to_string(),
    local_transform: Affine3A::IDENTITY,
    mesh_index: Some(0),
    children: Vec::new(),
    visible: true,
});

// 创建相机
let camera = OrbitCamera::new(Vec3::ZERO, 5.0);

// 渲染
// ... 参考examples目录中的完整示例

技术栈

  • wgpu: 跨平台GPU抽象层
  • winit: 窗口管理和事件处理
  • egui: 即时模式GUI库
  • glam: 数学库
  • bytemuck: 零拷贝类型转换

许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。

贡献

欢迎提交Issue和Pull Request!

作者

nil (nil_lilin@163.com)