How to move Spatial forward?[very newbie question]

I know how to use rotate(),move() etc. But I’m have no idea how to move spatial foward.



For example: I’m have a spatial named SpaceShip.



And I’m rotate it for example 2 radiants.



But how to calculate move() arguments for purpose move spaceship foward?



(“classic” move() move only along absolute x/y/z).

balon said:
("classic" move() move only along absolute x/y/z).

And you live in a universe with how many dimensions exactly that this is not sufficient?

[java]getRotation().getRotationColumn(2);[/java]

Using that you’ll get the “forward” vector.

1 Like

This is not a problem with number of dimensions.

For example:

1.Create spacial

2.Rotate spacial 2 radians

3.How to calculate what parameters of move(x,y,z) should be used for moving 1 unit foward of ship?

If ship is directed along axis X this will be move(1,0,0).

If this is axis Y - move(0,1,0)

But If ship is directed for example 1.5 radians betwen X and Y?



EDIT: Thanks ricard.

Hey, Thank you for that! Very useful for me ie.

http://i.imgur.com/yHnTJ.png

that’s this code:

pre type="java"
package org.jme3;





import com.jme3.app.SimpleApplication;


import com.jme3.material.Material;


import com.jme3.math.ColorRGBA;


import com.jme3.math.FastMath;


import com.jme3.math.Quaternion;


import com.jme3.math.Spline;


import com.jme3.math.Vector3f;


import com.jme3.scene.Geometry;


import com.jme3.scene.Node;


import com.jme3.scene.shape.Box;


import com.jme3.scene.shape.Curve;





/**


  Sample 2 - How to use nodes as handles to manipulate objects in the scene


 
 graph. You can rotate, translate, and scale objects by manipulating their


  parent nodes. The Root Node is special: Only what is attached to the Root


 
 Node appears in the scene.


 /


public class HelloNode4 extends SimpleApplication {





    public static void main(String[] args) {


HelloNode4 app = new HelloNode4();


app.setShowSettings(false);


app.start();


    }





    /



      (non-Javadoc)


     
 


      @see com.jme3.app.SimpleApplication#simpleUpdate(float)


     
/


    @Override


    public void simpleUpdate(float tpf) {


yaw = (yaw + FastMath.DEG_TO_RAD  4  tpf) % (FastMath.PI  2);


roll = (roll + FastMath.DEG_TO_RAD 
 7  tpf) % (FastMath.PI  2);


pitch = (pitch + FastMath.DEG_TO_RAD  11  tpf) % (FastMath.PI  2);


rot.fromAngles(yaw, roll, pitch);


geoBox.setLocalRotation(rot);


Vector3f store = new Vector3f(box.getXExtent(), box.getYExtent(),


box.getZExtent());


geoBox.getLocalTransform().transformVector(store, store);


spline.addControlPoint(store);


if (geoCurve != null) {


    subNode.detachChild(geoCurve);


}


geoCurve = new Geometry(“trails”, new Curve(spline, 1));


geoCurve.setMaterial(curveMat);


subNode.attachChild(geoCurve);


geoBox.move(geoBox.getLocalRotation().getRotationColumn(2)


.mult(1 
 tpf));


    }





    Geometry geoCurve = null;


    Material curveMat;





    Box box;


    Geometry geoBox;


    Quaternion rot = new Quaternion();


    float yaw = 0f;


    float roll = 0f;


    float pitch = 0f;


    Spline spline = new Spline();





    Node subNode;





    @Override


    public void simpleInitApp() {





subNode = new Node();


subNode.setLocalTranslation(new Vector3f(1, 3, 1));


rot = new Quaternion();


rot.fromAngles(1f, -2f, 4f);


subNode.setLocalRotation(rot);


box = new Box(0.5f, 0.9f, 1.3f);


geoBox = new Geometry(“Box”, box);


geoBox.setLocalTranslation(1f, 2f, 3f);


geoBox.scale(1.3f, 1.2f, 1.1f);


Material mat2 = new Material(assetManager,


“Common/MatDefs/Misc/WireColor.j3md”);


mat2.setColor(“Color”, ColorRGBA.Red);


geoBox.setMaterial(mat2);





curveMat = new Material(assetManager,


“Common/MatDefs/Misc/WireColor.j3md”);


curveMat.setColor(“Color”, ColorRGBA.Green);





rootNode.setLocalTranslation(-1, -2, -4);


rootNode.rotate(-1f, 2f, -4f);


flyCam.setMoveSpeed(20f);





subNode.attachChild(geoBox);


rootNode.attachChild(subNode);


subNode.scale(0.4f);


// subNode.scale(1.3f, 0.7f, 0.4f);// XXX: bug when uncommented


    }


}



/pre