Models! Models! Models!
This commit is contained in:
parent
4d64783d83
commit
f62ab7b620
|
@ -33,7 +33,7 @@ package org.lwjgl.util.model;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
import org.lwjgl.vector.Matrix4f;
|
import org.lwjgl.util.vector.Matrix4f;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Frame describes a set of new positions for Bones.
|
* A Frame describes a set of new positions for Bones.
|
||||||
|
|
|
@ -33,13 +33,16 @@
|
||||||
package org.lwjgl.util.model;
|
package org.lwjgl.util.model;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* $Id$
|
* $Id$
|
||||||
*
|
*
|
||||||
* A simple animated, skinned, boned 3D model, consisting of a single mesh
|
* A simple animated, skinned, boned 3D model, consisting of a single mesh
|
||||||
* with a single material.
|
* with a single material. The model's internal format is optimised for RAM storage;
|
||||||
|
* no metadata is held in memory - in other words this is not a good class to use
|
||||||
|
* for, say, a 3d modelling application.
|
||||||
*
|
*
|
||||||
* @author $Author$
|
* @author $Author$
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
|
@ -51,24 +54,25 @@ public class Model implements Serializable {
|
||||||
/** The Mesh */
|
/** The Mesh */
|
||||||
private final Mesh mesh;
|
private final Mesh mesh;
|
||||||
|
|
||||||
/** The animations */
|
/** The animations: a Map of string names to Frame[] arrays */
|
||||||
private final Frame[] frame;
|
private final Map animation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* C'tor
|
* C'tor
|
||||||
* @param mesh
|
* @param mesh
|
||||||
* @param frame
|
* @param frame
|
||||||
*/
|
*/
|
||||||
public Model(Mesh mesh, Frame[] frame) {
|
public Model(Mesh mesh, Map animation) {
|
||||||
this.mesh = mesh;
|
this.mesh = mesh;
|
||||||
this.frame = frame;
|
this.animation = animation;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the Frames
|
* @param name The name of the animation
|
||||||
|
* @return the Frames of an animation (or null, if no such animation exists)
|
||||||
*/
|
*/
|
||||||
public Frame[] getFrame() {
|
public Frame[] getAnimation(String name) {
|
||||||
return frame;
|
return (Frame[]) animation.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -54,10 +54,10 @@ public class Vertex implements Serializable {
|
||||||
/** Texture coordinates */
|
/** Texture coordinates */
|
||||||
private final float u, v;
|
private final float u, v;
|
||||||
|
|
||||||
/** Bone indices */
|
/** Bone indices: these look up into the current Frame's bone array */
|
||||||
private final int[] bone;
|
private final int[] bone;
|
||||||
|
|
||||||
/** Bone weights */
|
/** Bone weights (always sum to 1.0f) */
|
||||||
private final float[] weight;
|
private final float[] weight;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* 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.loader;
|
||||||
|
|
||||||
|
import org.lwjgl.util.model.Model;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Loads a Model from an XML document.
|
||||||
|
*
|
||||||
|
* @author $Author$
|
||||||
|
* @version $Revision$
|
||||||
|
*/
|
||||||
|
public class Loader {
|
||||||
|
|
||||||
|
/** The source document */
|
||||||
|
private final Document src;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* C'tor
|
||||||
|
*/
|
||||||
|
public Loader(Document src) {
|
||||||
|
this.src = src;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the model from the XML document and return it.
|
||||||
|
* @return Model
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Model load() throws Exception {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* 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.renderer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Simple interface to things that can be Rendered.
|
||||||
|
*
|
||||||
|
* @author $Author$
|
||||||
|
* @version $Revision$
|
||||||
|
*/
|
||||||
|
public interface Renderable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* "Render" this thing. This will involve calls to the GL.
|
||||||
|
*/
|
||||||
|
public void render();
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
/*
|
||||||
|
* 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.renderer;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.lwjgl.util.model.Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* A simple (and very inefficient) Model renderer. This calculates the model vertices on the fly
|
||||||
|
* and uses GL immediate mode to render the result. This is of course very slow.
|
||||||
|
* <p>
|
||||||
|
* Material lookups are performed by mapping the material name to a Renderable thing. You must
|
||||||
|
* suppy appropriate Renderables - typically something that binds a 2D texture and sets up some
|
||||||
|
* GL state.
|
||||||
|
*
|
||||||
|
* @author $Author$
|
||||||
|
* @version $Revision$
|
||||||
|
*/
|
||||||
|
public class Renderer {
|
||||||
|
|
||||||
|
/** Material map: String name->Renderable */
|
||||||
|
private final Map materials = new HashMap();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* C'tor
|
||||||
|
*/
|
||||||
|
public Renderer() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render a Model
|
||||||
|
* @param model The model to render
|
||||||
|
*/
|
||||||
|
public void render(Model model) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a material
|
||||||
|
* @param name The material's name
|
||||||
|
* @param renderable The renderable object
|
||||||
|
*/
|
||||||
|
public void putMaterial(String name, Renderable renderable) {
|
||||||
|
materials.put(name, renderable);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue