placementhelper.java

来自「Java mulitplayer strategy game. Adaptati」· Java 代码 · 共 138 行

JAVA
138
字号
/*
 * Created on 2005-10-18
 * $Id: PlacementHelper.java,v 1.4 2006/01/07 16:18:58 macx2k Exp $
 */
package net.sf.jawp.j3d.object;

import javax.media.j3d.Node;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.AxisAngle4f;
import javax.vecmath.Vector3f;

/**
 * 
 * @author Maciej Malecki
 * @version $Revision: 1.4 $
 */
public final class PlacementHelper
{
	private PlacementHelper()
	{
	}

	public static Node placeX(final Node node, final float x)
	{
		return place(node, new Vector3f(x, 0f, 0f));
	}

	public static Node placeY(final Node node, final float y)
	{
		return place(node, new Vector3f(0f, y, 0f));
	}

	public static Node placeZ(final Node node, final float z)
	{
		return place(node, new Vector3f(0f, 0f, z));
	}

	public static Node place(final Node node, final Vector3f position)
	{
		// set translation
		final Transform3D trans3d = new Transform3D();
		trans3d.set(position);
		// wrap node into transform group
		return wrap(node, trans3d);
	}

	public static Node scale(final Node node, final float scaleFactor)
	{
		// set translation
		final Transform3D trans3d = new Transform3D();
		trans3d.setScale(scaleFactor);
		// wrap node into transform group
		return wrap(node, trans3d);
	}

	public static TransformGroup wrap(final Node node)
	{
		return wrap(node, new Transform3D());
	}

	public static TransformGroup wrap(final Node node, final Transform3D trans3d)
	{
		// wrap node into transform group
		final TransformGroup tg = new TransformGroup(trans3d);
		tg.addChild(node);
		return tg;
	}

	public static Node rotate(final Node node, final AxisAngle4f angle)
	{
		// set translation
		final Transform3D trans3d = new Transform3D();
		trans3d.setRotation(angle);
		return wrap(node, trans3d);
	}
	
	public static void setDirectionXZ(final Transform3D transform, final float x, final float y, final float z)
	{
		// rotate about [0,1,0] vector
		transform.setRotation(new AxisAngle4f(0f, 1f, 0f, angleXZ(new Vector3f(x, 0f, z))));
	}
	
	public static void setDirectionYZ(final Transform3D transform, final float x, final float y, final float z)
	{
		// rotate about [1,0,0] vector
		transform.setRotation(new AxisAngle4f(1f, 0f, 0f, angleYZ(new Vector3f(0f, y, z))));
	}
	
	public static void setDirectionXY(final Transform3D transform, final float x, final float y, final float z)
	{
		// rotate about [0,0,1] vector
		transform.setRotation(new AxisAngle4f(0f, 0f, 1f, angleXY(new Vector3f(x, y, 0f))));
	}
	
	public static float angleXZ(final Vector3f vector)
	{
		final Vector3f base = new Vector3f(0f, 0f, 1f);
		final float angle = base.angle(vector);
		if (vector.x < 0f)
		{
			return -angle;
		}
		else
		{
			return angle;
		}
	}

	public static float angleYZ(final Vector3f vector)
	{
		final Vector3f base = new Vector3f(0f, 1f, 0f);
		final float angle = base.angle(vector);
		if (vector.y < 0f)
		{
			return -angle;
		}
		else
		{
			return angle;
		}
	}

	public static float angleXY(final Vector3f vector)
	{
		final Vector3f base = new Vector3f(0f, 1f, 0f);
		final float angle = base.angle(vector);
		if (vector.x < 0f)
		{
			return -angle;
		}
		else
		{
			return angle;
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?