diff --git a/src/main/java/cam72cam/mod/model/obj/FaceAccessor.java b/src/main/java/cam72cam/mod/model/obj/FaceAccessor.java index 75382e3cc..aa14d702b 100644 --- a/src/main/java/cam72cam/mod/model/obj/FaceAccessor.java +++ b/src/main/java/cam72cam/mod/model/obj/FaceAccessor.java @@ -72,21 +72,12 @@ public FaceAccessor getSubByGroup(String groupName) { * @return OBJFace of current face */ public OBJFace asOBJFace() { - OBJFace face = new OBJFace(); - - face.vertex0 = new OBJFace.Vertex(v0); - face.vertex1 = new OBJFace.Vertex(v1); - face.vertex2 = new OBJFace.Vertex(v2); - - if (vbo.hasNormals) { - face.normal = v0.normAsVec3d(); - } else { - Vec3d v0 = face.vertex0.pos; - Vec3d v1 = face.vertex1.pos; - Vec3d v2 = face.vertex2.pos; - face.normal = v1.subtract(v0).crossProduct(v2.subtract(v0)).normalize(); - } - return face; + OBJFace.Vertex vert0 = new OBJFace.Vertex(v0); + OBJFace.Vertex vert1 = new OBJFace.Vertex(v1); + OBJFace.Vertex vert2 = new OBJFace.Vertex(v2); + return new OBJFace(vert0, vert1, vert2, + vbo.hasNormals ? v0.normAsVec3d() + : vert1.pos.subtract(vert0.pos).crossProduct(vert2.pos.subtract(vert0.pos)).normalize()); } /** diff --git a/src/main/java/cam72cam/mod/model/obj/OBJFace.java b/src/main/java/cam72cam/mod/model/obj/OBJFace.java index eeaf61fdf..27fde9ef7 100644 --- a/src/main/java/cam72cam/mod/model/obj/OBJFace.java +++ b/src/main/java/cam72cam/mod/model/obj/OBJFace.java @@ -4,32 +4,38 @@ import cam72cam.mod.math.Vec3d; public class OBJFace { - public Vertex vertex0; - public Vertex vertex1; - public Vertex vertex2; - - public Vec3d normal; + public final Vertex vertex0; + public final Vertex vertex1; + public final Vertex vertex2; + + public final Vec3d normal; + //TODO more accurate one + private IBoundingBox box; + + public OBJFace(Vertex vertex0, Vertex vertex1, Vertex vertex2, Vec3d normal) { + this.vertex0 = vertex0; + this.vertex1 = vertex1; + this.vertex2 = vertex2; + this.normal = normal; + } public IBoundingBox getBoundingBox() { - Vec3d min = vertex0.pos.min(vertex1.pos.min(vertex2.pos)); - Vec3d max = vertex0.pos.max(vertex1.pos.max(vertex2.pos)); - return IBoundingBox.from(min, max); + if (box == null) { + //Uses AABB for now but we may want OBB or something more accurate in the future + Vec3d min = vertex0.pos.min(vertex1.pos.min(vertex2.pos)); + Vec3d max = vertex0.pos.max(vertex1.pos.max(vertex2.pos)); + box = IBoundingBox.from(min, max); + } + return box; } public OBJFace scale(double factor) { - OBJFace scaled = new OBJFace(); - - scaled.vertex0 = vertex0.scale(factor); - scaled.vertex1 = vertex1.scale(factor); - scaled.vertex2 = vertex2.scale(factor); - - scaled.normal = new Vec3d(normal.internal()); - return scaled; + return new OBJFace(vertex0.scale(factor), vertex1.scale(factor), vertex2.scale(factor), normal); } public static class Vertex { - public Vec3d pos; - public Vec2f uv; + public final Vec3d pos; + public final Vec2f uv; public Vertex(Vec3d vertex, Vec2f uv) { this.pos = vertex;