2 * Copyright (c) 2003-2009 jMonkeyEngine
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 package jmetest.renderer;
35 import com.jme.app.SimplePassGame;
36 import com.jme.bounding.BoundingSphere;
37 import com.jme.image.Texture;
38 import com.jme.math.FastMath;
39 import com.jme.math.Quaternion;
40 import com.jme.math.Vector3f;
41 import com.jme.renderer.pass.RenderPass;
42 import com.jme.scene.TriMesh;
43 import com.jme.scene.shape.Box;
44 import com.jme.scene.state.BlendState;
45 import com.jme.scene.state.TextureState;
46 import com.jme.util.TextureManager;
49 * <code>TestLightState</code>
51 * @version $Id: TestMultitexturePass.java,v 1.8 2007/03/06 15:33:45 nca Exp $
53 public class TestMultitexturePass extends SimplePassGame {
55 private Quaternion rotQuat;
56 private float angle = 0;
57 private Vector3f axis;
60 * Entry point for the test,
63 public static void main(String[] args) {
64 TestMultitexturePass app = new TestMultitexturePass();
65 app.setConfigShowMode(ConfigShowMode.AlwaysShow);
70 * @see com.jme.app.SimpleGame#update
72 protected void simpleUpdate() {
73 if (timer.getTimePerFrame() < 1) {
74 angle = angle + (timer.getTimePerFrame() * 25);
80 rotQuat.fromAngleAxis(angle*FastMath.DEG_TO_RAD, axis);
81 t.setLocalRotation(rotQuat);
86 * @see com.jme.app.BaseGame#initGame()
88 protected void simpleInitGame() {
90 rotQuat = new Quaternion();
91 axis = new Vector3f(1, 1, 0.5f);
93 display.setTitle("Multitexturing - Multiple Passes");
94 cam.setLocation(new Vector3f(0, 0, 40));
97 Vector3f max = new Vector3f(5, 5, 5);
98 Vector3f min = new Vector3f( -5, -5, -5);
100 t = new Box("Box", min, max);
101 t.setLocalTranslation(new Vector3f(0, 0, 0));
102 t.setModelBound(new BoundingSphere());
103 t.updateModelBound();
105 t.copyTextureCoordinates(0, 1, 1.0f);
107 //attach to rootNode to get updates supplied by SimplePassGame
108 rootNode.attachChild(t);
110 TextureState ts1 = display.getRenderer().createTextureState();
111 Texture t1 = TextureManager.loadTexture(
112 TestMultitexturePass.class.getClassLoader().getResource(
113 "jmetest/data/texture/dirt.jpg"), Texture.MinificationFilter.BilinearNearestMipMap,
114 Texture.MagnificationFilter.Bilinear);
117 TextureState ts2 = display.getRenderer().createTextureState();
118 Texture t2 = TextureManager.loadTexture(
119 TestMultitexturePass.class.getClassLoader().getResource(
120 "jmetest/data/images/Monkey.jpg"), Texture.MinificationFilter.BilinearNearestMipMap,
121 Texture.MagnificationFilter.Bilinear);
122 t2.setWrap(Texture.WrapMode.Repeat);
124 ts2.setTextureCoordinateOffset(1);
126 BlendState as = display.getRenderer().createBlendState();
127 as.setBlendEnabled(true);
128 as.setSourceFunction(BlendState.SourceFunction.DestinationColor);
129 as.setDestinationFunction(BlendState.DestinationFunction.SourceColor);
131 RenderPass rp1 = new RenderPass();
132 rp1.setPassState(ts1);
135 RenderPass rp2 = new RenderPass();
136 rp2.setPassState(ts2);
137 rp2.setPassState(as);
142 RenderPass rp3 = new RenderPass();