All pastes #964576 Raw Edit

Zeug

public java v1 · immutable
#964576 ·published 2008-03-31 10:42 UTC
rendered paste body
/* * Copyright (c) 2003-2007 jMonkeyEngine * 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 'jMonkeyEngine' 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 jmetest.intersection;import java.nio.FloatBuffer;import java.util.logging.Logger;import com.jme.animation.SpatialTransformer;import com.jme.app.AbstractGame;import com.jme.app.SimpleGame;import com.jme.bounding.BoundingBox;import com.jme.bounding.CollisionTree;import com.jme.bounding.CollisionTreeManager;import com.jme.intersection.CollisionData;import com.jme.intersection.CollisionResults;import com.jme.intersection.TriangleCollisionResults;import com.jme.math.Vector3f;import com.jme.renderer.ColorRGBA;import com.jme.scene.Controller;import com.jme.scene.Node;import com.jme.scene.TriMesh;import com.jme.scene.shape.PQTorus;import com.jme.scene.shape.Sphere;import com.jme.util.geom.BufferUtils;/** * Started Date: Sep 6, 2004 <br> * <br> *  * @author Jack Lindamood */public class TestCollisionTree extends SimpleGame {    private static final Logger logger = Logger            .getLogger(TestCollisionTree.class.getName());    	ColorRGBA[] colorSpread = { ColorRGBA.white.clone(), ColorRGBA.green.clone(),			ColorRGBA.gray.clone() };	TriMesh s, r;	Node n, m;	CollisionResults results;	CollisionData oldData;	int count = 0;	public static void main(String[] args) {		TestCollisionTree app = new TestCollisionTree();		app.setDialogBehaviour(AbstractGame.ALWAYS_SHOW_PROPS_DIALOG);		app.start();	}	protected void simpleInitGame() {		CollisionTreeManager.getInstance().setTreeType(CollisionTree.AABB_TREE);				results = new TriangleCollisionResults();		s = new Sphere("sphere", 10, 10, 1);				s.setSolidColor(ColorRGBA.white.clone());        s.setModelBound(new BoundingBox());		s.updateModelBound();				n = new Node("sphere node");		r = new PQTorus("tort", 5, 4, 2f, .5f, 128, 16);		r.setLocalTranslation(new Vector3f(0, 0, 0));        r.setSolidColor(ColorRGBA.white.clone());		r.setModelBound(new BoundingBox());		r.updateModelBound();		m = new Node("tort node");		SpatialTransformer st = new SpatialTransformer(1);        st.setRepeatType(Controller.RT_CYCLE);		st.setObject(m, 0, -1);		st.setPosition(0, 0, new Vector3f(10, 10, 0));		st.setPosition(0, 4, new Vector3f(-10, -10, 0));		st.interpolateMissing();		r.addController(st);		for(int j = 0; j < r.getBatchCount(); j++) {			FloatBuffer color1 = r.getBatch(j).getColorBuffer();			color1.clear();			for (int i = 0, bLength = color1.capacity(); i < bLength; i+=4) {			    ColorRGBA c = colorSpread[i % 3];			    color1.put(c.r).put(c.g).put(c.b).put(c.a);			}			color1.flip();		}		for(int j = 0; j < s.getBatchCount(); j++) {			FloatBuffer color2 = s.getBatch(j).getColorBuffer();			color2.clear();			for (int i = 0, bLength = color2.capacity(); i < bLength; i+=4) {			    ColorRGBA c = colorSpread[i % 3];			    color2.put(c.r).put(c.g).put(c.b).put(c.a);			}			color2.flip();		}		n.attachChild(r);		m.attachChild(s);		rootNode.attachChild(n);		rootNode.attachChild(m);		lightState.detachAll();        lightState.setEnabled(false);	}	protected void simpleUpdate() {		count++;		if (count < 5)			return;		count = 0;		int[] indexBuffer = new int[3];		if (oldData != null) {			if(oldData.getSourceBatchId() == 1) {				logger.info("1");			}			for (int j = 0; j < oldData.getSourceTris().size();j++) {				int triIndex = oldData.getSourceTris().get(j);				s.getTriangle(oldData.getSourceBatchId(), triIndex, indexBuffer);                FloatBuffer color1 = s.getColorBuffer(oldData.getSourceBatchId());				BufferUtils.setInBuffer(colorSpread[indexBuffer[0] % 3], color1, indexBuffer[0]);				BufferUtils.setInBuffer(colorSpread[indexBuffer[1] % 3], color1, indexBuffer[1]);				BufferUtils.setInBuffer(colorSpread[indexBuffer[2] % 3], color1, indexBuffer[2]);			}			for (int j = 0; j < oldData.getTargetTris().size();j++) {				int triIndex = oldData.getTargetTris().get(j);				r.getTriangle(oldData.getTargetBatchId(), triIndex, indexBuffer);                FloatBuffer color2 = r.getColorBuffer(oldData.getTargetBatchId());				BufferUtils.setInBuffer(colorSpread[indexBuffer[0] % 3], color2, indexBuffer[0]);				BufferUtils.setInBuffer(colorSpread[indexBuffer[1] % 3], color2, indexBuffer[1]);				BufferUtils.setInBuffer(colorSpread[indexBuffer[2] % 3], color2, indexBuffer[2]);			}		}				results.clear();		m.findCollisions(n, results);		if (results.getNumber() > 0) {			oldData = results.getCollisionData(0);            for (int i = 0; i < oldData.getSourceTris().size(); i++) {                FloatBuffer color1 = s.getColorBuffer(oldData.getSourceBatchId());                int triIndex = oldData.getSourceTris().get(i);                s.getTriangle(oldData.getSourceBatchId(), triIndex, indexBuffer);                BufferUtils.setInBuffer(ColorRGBA.red, color1, indexBuffer[0]);                BufferUtils.setInBuffer(ColorRGBA.red, color1, indexBuffer[1]);                BufferUtils.setInBuffer(ColorRGBA.red, color1, indexBuffer[2]);            }            for (int i = 0; i < oldData.getTargetTris().size(); i++) {                int triIndex = oldData.getTargetTris().get(i);                FloatBuffer color2 = r.getColorBuffer(oldData.getTargetBatchId());                r.getTriangle(oldData.getTargetBatchId(), triIndex, indexBuffer);                BufferUtils.setInBuffer(ColorRGBA.blue, color2, indexBuffer[0]);                BufferUtils.setInBuffer(ColorRGBA.blue, color2, indexBuffer[1]);                BufferUtils.setInBuffer(ColorRGBA.blue, color2, indexBuffer[2]);            }        }	}}