From 4d64783d83a93b34213424f4b92dc0bb65e40dd5 Mon Sep 17 00:00:00 2001 From: Caspian Rychlik-Prince Date: Sun, 18 Apr 2004 18:59:49 +0000 Subject: [PATCH] A utility Model class --- src/java/org/lwjgl/util/model/Frame.java | 62 ++++++++++++++ src/java/org/lwjgl/util/model/Mesh.java | 92 +++++++++++++++++++++ src/java/org/lwjgl/util/model/Model.java | 81 ++++++++++++++++++ src/java/org/lwjgl/util/model/Triangle.java | 54 ++++++++++++ src/java/org/lwjgl/util/model/Vertex.java | 89 ++++++++++++++++++++ 5 files changed, 378 insertions(+) create mode 100644 src/java/org/lwjgl/util/model/Frame.java create mode 100644 src/java/org/lwjgl/util/model/Mesh.java create mode 100644 src/java/org/lwjgl/util/model/Model.java create mode 100644 src/java/org/lwjgl/util/model/Triangle.java create mode 100644 src/java/org/lwjgl/util/model/Vertex.java diff --git a/src/java/org/lwjgl/util/model/Frame.java b/src/java/org/lwjgl/util/model/Frame.java new file mode 100644 index 00000000..818010e7 --- /dev/null +++ b/src/java/org/lwjgl/util/model/Frame.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2003 Shaven Puppy Ltd + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'Shaven Puppy' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.util.model; + +import java.io.Serializable; + +import org.lwjgl.vector.Matrix4f; + +/** + * A Frame describes a set of new positions for Bones. + */ +public class Frame implements Serializable { + + public static final long serialVersionUID = 1L; + + /** The new transformations for each Bone in the Skeleton */ + private final Matrix4f[] bone; + + /** + * C'tor + * @param bone[] + */ + public Frame(Matrix4f[] bone) { + this.bone = bone; + } + + /** + * @return the Bones + */ + public Matrix4f[] getBone() { + return bone; + } +} diff --git a/src/java/org/lwjgl/util/model/Mesh.java b/src/java/org/lwjgl/util/model/Mesh.java new file mode 100644 index 00000000..fa419b89 --- /dev/null +++ b/src/java/org/lwjgl/util/model/Mesh.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2003 Shaven Puppy Ltd + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'Shaven Puppy' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.util.model; + +import java.io.Serializable; + +/** + * $Id$ + * + * A Mesh is a collection of Triangles that all share the same material (ie. rendering + * state). + * + * @author $Author$ + * @version $Revision$ + */ +public class Mesh implements Serializable { + + public static final long serialVersionUID = 1L; + + /** Material */ + private final String material; + + /** Vertices */ + private final Vertex[] vertex; + + /** Triangles */ + private final Triangle[] triangle; + + + /** + * C'tor + * @param material + * @param vertex + * @param triangle + */ + public Mesh(String material, Vertex[] vertex, Triangle[] triangle) { + this.material = material; + this.vertex = vertex; + this.triangle = triangle; + } + + /** + * @return Returns the material. + */ + public String getMaterial() { + return material; + } + + /** + * @return Returns the triangles. + */ + public Triangle[] getTriangle() { + return triangle; + } + + /** + * @return Returns the vertices + */ + public Vertex[] getVertex() { + return vertex; + } + +} diff --git a/src/java/org/lwjgl/util/model/Model.java b/src/java/org/lwjgl/util/model/Model.java new file mode 100644 index 00000000..5be548b8 --- /dev/null +++ b/src/java/org/lwjgl/util/model/Model.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2002 Light Weight Java Game Library Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'Light Weight Java Game Library' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.lwjgl.util.model; + +import java.io.Serializable; + + +/** + * $Id$ + * + * A simple animated, skinned, boned 3D model, consisting of a single mesh + * with a single material. + * + * @author $Author$ + * @version $Revision$ + */ +public class Model implements Serializable { + + public static final long serialVersionUID = 1L; + + /** The Mesh */ + private final Mesh mesh; + + /** The animations */ + private final Frame[] frame; + + /** + * C'tor + * @param mesh + * @param frame + */ + public Model(Mesh mesh, Frame[] frame) { + this.mesh = mesh; + this.frame = frame; + } + + /** + * @return the Frames + */ + public Frame[] getFrame() { + return frame; + } + + /** + * @return the Mesh + */ + public Mesh getMesh() { + return mesh; + } + +} diff --git a/src/java/org/lwjgl/util/model/Triangle.java b/src/java/org/lwjgl/util/model/Triangle.java new file mode 100644 index 00000000..46d1691b --- /dev/null +++ b/src/java/org/lwjgl/util/model/Triangle.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2003 Shaven Puppy Ltd + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'Shaven Puppy' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.util.model; + +/** + * $Id$ + * @author $Author$ + * @version $Revision$ + */ +public class Triangle { + + public static final long serialVersionUID = 1L; + + /** Vertex indices: these look up into the parent Mesh's vertex array */ + private int a, b, c; + + /** Adjacency, for stripification */ + private int adjacency; + + /** + * C'tor + */ + public Triangle() { + } +} diff --git a/src/java/org/lwjgl/util/model/Vertex.java b/src/java/org/lwjgl/util/model/Vertex.java new file mode 100644 index 00000000..8cd3d53c --- /dev/null +++ b/src/java/org/lwjgl/util/model/Vertex.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2003 Shaven Puppy Ltd + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'Shaven Puppy' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.util.model; + +import java.io.Serializable; + +/** + * $Id$ + * + * A single vertex in a Triangle + * + * @author $Author$ + * @version $Revision$ + */ +public class Vertex implements Serializable { + + public static final long serialVersionUID = 1L; + + /** Coordinates */ + private final float x, y, z; + + /** Normal */ + private final float nx, ny, nz; + + /** Texture coordinates */ + private final float u, v; + + /** Bone indices */ + private final int[] bone; + + /** Bone weights */ + private final float[] weight; + + /** + * C'tor + * @param x + * @param y + * @param z + * @param nx + * @param ny + * @param nz + * @param u + * @param v + * @param bone + * @param weight + */ + public Vertex(float x, float y, float z, float nx, float ny, float nz, + float u, float v, int[] bone, float[] weight) { + this.x = x; + this.y = y; + this.z = z; + this.nx = nx; + this.ny = ny; + this.nz = nz; + this.u = u; + this.v = v; + this.bone = bone; + this.weight = weight; + } +}