Roadmap & Status
Easy3D / Guide / Roadmap & Status
This roadmap is intentionally conservative. Easy3D grows only as far as Galaxy Eggbert actually needs it. If a feature is not needed soon, it is not built. Anything not listed here is out of scope until explicitly approved.
Phase 0 — Scaffold done
- Build system (CMake, C++23,
easy3dstatic library target). - Documentation (
README.md, architecture/roadmap/questions docs, contribution rules). - Minimal helper classes (compilable stubs) and a self-contained test.
Phase 1 — Camera helpers done
Easy3D::Camera3D— position/target/up + FOV/aspect/near/far, producing CNA view and projectionMatrixvalues.Easy3D::OrbitCamera— target + yaw/pitch/distance orbit camera.Easy3D::FollowCamera— smoothed follow camera (target + offset + smoothing).
Phase 2 — Data-side batching and atlas helpers done
Non-rendering, CPU-side data storage — no GPU work, no draw calls.
Easy3D::TextureAtlas— named sub-rectangles + UV lookup, plusAddGrid(spritesheet grid insertion) andGetUvOrDefault(non-throwing lookup).Easy3D::BillboardBatch— queuesBillboardItem(position, size, UV, origin, rotation) for camera-facing quads.Easy3D::CubeBatch— queuesCubeItem(center, size, UV) for cubes / tiles.Easy3D::DebugDraw— queuesDebugLine/DebugBoxfor development overlays.
Phase 3 — CPU-side vertex builders in progress
Turn queued BillboardItem / CubeItem / DebugLine / DebugBox data into vertex/index arrays (CPU-side geometry only) — still no GPU calls, no GraphicsDevice, no shaders.
- Done:
AppendCubeMesh/BuildCubeMesh—CubeBatchitems → plainstd::vectorvertex/index arrays. Later extended with related standalone shapes on the same data model:DirectionalCubeItem(per-face UV/visibility),PlateItem(flat double-sided panel),TripleCrossItem(3-plane cross billboard),PyramidTipItem(hanging spike). - Done:
AppendBillboardMesh/BuildBillboardMesh— camera-facingBillboardBatchitems → vertex/index arrays, rebuilt whenever the camera moves. - Remaining: a debug line/box vertex builder — the one Phase 3 gap left.
Phase 4 — CNA renderer adapters in progress
Consume the Phase 3 vertex/index data and actually issue CNA draw calls (GraphicsDevice, BasicEffect, vertex/index buffers). Draw-path decision (made, 2026-07-02): raw VertexBuffer + IndexBuffer + BasicEffect + GraphicsDevice::DrawIndexedPrimitives — the same pattern CNA's own examples/house3d_demo.cpp proves works. SpriteBatch was considered and rejected: it is 2D-only, not usable for cube/billboard geometry.
- Done:
Easy3D::CubeMeshRenderer— uploads aCubeMesh's vertex/index arrays to GPU buffers once, thenDraw(GraphicsDevice&, BasicEffect&)issues the indexed draw call. Verified end-to-end from a real windowed Galaxy Eggbert binary (center-screen pixel readback confirmed real, non-background pixels). - Done:
Easy3D::BillboardMeshRenderer— the same adapter shape for camera-facing quads; must be rebuilt (new instance) whenever the camera moves, since billboard vertex positions are baked in camera-facing at build time. - Remaining: a debug line/box renderer adapter — not started.
Phase 5 — Galaxy Eggbert support future
- Render Blupi as a billboard using existing Mobile Eggbert animation frames.
- Render simple cube / tile terrain.
- Provide debug drawing (lines, boxes) for development.
- Keep all Eggbert-specific logic outside Easy3D — Easy3D supplies generic billboard/cube/atlas/debug helpers only; the meaning of tiles, animation tables, and gameplay live in Galaxy Eggbert.
Phase 6 — Optional future no implementation yet
- Lua: discussion only. Lua is currently undecided and intentionally out of scope. If it ever happens it would be an optional, separate module (working name
easy3d-lua), and only after explicit approval. No Lua code before then. - Possible later: simple HUD/2D helpers (
Easy3D::Hud2D), and a discussion about whether Easy3D should ever load 3D models (vs. staying billboard / cube / tile only).
Current build & test status
| Configuration | Builds | Tests |
|---|---|---|
| Default (headers-only) | libeasy3d.a + CNA-free tests + compile-only checks of the CNA-dependent tests/example | basics, texture_atlas pass |
CNA-linked (-DEASY3D_LINK_CNA=ON) | SHARP_RUNTIME + backend + CNA + easy3d + camera example + all runnable test executables | basics, texture_atlas, camera, batches, cube_mesh, billboard_mesh pass |
The CubeMeshRenderer/BillboardMeshRenderer tests are compile-checked only, in every configuration — they need a live GraphicsDevice from an open window, which a plain test main() can't produce. See Testing for how the full two-tier test setup works.
Hard limits (do not cross without explicit approval)
No ECS, physics, navigation, networking, editor, asset database, resource cache, model importer, MeshCraft import, plugin system, or PBR renderer. The reasoning is on Design Principles.