#scene-graph #ecs #component #entity

无 std shipyard_scenegraph

实体组件系统场景图

13 个版本

0.6.1 2023年10月19日
0.6.0 2022年9月4日
0.3.3 2020年9月15日
0.3.2 2020年5月28日
0.1.3 2020年3月28日

#153并发

每月 25 次下载

MIT/Apache

62KB
1.5K SLoC

Build Status LICENSE LICENSE Crates.io Documentation Demo

这是什么?

shipyard ECS 的场景图 Crate

基于并重新导出 shipyard-hierarchy

泛型于特定的数字类型,并与第三方数学库互操作(可选择携带自己的数学库)

如何使用

目前 - 直接指向仓库... 由于它们依赖于 shipyard master 分支,最新的更新不在 crates.io 上

测试中有强大的示例。故意将实时演示保持在最小的 2d 示例,而不是花哨的示例,以便更容易学习。

所有情况

  1. 首先,确定您的数学库 - 默认情况下有一个非常小的本地库,以及与 nalgebra f64 的互操作。启用相应的功能(例如 native_mathnalgebra_math)。

  2. 在所有地方使用 shipyard_scenegraph::prelude::*

  3. 调用 shipyard_scenegraph::init::init_scenegraph() 创建根节点

  4. 要向树中添加实体,借用 SceneGraphStoragesMut 然后在上面调用 spawn_child_*()

  5. 要更新事物 - 可变借用 TranslationRotationScaleOrigin。还有一个用于更新单个实体的辅助视图(《TrsStoragesMut》)。或者 - 直接与 LocalTransform 一起工作(但请注意,它目前无法回传。请参阅 https://github.com/dakom/shipyard-scenegraph/issues/22

  6. 运行 local_transform_sysworld_transform_sys 系统(即每次渲染器或物理时间戳),所有局部和世界转换将传播。

  7. 不可变借用 WorldTransform 并渲染

组件和系统

组件

  • TransformRoot(pub EntityId) - 树的根节点
  • DirtyTransform(pub bool) - 标记脏转换的组件
  • Translation
  • Rotation
  • Scale
  • 原始
  • 本地变换
  • 全局变换

系统

  • local_transform_sys
  • world_transform_sys

自定义视图

  • SceneGraphStoragesMut
  • TrsStoragesMut

提供了对支持的数学互操作库的别名,这些具体类型在序言中。

运行测试

核心测试: cargo test --features native_math -- --nocapture Nalgebra 兼容测试: cargo test --features nalgebra_math -- --nocapture

更多数学库互操作

通过 native_math 功能包含了一个最小且高效的数学库,它足够用于小型演示 - 然而,它非常基础,仅包含处理基本变换所需的基本操作(矩阵乘法、从四元数旋转等)。

如果您正在使用 nalgebra,可以通过启用 nalgebra_math 功能来获得底层类型。

其他库可以很容易地添加。

如果在场景图中使用多个数学库,出于某种原因,请不要从序言中导入,而是直接从数学模块导入(这非常不常见 - 连测试都不这样做)

额外内容

由于它基于 shipyard-hierarchy,因此可用于遍历和更新层次结构的方法相同。

场景图给父和子组件提供了一个标签结构 SceneGraph,并且不应与任何其他层次结构冲突,甚至在同一个世界中。

依赖项

约2-3.5MB
约68K SLoC