This commit is contained in:
parent
ffbb590d25
commit
14963076ed
3 changed files with 191 additions and 0 deletions
BIN
lib/jME_2.0.jar
BIN
lib/jME_2.0.jar
Binary file not shown.
BIN
lib/jme-test.jar
Normal file
BIN
lib/jme-test.jar
Normal file
Binary file not shown.
191
src/sg/test/TestDomino.java
Normal file
191
src/sg/test/TestDomino.java
Normal file
|
|
@ -0,0 +1,191 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2005-2007 jME Physics 2
|
||||||
|
* 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 'jME Physics 2' 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 sg.test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import com.jme.bounding.BoundingBox;
|
||||||
|
import com.jme.bounding.BoundingSphere;
|
||||||
|
import com.jme.image.Texture.MagnificationFilter;
|
||||||
|
import com.jme.image.Texture.MinificationFilter;
|
||||||
|
import com.jme.image.Texture.WrapMode;
|
||||||
|
import com.jme.input.MouseInput;
|
||||||
|
import com.jme.math.Vector3f;
|
||||||
|
import com.jme.renderer.ColorRGBA;
|
||||||
|
import com.jme.scene.Line;
|
||||||
|
import com.jme.scene.SharedMesh;
|
||||||
|
import com.jme.scene.Spatial;
|
||||||
|
import com.jme.scene.Text;
|
||||||
|
import com.jme.scene.TriMesh;
|
||||||
|
import com.jme.scene.shape.Box;
|
||||||
|
import com.jme.scene.shape.Extrusion;
|
||||||
|
import com.jme.scene.shape.Sphere;
|
||||||
|
import com.jme.scene.state.TextureState;
|
||||||
|
import com.jme.util.TextureManager;
|
||||||
|
import com.jme.util.geom.BufferUtils;
|
||||||
|
import com.jmetest.physics.Utils;
|
||||||
|
import com.jmex.physics.DynamicPhysicsNode;
|
||||||
|
import com.jmex.physics.StaticPhysicsNode;
|
||||||
|
import com.jmex.physics.util.PhysicsPicker;
|
||||||
|
import com.jmex.physics.util.SimplePhysicsGame;
|
||||||
|
|
||||||
|
|
||||||
|
public class TestDomino extends SimplePhysicsGame {
|
||||||
|
protected void simpleInitGame() {
|
||||||
|
getPhysicsSpace().setAutoRestThreshold( 0.2f );
|
||||||
|
setPhysicsSpeed( 4 );
|
||||||
|
|
||||||
|
Spatial floorVisual = new Box( "floor", new Vector3f(), 1000, 0.1f, 1000 );
|
||||||
|
floorVisual.setModelBound( new BoundingBox() );
|
||||||
|
floorVisual.updateModelBound();
|
||||||
|
StaticPhysicsNode floor = getPhysicsSpace().createStaticNode();
|
||||||
|
floor.attachChild( floorVisual );
|
||||||
|
floor.generatePhysicsGeometry();
|
||||||
|
floor.setLocalTranslation( new Vector3f( 0, -0.1f, 0 ) );
|
||||||
|
rootNode.attachChild( floor );
|
||||||
|
|
||||||
|
final TextureState wallTextureState = display.getRenderer().createTextureState();
|
||||||
|
wallTextureState.setTexture( TextureManager.loadTexture( jmetest.TestChooser.class.getResource( "data/texture/wall.jpg" ),
|
||||||
|
MinificationFilter.Trilinear, MagnificationFilter.Bilinear) );
|
||||||
|
wallTextureState.getTexture().setScale( new Vector3f( 30, 30, 1 ) );
|
||||||
|
wallTextureState.getTexture().setWrap( WrapMode.Repeat );
|
||||||
|
floorVisual.setRenderState( wallTextureState );
|
||||||
|
|
||||||
|
TriMesh dominoBrickVisual[] = new TriMesh[4];
|
||||||
|
for ( int i = 0; i < dominoBrickVisual.length; i++ ) {
|
||||||
|
dominoBrickVisual[i] = new Box( "brick", new Vector3f(), 1f, 2, 0.2f );
|
||||||
|
dominoBrickVisual[i].setModelBound( new BoundingBox() );
|
||||||
|
dominoBrickVisual[i].updateModelBound();
|
||||||
|
dominoBrickVisual[i].lockMeshes();
|
||||||
|
//color them blue, red, green, yellow, ...
|
||||||
|
Utils.color( dominoBrickVisual[i], new ColorRGBA( i&1, ( i & 2 ) >> 1, i==0?1:0, 1 ), 128 );
|
||||||
|
dominoBrickVisual[i].updateRenderState();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Vector3f> points = new ArrayList<Vector3f>();
|
||||||
|
points.add( new Vector3f( 0, 0, 0 ) );
|
||||||
|
points.add( new Vector3f( 0, 0, 50 ) );
|
||||||
|
points.add( new Vector3f( 50, 0, 100 ) );
|
||||||
|
points.add( new Vector3f( 50, 0, 150 ) );
|
||||||
|
points.add( new Vector3f( 0, 0, 175 ) );
|
||||||
|
points.add( new Vector3f( -50, 0, 200 ) );
|
||||||
|
points.add( new Vector3f( -30, 0, 250 ) );
|
||||||
|
points.add( new Vector3f( 0, 0, 300 ) );
|
||||||
|
points.add( new Vector3f( 0, 0, 300 ) );
|
||||||
|
Line dot = new Line();
|
||||||
|
dot.appendCircle( 0.3f, 0, 0, 1, false );
|
||||||
|
Extrusion track = new Extrusion( "track" );
|
||||||
|
Vector3f up = new Vector3f( 0, 1, 0 );
|
||||||
|
track.updateGeometry( dot, points, 25, up );
|
||||||
|
|
||||||
|
Vector3f[] trackpoints = BufferUtils.getVector3Array( track.getVertexBuffer() );
|
||||||
|
Vector3f last = null;
|
||||||
|
Vector3f dir = new Vector3f();
|
||||||
|
// iterate over the extrusion points, taking every second vertice
|
||||||
|
for ( int i = 0; i < trackpoints.length; i += 2 ) {
|
||||||
|
Vector3f trackpoint = trackpoints[i];
|
||||||
|
DynamicPhysicsNode dominoBrick = getPhysicsSpace().createDynamicNode();
|
||||||
|
SharedMesh sharedMesh = new SharedMesh( "shared brick", dominoBrickVisual[i/2%dominoBrickVisual.length] );
|
||||||
|
dominoBrick.attachChild( sharedMesh );
|
||||||
|
dominoBrick.generatePhysicsGeometry();
|
||||||
|
dominoBrick.getLocalTranslation().set( trackpoint ).addLocal( 0, 2, 0 );
|
||||||
|
if ( last != null ) {
|
||||||
|
dir.set( last ).subtractLocal( trackpoint );
|
||||||
|
dominoBrick.getLocalRotation().lookAt( dir, up );
|
||||||
|
}
|
||||||
|
rootNode.attachChild( dominoBrick );
|
||||||
|
dominoBrick.rest();
|
||||||
|
last = trackpoint;
|
||||||
|
}
|
||||||
|
System.out.println( trackpoints.length / 2 + " domino bricks created" );
|
||||||
|
|
||||||
|
Sphere ballVisual = new Sphere( "ball", new Vector3f(), 10, 10, 2 );
|
||||||
|
ballVisual.setModelBound( new BoundingSphere() );
|
||||||
|
ballVisual.updateModelBound();
|
||||||
|
DynamicPhysicsNode ball = getPhysicsSpace().createDynamicNode();
|
||||||
|
ball.attachChild( ballVisual );
|
||||||
|
ball.generatePhysicsGeometry();
|
||||||
|
ball.setLocalTranslation( new Vector3f( 0, 3, -1.5f ) );
|
||||||
|
rootNode.attachChild( ball );
|
||||||
|
|
||||||
|
MouseInput.get().setCursorVisible( true );
|
||||||
|
new PhysicsPicker( input, rootNode, getPhysicsSpace() );
|
||||||
|
|
||||||
|
cam.setLocation( new Vector3f( 100, 100, -50 ) );
|
||||||
|
cam.lookAt( new Vector3f( 0, 0, 50 ), new Vector3f( 0, 1, 0 ) );
|
||||||
|
|
||||||
|
Text label = Text.createDefaultTextLabel( "instructions", "Left mouse button to hold/drag stuff, " +
|
||||||
|
"right mouse button+WASD to move the camera." );
|
||||||
|
label.setLocalTranslation( 0, 20, 0 );
|
||||||
|
statNode.attachChild( label );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void simpleUpdate() {
|
||||||
|
cameraInputHandler.setEnabled( MouseInput.get().isButtonDown( 1 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main( String[] args ) {
|
||||||
|
Logger.getLogger( "" ).setLevel( Level.WARNING ); // to see the important stuff
|
||||||
|
// create a new thread to benefit from -Xss setting to increase stack size
|
||||||
|
new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
new TestDomino().start();
|
||||||
|
}
|
||||||
|
}.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* $Log: TestDomino.java,v $
|
||||||
|
* Revision 1.5 2007/09/22 14:28:36 irrisor
|
||||||
|
* spongy contacts, improved material handling, center of mass correctly handled now, breakable joints, use odejava 0.3.1
|
||||||
|
*
|
||||||
|
* Revision 1.4 2007/09/02 20:44:09 irrisor
|
||||||
|
* node picking, timer fix
|
||||||
|
*
|
||||||
|
* Revision 1.3 2007/08/28 12:19:37 irrisor
|
||||||
|
* renamed autodisable to autorest, added unrest method, set root logger to warning level instead of physics logger only
|
||||||
|
*
|
||||||
|
* Revision 1.2 2007/08/03 11:26:46 irrisor
|
||||||
|
* adapted to new logging (JUL)
|
||||||
|
*
|
||||||
|
* Revision 1.1 2007/06/16 14:17:01 irrisor
|
||||||
|
* Contacts got an 'applied' flag to avoid application but still generate events -> GHOST material working;
|
||||||
|
* New test with dominos, some optimizations concerning enabled nodes; physics speed can be adjusted in SimplePhysicsGame
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue