Models! Models! Models!

This commit is contained in:
Caspian Rychlik-Prince 2004-04-18 19:30:32 +00:00
parent 4d64783d83
commit f62ab7b620
6 changed files with 208 additions and 11 deletions

View File

@ -33,7 +33,7 @@ package org.lwjgl.util.model;
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.

View File

@ -33,13 +33,16 @@
package org.lwjgl.util.model;
import java.io.Serializable;
import java.util.Map;
/**
* $Id$
*
* 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$
* @version $Revision$
@ -51,24 +54,25 @@ public class Model implements Serializable {
/** The Mesh */
private final Mesh mesh;
/** The animations */
private final Frame[] frame;
/** The animations: a Map of string names to Frame[] arrays */
private final Map animation;
/**
* C'tor
* @param mesh
* @param frame
*/
public Model(Mesh mesh, Frame[] frame) {
public Model(Mesh mesh, Map animation) {
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() {
return frame;
public Frame[] getAnimation(String name) {
return (Frame[]) animation.get(name);
}
/**

View File

@ -54,10 +54,10 @@ public class Vertex implements Serializable {
/** Texture coordinates */
private final float u, v;
/** Bone indices */
/** Bone indices: these look up into the current Frame's bone array */
private final int[] bone;
/** Bone weights */
/** Bone weights (always sum to 1.0f) */
private final float[] weight;
/**

View File

@ -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 {
}
}

View File

@ -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();
}

View File

@ -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);
}
}