diff --git a/src/assembly.rs b/src/assembly.rs index a9aaf53..bd2b314 100644 --- a/src/assembly.rs +++ b/src/assembly.rs @@ -91,6 +91,17 @@ impl AssemblyBuilder { panic!("Attempted to add instance with a name that doesn't exist."); } + // Map zero-length transforms to None + let xforms = if let Some(xf) = xforms { + if xf.len() > 0 { + Some(xf) + } else { + None + } + } else { + None + }; + // Create instance let instance = if self.object_map.contains_key(name) { Instance { diff --git a/src/surface/triangle_mesh.rs b/src/surface/triangle_mesh.rs index c5118c8..9504b95 100644 --- a/src/surface/triangle_mesh.rs +++ b/src/surface/triangle_mesh.rs @@ -75,7 +75,13 @@ impl Surface for TriangleMesh { |a, b, t| { (lerp(a.0, b.0, t), lerp(a.1, b.1, t), lerp(a.2, b.2, t)) }); - let mat_space = lerp_slice(space, wr.time); + // TODO: when there's no transforms, we don't have to + // transform the triangles at all. + let mat_space = if space.len() > 0 { + lerp_slice(space, wr.time) + } else { + Matrix4x4::new() + }; let mat_inv = mat_space.inverse(); let tri = (tri.0 * mat_inv, tri.1 * mat_inv, tri.2 * mat_inv); if let Some((t, _, _)) = triangle::intersect_ray(wr, tri) {