Aller au contenu

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.

Bibliothèque
  • Mis à jour
  • Rust · 63.95%
  • MIT
Langages du dépôtRust 63.95%10

Parts calculées à partir des octets GitHub Linguist.

Langage%Octets
Rust63.95%2 691 477
JavaScript31.84%1 340 031
HTML2.57%108 173
Just0.52%21 784
CSS0.51%21 650
WGSL0.4%16 946
4 autres langages
TypeScript0.13%5 627
Python0.04%1 817
Shell0.02%751
Dockerfile0.01%389

GitHub · README · Statistiques de langages

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.

kinematics/README.md · Build, test, bench
cd kinematics
cargo build
cargo test
cargo bench
cargo run --example forward_kinematics
cargo run --example jacobian_ik
mathlib/demo/README.md · Build and serve
just wasm-build      # or just wasm-build-gpu for GPU support
just wasm-serve
mathlib/demo/wasm-demo/README.md · Build
wasm-pack build --target web --features wasm
neural/README.md · Downloading ONNX models
cargo run -p neural --bin download_models -- --all
neural/README.md · Precomputing embeddings for the WASM recommendation demo
cargo run -p neural --example precompute_demo_embeddings --features precompute -- mathlib/demo/wasm-demo/recommendation/data.json
render/README.md · Build and run
cargo run -p render-demo --example render_native
render/README.md · Build and run
just render-wasm         # build + serve; open http://localhost:3000/wasm-demo/
website/README.md · Build and serve (local)
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)
Commandes déclarées dans les manifestes

e2e/package.json

test
playwright test

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

All code lives in the mathlib/ crate. From the repo root: Optional: use just from the repo root (see justfile) for common tasks. For a containerized dev environment, see .devcontainer. For pre-commit hooks (fmt, clippy, typos), see .pre-commit-config.yaml and docs/dev-tools.md.
Lire les instructions complètes ↗
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.
Lire les instructions complètes ↗
Développement et contributions

Contributing to Dimension

CONTRIBUTING.md

Thanks for your interest in contributing. This project hosts mathlib, a Rust linear algebra library.
Lire les instructions complètes ↗

Development workflow

CONTRIBUTING.md

  1. Fork and clone the repository.
  2. Create a branch for your change (e.g. fix/svd-edge-case, feat/sparse-format).
  3. Make your changes in mathlib/. Keep formatting and style consistent with the existing codebase.
  4. Run tests and lints:
  5. Submit a pull request with a clear description of the change and why it’s needed.
Lire les instructions complètes ↗

E2E tests (Playwright)

e2e/README.md

Browser end-to-end tests for WASM demos. Requires Node.js and Playwright browsers.
Lire les instructions complètes ↗

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.
Lire les instructions complètes ↗

E2E tests (Playwright)

render/demo/README.md

From repo root:
Lire les instructions complètes ↗
Documentation source

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.

Contexte système Contexte
  1. Application ou démo
  2. Données et transformations mathlib
  3. Hiérarchie de scène et caméra
  4. Ressources et passes wgpu
  5. 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.

Vue statique de l’architecture de Dimension
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
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 toneIndigo

Un 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

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