Dimension : Du stockage matriciel à la scène affichée
Dimension est mon espace de travail Rust pour les mathématiques et l’infographie. mathlib fournit les outils numériques; render les utilise pour les transformations et les caméras côté CPU avant de soumettre le travail graphique à wgpu.
Langages du dépôtRust 63.95%10
Parts calculées à partir des octets GitHub Linguist.
| Langage | % | Octets |
|---|---|---|
| Rust | 2 691 477 | |
| JavaScript | 1 340 031 | |
| HTML | 108 173 | |
| Just | 21 784 | |
| CSS | 21 650 | |
| WGSL | 16 946 |
4 autres langages
| TypeScript | 0.13% | 5 627 |
| Python | 0.04% | 1 817 |
| Shell | 0.02% | 751 |
| Dockerfile | 0.01% | 389 |
Aperçu
Pourquoi il existe
Pipeline graphique wgpu haute performance et moteur d'algèbre linéaire implémentés en Rust à partir des fondamentaux.
Cas d’usage
Rendu 3D de cartes de relief accéléré matériellement, transformations spatiales et apprentissage de l'infographie.
Démarrage
Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.
cd kinematics
cargo build
cargo test
cargo bench
cargo run --example forward_kinematics
cargo run --example jacobian_ikjust wasm-build # or just wasm-build-gpu for GPU support
just wasm-servewasm-pack build --target web --features wasmcargo run -p neural --bin download_models -- --allcargo run -p neural --example precompute_demo_embeddings --features precompute -- mathlib/demo/wasm-demo/recommendation/data.jsoncargo run -p render-demo --example render_nativejust render-wasm # build + serve; open http://localhost:3000/wasm-demo/just website-build # Build all WASM demos and populate website/
just website-build-gpu # Same, but with GPU-enabled mathlib (WebGPU init, async matmul, etc.)
just website-build-simd # Same as website-build, but render demo built with SIMD (can improve frame rate)
just website-serve # Serve website/ (e.g. http://localhost:3000)Références du dépôt
Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.
Prérequis et premier essai
Getting started
CONTRIBUTING.md
Exploitation et dépannage
Performance / Troubleshooting
render/demo/README.md
- Use a modern browser with WebGPU enabled (Chrome, Edge, or Firefox with dom.webgpu.enabled) for best frame rate; software or limited WebGPU can cause slow FPS.
- For potentially better FPS on CPU-bound work (math, culling), build the render WASM demo with SIMD: just wasm-render-build-simd, then just wasm-render-serve, and open the same URL.
Développement et contributions
Contributing to Dimension
CONTRIBUTING.md
Development workflow
CONTRIBUTING.md
- Fork and clone the repository.
- Create a branch for your change (e.g. fix/svd-edge-case, feat/sparse-format).
- Make your changes in mathlib/. Keep formatting and style consistent with the existing codebase.
- Run tests and lints:
- Submit a pull request with a clear description of the change and why it’s needed.
E2E tests (Playwright)
e2e/README.md
What the tests do
e2e/README.md
- Render (tests/render.spec.ts): Opens the render WASM demo at /wasm-demo/, checks the canvas is visible with width/height, ensures the error div is not shown, and takes a screenshot for visual regression.
- Kinematics (tests/kinematics.spec.ts): Opens the kinematics-demo WASM at /wasm-demo/, checks the canvas (800×600) is visible and the error div is not shown, verifies the hint text (orbit / IK / zoom), and that the page title matches the demo.
E2E tests (Playwright)
render/demo/README.md
Documentation source
README.mdCONTRIBUTING.mde2e/README.mdparse/README.mdneural/README.mdrender/README.mdmathlib/README.mdnetwork/README.mdphysics/README.mdwebsite/README.mdkinematics/README.mdrender/demo/README.mdmathlib/demo/README.mdphysics/demo/README.mdgeometry/demo/README.mdneural/models/README.mdkinematics/demo/README.mdwebsite/mathlib/README.mdmathlib/demo/wasm-demo/README.mdmathlib/demo/wasm-demo/pkg/README.mdmathlib/demo/wasm-demo/pkg/pkg/README.md
21 documents lus parmi 21 candidats.
Fonctions et composants 2
- Données et opérations numériques
- mathlib expose du stockage dense et creux, des vues matricielles, des vecteurs et des méthodes numériques. L’appelant choisit la représentation adaptée au problème. Les fonctions d’exécution optionnelles sont distinctes de l’API de stockage de base.
- Scène et frontière de plateforme
- render expose World, EntityId et Transform ainsi que des relations parent-enfant dans la scène. Les fenêtres natives et le canevas WebAssembly entourent le moteur de rendu. L’espace de travail contient aussi des crates de géométrie, collision, cinématique et physique.
Architecture
Les composants et leurs liens restent lisibles en texte. Le diagramme ajoute une vue interactive.
- Application ou démo
- Données et transformations mathlib
- Hiérarchie de scène et caméra
- Ressources et passes wgpu
- Fenêtre native ou canevas web
Liens vérifiés dans le dépôt.
Mermaid Diagramme interactif (chargement à l’ouverture)
Vue générale des composants et des échanges vérifiés dans le dépôt.

flowchart LR
subgraph group_data["Linear Algebra Data"]
node_matrix["Matrices<br/>[matrix.rs]"]
node_vector["Vectors<br/>[vector.rs]"]
node_storage[("Matrix Storage<br/>[dense_storage.rs]")]
node_operators["Operators<br/>[operators.rs]"]
end
subgraph group_compute["Compute Backends"]
node_cpu["CPU Dispatch<br/>[mod.rs]"]
node_parallel["Parallel CPU<br/>[parallel.rs]"]
node_sequential["Sequential CPU<br/>[sequential.rs]"]
node_simd["SIMD CPU<br/>[simd.rs]"]
node_executor["Execution<br/>[executor.rs]"]
node_gpu["GPU Compute<br/>[mod.rs]"]
node_pipelines["GPU Pipelines<br/>[pipelines.rs]"]
node_shaders["GPU Shaders<br/>[shaders.rs]"]
end
subgraph group_algorithms["Numerical Algorithms"]
node_linear["Linear Solvers<br/>[solve.rs]"]
node_decomposition["Decomposition<br/>[svd.rs]"]
node_optimization["Optimization<br/>[linesearch.rs]"]
node_graph["Graph Algorithms<br/>[mod.rs]"]
end
subgraph group_domains["Math Domains"]
node_math3d["3D Math<br/>[math3d.rs]"]
node_transforms["Transforms<br/>[mod.rs]"]
node_ml["ML and Statistics<br/>[mod.rs]"]
node_noise["Noise<br/>[mod.rs]"]
end
node_application(("Application"))
node_api["Public API<br/>[lib.rs]"]
node_application -->|"uses"| node_api
node_api -->|"exports"| node_matrix
node_api -->|"exports"| node_vector
node_api -->|"exports"| node_storage
node_api -->|"exposes"| node_operators
node_api -->|"exports"| node_linear
node_api -->|"exports"| node_decomposition
node_api -->|"exports"| node_optimization
node_api -->|"exports"| node_graph
node_api -->|"exports"| node_math3d
node_api -->|"exports"| node_transforms
node_api -->|"exports"| node_ml
node_api -->|"exposes"| node_noise
node_cpu -->|"dispatches"| node_parallel
node_cpu -->|"dispatches"| node_sequential
node_cpu -->|"dispatches"| node_simd
node_pipelines -->|"uses shaders"| node_shaders
class node_matrix,node_vector,node_storage,node_operators toneBlue
class node_cpu,node_parallel,node_sequential,node_simd,node_executor,node_gpu,node_pipelines,node_shaders toneAmber
class node_linear,node_decomposition,node_optimization,node_graph,node_api toneMint
class node_math3d,node_transforms,node_ml,node_noise toneRose
class node_application toneIndigoUn espace de travail mathématique en Rust centré sur mathlib. Les applications construisent des vecteurs, matrices et cubes, puis appliquent des opérations numériques, géométriques et analytiques avant de rejoindre les modules de rendu.
- Composants
- 22
- Connexions
- 17
- Liens appuyés par le code ou le README
- 16/17
Version texte du diagramme
- Application ou démo → Données et transformations mathlib
- Données et transformations mathlib → Hiérarchie de scène et caméra
- Hiérarchie de scène et caméra → Ressources et passes wgpu
- Ressources et passes wgpu → Fenêtre native ou canevas web
Suivre un parcours dans le code
Pour une mise à jour de scène, partez du Transform local et de son parent. Suivez la scène vers le moteur sans supposer qu’un calcul matriciel s’exécute sur le GPU. wgpu est le moteur graphique; l’exécution GPU optionnelle de mathlib est une fonction différente.
Types et structure des fichiers
430 types déclarés, dont 12 dans l’aperçu des relations de base.
Diagramme des types
classDiagram
direction TB
class t4a5cd93435e6["Aabb"] {
<<struct>>
new()
corners()
union()
union_many()
}
class t00c318d02aea["Aabb2"] {
<<struct>>
new()
from_center_half_extents()
corners()
intersects()
}
class tdf807751b6f7["BspNode"] {
<<enum>>
}
class tc84a8c5a51f3["BspTree"] {
<<struct>>
}
class t03c92090f7e7["BvhBuildStrategy"] {
<<enum>>
}
class t8b7035050ae2["BvhNode"] {
<<enum>>
}
class t4cf1ac3511d5["BvhTree"] {
<<struct>>
}
class t2f72a336b45d["BvhRayIter"] {
<<struct>>
}
class t0f551e8e9c62["BvhFrustumIter"] {
<<struct>>
}
class tb5166a8a85e0["Capsule"] {
<<struct>>
new()
aabb()
ray_intersect()
}
class t39e7bad6e68e["Circle"] {
<<struct>>
new()
aabb()
contains_point()
ray_intersect()
}
class ta681312b5c13["Frustum"] {
<<struct>>
from_view_proj()
intersects_aabb()
}
Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.
Index des types
Aabb(struct) ·collision/src/aabb.rs:5Méthodes dans l’aperçu :
new, corners, union, union_many.Aabb2(struct) ·collision/src/aabb2.rs:5Méthodes dans l’aperçu :
new, from_center_half_extents, corners, intersects.BspNode(enum) ·collision/src/bsp.rs:12BspTree(struct) ·collision/src/bsp.rs:36BvhBuildStrategy(enum) ·collision/src/bvh.rs:23BvhNode(enum) ·collision/src/bvh.rs:52BvhTree(struct) ·collision/src/bvh.rs:75BvhRayIter(struct) ·collision/src/bvh.rs:400BvhFrustumIter(struct) ·collision/src/bvh.rs:462Capsule(struct) ·collision/src/capsule.rs:13Méthodes dans l’aperçu :
new, aabb, ray_intersect.Circle(struct) ·collision/src/circle.rs:7Méthodes dans l’aperçu :
new, aabb, contains_point, ray_intersect.Frustum(struct) ·collision/src/frustum.rs:11Méthodes dans l’aperçu :
from_view_proj, intersects_aabb.
Référence
660 / 660 fichiers admissibles lus (800 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.
Ce que couvre l’analyse
Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.
Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.
Carte des fichiers
flowchart TD
root["Dimension"]
f0["Cargo.toml"]
root --> f0
f1["mathlib/src/lib.rs"]
root --> f1
f2["render/src/lib.rs"]
root --> f2
f3["README.md"]
root --> f3
f4[".devcontainer/post-create.sh"]
root --> f4
f5["collision/Cargo.toml"]
root --> f5
f6["collision/build.rs"]
root --> f6
f7["e2e/README.md"]
root --> f7
f8["e2e/package.json"]
root --> f8
f9["e2e/playwright.config.ts"]
root --> f9
f10["geometry/Cargo.toml"]
root --> f10
f11["kinematics/Cargo.toml"]
root --> f11
f12["kinematics/README.md"]
root --> f12
f13["mathlib/Cargo.toml"]
root --> f13
f14["mathlib/README.md"]
root --> f14
f15["mathlib/build.rs"]
root --> f15
Fichiers à lire 3
Références
- GitHubDépôt source
- READMEDocumentation du dépôt
- Dimension : relier les mathématiques Rust au renduArticle du blog