FAQ

Easy3D / Examples / FAQ

Why doesn't Easy3D actually draw anything?

By design, for now. Easy3D is built in deliberate phases: the batching classes (Phase 2) store plain data, the vertex builders (Phase 3, in progress) turn that data into CPU-side geometry, and only Phase 4 will issue actual CNA draw calls. This keeps every step testable without a GPU and defers the concrete CNA draw-path decision (BasicEffect? SpriteBatch? raw buffers?) to the phase that actually needs it. Until then, Items()/Lines()/Boxes() and BuildCubeMesh() give your game everything it needs to draw with CNA directly. See the Roadmap.

Why are CNA types exposed in the API instead of wrapped?

Because Easy3D is a companion, not an abstraction layer. Hiding CNA behind Easy3D types would make Easy3D a middleman for everything — exactly the engine-shaped drift the project guards against. Easy3D functions take and return Microsoft::Xna::Framework::Vector3, Matrix, and friends directly, so the values plug straight into the CNA code your game already writes. The reasoning is spelled out in Design Principles.

I get linker errors like undefined reference to Vector3::Vector3(float, float, float). What's wrong?

You are executing CNA math without linking the CNA library. CNA's math types are declared in headers but defined in CNA's compiled .cpp files, so the code compiles and then fails at link time. Fixes:

Full details on Building & CMake.

Do I need to build all of CNA (SDL3, ffmpeg, …) just to use Easy3D?

No — that's the point of the default build. It compiles the easy3d library against CNA's headers only and runs the CNA-free tests. You only pay for the full CNA build when your executable actually runs CNA math (cameras, batch item construction), which for a real game is true anyway.

Is TextureAtlas really usable without CNA?

Yes — completely. TextureAtlas deliberately uses its own small PODs (AtlasRect, UvRect) and never touches CNA types. It builds, runs, and is unit-tested in the default headers-only build.

Will Easy3D get Lua scripting?

Not currently. Lua is intentionally out of scope for this version. If it is ever approved, it would be an optional, separate module (working name easy3d-lua) — and no Lua code lands before that explicit approval. See the Roadmap, Phase 6.

Will Easy3D load 3D models?

No — Easy3D stays billboard / cube / tile only for the first Galaxy Eggbert versions. A model importer is one of the recorded hard limits; whether Easy3D should ever load models is at most a future discussion. See Design Principles.

What are Galaxy Eggbert, Mobile Eggbert, and Blupi?

Speedy Blupi (a.k.a. Speedy Eggbert) is a classic 2D platformer; Mobile Eggbert is an existing remake of it in the same project family. Galaxy Eggbert is a planned 3D remake — and Easy3D's first concrete consumer. The plan: Blupi rendered as a billboard from existing Mobile Eggbert sprite frames, levels as cube/tile terrain. All Eggbert-specific logic (tile meanings, animation tables, gameplay) lives in the game, never in Easy3D.

How does Easy3D relate to Simple3D / Nova-3D / MeshCraft?

They are earlier, larger 3D abstraction attempts in the same project family. Easy3D is explicitly not them and must not grow back into them — no ECS, no engine object hierarchy, no model pipeline. They serve as conceptual lessons only; their code is never copied into Easy3D.

Why is FollowCamera's smoothing defined against 1/60 s?

The smoothing value means "fraction of the remaining gap closed per 1/60 s of elapsed time" — a fixed reference that makes the value frame-rate independent (30, 60, and 144 fps all behave the same). The 60 is kept for continuity with tuning done when the project's game loop targeted 60 fps and is part of the value's contract. The math is on the FollowCamera page.

What license is Easy3D under?

Easy3D is licensed under the MIT License. CNA itself is licensed under the Microsoft Public License (Ms-PL); Easy3D only uses CNA's public headers — it does not copy CNA source.

Can I contribute a feature?

Keep it small, boring, and testable — and check the Roadmap and Design Principles first. Features on the hard-limit list (ECS, physics, model import, Lua, …) need explicit approval from the project owner before any code. If a helper only makes sense for Galaxy Eggbert or Mobile Eggbert, it belongs in that project instead. When you add behavior that can be tested without linking all of CNA, add a small test (see Testing), and keep the default build green.