jmonkey вращение и перевод

У меня проблема в JME (JMonkey) с вращением, а затем переводом двух блоков. Я искал форумы и нашел некоторые подобные проблемы с другими языками, но я не понимаю ответов, и это может быть потому, что я не знаю других языков. У меня есть два ящика с .lookat([другой ящик]), поворот, а затем локальный перевод. На мой взгляд, локальный перевод должен перемещать коробку в том направлении, в котором она обращена, но это не похоже на движение по мировым осям. Одно замечание; Я ничего не знаю об использовании матричной математики в 3d, некоторые ответы, которые я нашел, использовали матричную математику для решения проблемы. Я хотел бы понять это, чтобы я мог избежать этой проблемы в будущем. Я сократил свой код как можно меньше, чтобы в нем не было ненужных частей.

package jme3test.helloworld;
import com.jme3.app.SimpleApplication;
import com.jme3.font.BitmapText;
import com.jme3.material.Material;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import com.jme3.math.ColorRGBA;
import com.jme3.renderer.RenderManager;
import com.jme3.renderer.ViewPort;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.control.AbstractControl;
import java.util.ResourceBundle.Control;


public class SSF2 extends SimpleApplication {
public Geometry blue = null;
public Geometry red = null;

public static void main(String[] args){
    final SSF2 app = new SSF2();
    app.start();
}

@Override
public void simpleInitApp() {
    // create a blue box at coordinates (1,-1,1)
    Box box1 = new Box( Vector3f.ZERO, 1f,2f,.5f);
    blue =  new Geometry("Box", box1);
    Material mat1 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    mat1.setColor("Color", ColorRGBA.Blue);
    blue.setMaterial(mat1);
    blue.move(-5,0,-3);

    // create a red box straight above the blue one at (1,3,1)
    Box box2 = new Box( Vector3f.ZERO, 1f,2f,.5f);
    red = new Geometry("Box", box2);
    Material mat2 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    mat2.setColor("Color", ColorRGBA.Red);
    red.setMaterial(mat2);
    red.move(5,0,-3);

    rootNode.attachChild(blue);
    rootNode.attachChild(red);

    blue.lookAt(red.getWorldTranslation(), new Vector3f(0,1,0) );
    red.lookAt(blue.getWorldTranslation(), new Vector3f(0,1,0) );
}

@Override
public void simpleUpdate(float tpf) {
    blue.setLocalTranslation(new Vector3f( (blue.getLocalTranslation().getX() + .02f), (blue.getLocalTranslation().getY())  , (blue.getLocalTranslation().getZ() )));
    red.setLocalTranslation(new Vector3f( (red.getLocalTranslation().getX() + .02f), (red.getLocalTranslation().getY())  , (red.getLocalTranslation().getZ() )));
}
}

person Goff    schedule 04.12.2012    source источник


Ответы (1)


Проверьте это:

@Override
public void simpleUpdate(float tpf) {
    red.rotate(0, 0.001f, 0);

    // For the red (moves in a circle)
    Quaternion rotation = red.getLocalRotation();
    Vector3f front = new Vector3f(0, 0, 0.01f);
    Vector3f heading = rotation.mult(front);
    red.move(heading);

    /// For the blue (follows the red)
    blue.lookAt(red.getWorldTranslation(), Vector3f.UNIT_Y);
    float velocity = 0.01f;
    Vector3f trajectory = red.getWorldTranslation().subtract(blue.getWorldTranslation());
    trajectory = trajectory.normalize();
    Vector3f offset = trajectory.mult(velocity);
    blue.move(offset);
    System.out.print(offset);

}
person luke1985    schedule 21.03.2013
comment
Мне это помогло, да. Возможно, официальные документы JMonkeyEngine3 предполагают, что пользователи более склонны к математике и внутренней работе, но этот вопрос, который я видел, поднимался много раз. - person noncom; 13.08.2013