Skip to content
Novus Examples
obj443 B

OBJ — NaN Vertex Coordinates

The same NaN vertex in Wavefront OBJ, where the literal is the bare token `nan`. Normals are deliberately not written, because the three faces touching that vertex have no computable normal — which is exactly the state an importer must handle rather than serialise.

obj

model/obj

443 B
Format
Wavefront OBJ
Vertices
8
Triangles
12
Nan Vertices
1
Nan Literal
nan
Normals Omitted
true

Binary obj — no in-browser preview. Download it above to open in a compatible application.

Specifications

Format
Wavefront OBJ
Vertices
8
Triangles
12
Nan Vertices
1
Nan Literal
nan
Normals Omitted
true
Note
vn records omitted - they would themselves be NaN

Testing contract

Expected to fail
Scenario
Import the OBJ and check what the importer does with the `nan` token.
Expected result
It is read as IEEE-754 NaN, not as 0 and not as a parse error; the importer must then reject, clamp or drop the vertex, and must report doing so.

What is a .obj file?

OBJ (Wavefront OBJ) is a text-based 3D geometry format defining vertices, texture coordinates, normals, and faces, and referencing materials through a companion MTL file. It is simple, widely supported, and can represent polygonal meshes with UV mapping. It is a common interchange format across 3D tools.

How to use this file

Use an example OBJ to test mesh and UV parsing, MTL material resolution, and importers in 3D engines, renderers, and modeling applications.

How to use this file for testing

“OBJ — NaN Vertex Coordinates” is a deterministic Novus Examples fixture for Mesh repair testing, Error handling. A watertight mesh paired with a deliberately broken twin (holes, missing faces, open ends) — the input and intended result for a mesh-repair / hole-filling tool.

Documented properties for this file: Wavefront OBJ. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.

Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.

3D and CAD fixtures carry one small, documented solid or scene. Convert and inspect against the known geometry, units, and structure; format twins let you diff interchange fidelity, and the 3D viewer previews the actual mesh.

Code examples

import trimesh  # pip install trimesh

mesh = trimesh.load("nan-coordinates.obj")
print(mesh.bounds, mesh.faces.shape)

Generated by generation/models_p7.py. Free for any use, no attribution required — license.