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 + -
显示快捷键?