GLANCE 3D
P—02 v 0.1.0 Windows / Linux / macOS ← spei.dev
Released C# · .NET 8 · OpenGL 3.3 github.com/speidev/Glance3D ↗
Open a 3D model. Orbit around it. Close it.

Glance3D is a tiny standalone viewer for glTF and GLB files. There's no editor, no scene panel and no installer: drop a model on the window and look at it. It's about 1,800 lines of C# on a hand-written OpenGL renderer, small enough to read in an afternoon. It runs on the desktop and, compiled to WebAssembly, right here on this page.

The button loads Glance3D itself: the same C# loader, camera and shaders as the desktop app, compiled to WebAssembly and drawn with WebGL2. Drop your own .glb on it, or open it full screen ↗. Files never leave your browser.

One self-contained executable per platform (x64; Apple Silicon on macOS). No .NET install needed. Run glance3d model.glb or drop a file on the window.
The builds aren't code-signed yet, so SmartScreen may warn on first run (More info → Run anyway). On macOS, clear the quarantine flag with xattr -d com.apple.quarantine glance3d. Release notes.

C# .NET 8 OpenGL GLSL glTF 2.0 OpenTK WebAssembly WebGL2 MIT
01Left drag orbits the model. Right drag (or Shift + left) pans. The wheel zooms toward the pivot.
02Double-click any surface and the camera orbits around that point from then on, which helps with close inspection.
03Tab switches to fly mode: WASD to move, QE down and up, Shift for speed. Switching back doesn't jump the view.
04F frames the model, R resets the view, Z toggles wireframe, G toggles the floor grid, F11 goes fullscreen.
FormatsglTF 2.0Binary .glb and JSON .gltf with external or embedded buffers. In the browser: .glb.
SceneNode hierarchyNode transforms are baked in at load, mirrored instances keep their winding, and triangle strips and fans are expanded.
MaterialsBase colorTexture × factor × vertex color. Alpha mask and blend, double-sided, and KHR_materials_unlit.
Pixel artNEAREST samplersA model that asks for nearest filtering gets it, so palette-textured low-poly art stays crisp.
CharactersSkinsSkinned meshes are posed by their joints and shown in bind pose instead of falling apart at the origin.
Not yetRoadmapAnimation playback, morph targets, PBR metal/roughness, KTX2/WebP textures.
Headlessglance3d chair.glb --capture chair.png --size 1024x1024 --view -90,-10 renders one frame offscreen and exits.
FramingThe camera fits the model's bounding sphere to the narrower field of view at any aspect ratio.
Requires.NET 8 SDK and a GPU with OpenGL 3.3
Rundotnet run --project src/Glance3D -- model.glb
Webdotnet publish src/Glance3D.Web gives a static site. No extra workloads are needed.
LayoutGlance3D.Core holds all viewer logic. The desktop (OpenTK) and browser (WebAssembly) hosts are thin shells.
TestsxUnit, headless: camera math, projection and culling, picking, input mapping, loader orientation and winding, CLI, PNG output
CIBuilds and tests on Windows, Linux and macOS. Tagged releases publish all three binaries, and every push to main redeploys the browser build.
LicenseMIT