Skip to main content
L
Loopaloo
Buy Us a Coffee
All ToolsImage ProcessingAudio ProcessingVideo ProcessingDocument & TextPDF ToolsCSV & Data AnalysisConverters & EncodersWeb ToolsMath & ScienceGames
Guides & BlogAboutContact
Buy Us a Coffee
L
Loopaloo

Free online tools for developers, designers, and content creators. Your files are processed in your browser and are never uploaded - no accounts required. A few network utilities (like What's My IP and Currency Converter) call public APIs to do their job and say so on their pages.

support@loopaloo.com

Tool Categories

  • Image Tools
  • Audio Tools
  • Video Tools
  • Document & Text
  • PDF Tools
  • CSV & Data
  • Converters
  • Web Tools
  • Math & Science
  • Games

Company

  • About Us
  • Contact
  • Blog
  • FAQ

Legal

  • Privacy Policy
  • Terms of Service
  • Disclaimer

Support

Buy Us a Coffee

© 2026 Loopaloo. All rights reserved. Built with privacy in mind.

Privacy|Terms|Disclaimer
  1. Home
  2. Image Processing
  3. 3D Model Viewer
Add to favorites

3D Model Viewer

Open a GLTF, GLB, OBJ, STL or FBX model and read what is really in it: distinct vertices and position entries as two different numbers, triangles, whether the surface is closed, and a screenshot with the model on it.

Edits stay in your browserMore image processingJump to full guide

Related reading

  • 3D in the Browser: How WebGL and three.js Render Models11 min read

Initializing in your browser…

You might also like

Image Metadata Viewer

Read every metadata block a file carries: EXIF from its TIFF structure, IPTC from its IIM records, XMP from its packet and the ICC colour profile from its header, with GPS converted to decimal degrees with the reference letters applied.

Color Blindness Simulator

See an image through the two published models of colour vision deficiency, Machado 2009 and Vienot 1999, computed in linear light where those models are defined, with the colour pairs that stop being distinguishable listed by name.

Image Cropper

Whole-pixel crops with the rectangle typed or dragged, checked by decoding the output and comparing it with the pixels that went in. Quarter turns and mirrors are exact permutations, so nothing is clipped.

3D Model Viewer: a worked example

Four models generated here, so their statistics are known before anything reads them.

Input

cube.obj · tetra.obj · a 16 by 16 grid · the same cube as a binary STL
What 3D Model Viewer produces

What the page reports

                    in the file    before    after
cube, vertices               8        36        8
cube, position entries      36         -       36
cube, triangles             12        12       12
tetrahedron, vertices        4        12        4
grid, vertices             289     1,536      289

screenshot, 844 x 528
  opaque pixels                       0  445,632
  distinct colours                    1      370

The triangle count was already right. The vertex count was `position.count`, which for a mesh with no index is three per triangle: a cube with eight corners read as 36 and a 289-vertex grid as 1,536. Both numbers are useful and they are different numbers, so both are now on the page with their names. And the screenshot was blank, because a WebGL context clears its drawing buffer as soon as the frame is composited unless it is told not to.

About the 3D Model Viewer

Open a GLTF, GLB, OBJ, STL or FBX model in the browser and read what is really in it: distinct vertices and position entries as the two different numbers they are, triangles, meshes, materials, animations, the bounding box, the surface area, whether the surface is closed, and the volume when it is.

How to use

  1. 1Upload a GLTF, GLB, OBJ, STL or FBX file
  2. 2Drag to orbit, scroll to zoom, right-drag to pan, and reset when you lose it
  3. 3Read the panel: it says what the file contains, not what the renderer happened to allocate
  4. 4Switch the lighting, the wireframe, the grid and the background to see the geometry
  5. 5Press Screenshot for a PNG of the view as framed

Where this helps

  • 3D printing checks

    See the triangle count, the bounding box and whether the surface is closed before slicing.

  • Asset review

    Check a model’s polygon count, materials and animations without opening a 3D suite.

  • Sharing a view

    Frame the model and take a screenshot for a ticket or a document.

Key features

  • Distinct vertices and position entries reported as two different numbers
  • Triangles, meshes, materials and animations counted
  • Whether the surface is closed, and how many open edges it has if not
  • Bounding box, surface area, and volume for a closed surface
  • Triangles with no area counted rather than ignored
  • A screenshot with the model on it
  • GLTF, GLB, OBJ, STL and FBX, with a neutral material for a bare OBJ
  • Orbit, zoom and pan, four lighting presets, wireframe, grid, axes and auto-rotate
  • Everything parsed and drawn locally, with nothing uploaded

Tips & best practices

  • Vertices and Position entries are different numbers on purpose. If they are three times apart, the mesh has no index and every triangle carries its own corners, which is what an STL always does.
  • "Closed surface: no" with a count of open edges is the number to look at before printing: a mesh with a boundary has a hole in it.
  • The volume is only shown for a closed surface, because it is only meaningful for one.
  • The screenshot is the viewer exactly as you have it framed, so orbit to the angle you want first.
  • An OBJ with no material library still shows: the viewer gives it a neutral one rather than drawing it black.

Examples

  • Checking a print before slicing

    Load the STL. The panel says how many triangles it has, whether the surface is closed and how many open edges there are if not, its bounding box in the file’s own units, and its volume.

  • Sizing up an asset

    Load a GLB and read the triangle count, the number of meshes, the number of materials and the number of animations before deciding whether it fits your budget.

  • A screenshot for a ticket

    Orbit to the angle that shows the problem and press Screenshot. The PNG has the model on it, which the previous version’s did not.

How it works

A model viewer has exactly two claims that can be checked, and this pass checked both against models this project GENERATED, so their contents were known before anything read them: a cube is 8 vertices and 12 triangles, a tetrahedron is 4 and 4, and a 16 by 16 grid is 289 and 512.

**A vertex count taken from one attribute is not a vertex count.** The viewer reported `position.count`, and for a mesh with no index, which is what an STL and most OBJ loads produce, every triangle carries its own three positions. So a cube with eight corners was reported as 36 vertices, a tetrahedron as 12, and the 289-vertex grid as 1,536. The triangle count was right all along. Both numbers are real and they answer different questions, so both are on the page now with their names: Vertices is the distinct positions in the file, Position entries is how many the geometry carries. The counting is done by this project’s own mesh module, the same code the fixture generator and the unit tests use, so the phrase "8 vertices and 12 triangles" means one thing in all three places.

**The screenshot was blank.** A WebGL context clears its drawing buffer as soon as the frame is composited unless it is created with `preserveDrawingBuffer`, so `toDataURL` returned a picture of nothing: measured at 844 by 528, one distinct colour, zero opaque pixels, and an 11 KB PNG that looked like a real file. The renderer now preserves its buffer and the frame is drawn again immediately before it is read; the same screenshot comes back with 445,632 opaque pixels and 370 distinct colours.

While the counting was being done properly, the rest of what a file contains came with it: how many separate meshes, how many materials, how many animations, the bounding box, the surface area, whether the surface is CLOSED (every edge shared by exactly two triangles) and how many open edges it has if not, the enclosed volume when it is closed, and the number of triangles with no area at all. Those are the things that decide whether a model will print, and none of them was previously shown.

One more thing was silently wrong: a file chosen before three.js had finished loading was accepted by the input and then dropped, because the loader returns immediately when the library is not there yet. The load now starts when the second of the two arrives, whichever that is.

The viewer itself is three.js with orbit controls: drag to rotate, scroll to zoom, right-drag to pan, with a reset. GLTF, GLB, OBJ, STL and FBX are read; an OBJ with no material gets a neutral one so it is visible. There are four lighting presets, a wireframe toggle, a grid and axes, a background colour, and auto-rotate. Everything is parsed and drawn in your browser and nothing is uploaded, which matters for an unreleased asset.

Frequently asked questions

Why are there two vertex numbers?

Because they answer different questions. Vertices is the distinct positions in the file: a cube has eight corners. Position entries is how many the geometry carries, and a mesh with no index carries three per triangle, so the same cube carries 36. The previous version reported only the second and called it the vertex count.

Why was the screenshot blank before?

A WebGL context clears its drawing buffer as soon as the frame is composited unless it is created with preserveDrawingBuffer, so reading it back gave a picture of nothing: 844 by 528 of one colour with zero opaque pixels. It now preserves the buffer and redraws the frame immediately before reading it.

What does "closed surface" mean?

That every edge is shared by exactly two triangles, which is what a solid needs to be printable. When it is not, the page says how many edges are on the boundary, which is the size of the hole.

Which formats can I load?

GLTF, GLB, OBJ, STL and FBX. An OBJ with no material library is given a neutral material so it is visible rather than black.

Is my model uploaded?

No. It is parsed and drawn in your browser, which matters for an unreleased asset.

Related tools and how they differ

  • 3D Graphing Calculator: Draws a surface from an equation rather than loading one from a file.
  • Image Metadata Viewer: The same idea for a photograph: what the file says about itself.

Further reading

  • 3D in the Browser: How WebGL and three.js Render Models11 min read

Private by design

Images are decoded, edited, and exported entirely inside this browser tab. No originals, exports, or metadata are uploaded.