001 package tutorial;
002 import javax.media.opengl.GL;
003 import javax.media.opengl.GLDrawable;
004
005 import com.sun.opengl.util.texture.Texture;
006
007 import de.rico.engine.effect.environmentmapping.CubeMap;
008 import de.rico.engine.effect.environmentmapping.SphereMap;
009 import de.rico.engine.effect.light.ogllight.PositionalLight;
010 import de.rico.engine.enums.BoundingVolume;
011 import de.rico.engine.game.AbstractBaseGame;
012 import de.rico.engine.geometry.modelloader.ms3d.ModelMS3DAscii;
013 import de.rico.engine.util.Tools;
014
015 /**
016 * A class that demonstrates how to add an environment map to a mesh.
017 * @author Frank Bruns
018 *
019 */
020 public class AddEnvironmentMap extends AbstractBaseGame
021 {
022 private ModelMS3DAscii model1 = null;
023 private ModelMS3DAscii model2 = null;
024
025 private PositionalLight light = null;
026
027 /**
028 * Constructor for the new game.
029 * @param title title for the window bar
030 * @param maxFps maximum possible framerate
031 */
032 public AddEnvironmenMap(String title, int maxFps)
033 {
034 super(title, maxFps);
035 }
036
037 /* (non-Javadoc)
038 * @see de.rico.engine.game.AbstractBaseGame#initResources(javax.media.opengl.GLDrawable, javax.media.opengl.GL, int, int)
039 */
040 @Override
041 public void initResources(GLDrawable gld, GL gl, int width, int height)
042 {
043 // This model will use a sphere map (model on the left)
044 this.model1 = new ModelMS3DAscii(BoundingVolume.BOX);
045 this.model1.load("./models/ms3d/recke/recke.txt", 0.1f);
046 this.model1.setEnvironmentMap(new SphereMap("./images/misc/spheremap.jpg"));
047 this.model1.translateX(-3f);
048
049
050 // this model will use a cube map (model on the right)
051 this.model2 = new ModelMS3DAscii(BoundingVolume.BOX);
052 this.model2.load("./models/ms3d/recke/recke.txt", 0.1f);
053 // Create a cubemap texture --> such textures consist of 6 textures
054 // that ususally reflect the skybox
055 Texture cubemapTexture = Tools.createCubeMapTexture(
056 "./images/skybox/desert/pos_x.jpg",
057 "./images/skybox/desert/neg_x.jpg",
058 "./images/skybox/desert/pos_y.jpg",
059 "./images/skybox/desert/neg_y.jpg",
060 "./images/skybox/desert/pos_z.jpg",
061 "./images/skybox/desert/neg_z.jpg");
062 // assign the cubemap texture wrapped in a CubeMap object
063 // to the mesh
064 this.model2.setEnvironmentMap(new CubeMap(cubemapTexture));
065 this.model2.translateX(3f);
066
067
068 // create a simple white light to illuminate the scene
069 this.light = new PositionalLight(0);
070 this.light.setPosition(0f, 50f, 100f);
071 }
072
073 /* (non-Javadoc)
074 * @see de.rico.engine.game.AbstractBaseGame#update(long)
075 */
076 @Override
077 public void update(long elapsedTime)
078 {
079 // update the models
080 this.model1.update(elapsedTime);
081 this.model2.update(elapsedTime);
082 }
083
084 /* (non-Javadoc)
085 * @see de.rico.engine.game.AbstractBaseGame#draw(javax.media.opengl.GL)
086 */
087 @Override
088 public void draw(GL gl)
089 {
090 // bind the light for illumination of the scene
091 this.light.bind(gl);
092
093 // draw the models
094 this.model1.draw(gl);
095 this.model2.draw(gl);
096
097 // release the light again
098 this.light.release(gl);
099 }
100
101 /**
102 * The usual main method. It's the entry point to the application.
103 * @param args argument string
104 */
105 public static void main(String args[])
106 {
107 // create a new game
108 AddEnvironmentMap game = new AddEnvironmentMap("Test Game", 100);
109
110 // initialise the camera --> needs to be done!
111 game.initCamera(0f, 7.5f, 20f, 0f, 0f, 0.1f, 200f);
112
113 // show framerate --> this is optional
114 game.setDisplayFPS(true);
115
116 // finally start the game
117 game.start(game);
118 }
119 }
|