jMonkeyEngine камера следовать - PullRequest
       32

jMonkeyEngine камера следовать

2 голосов
/ 20 февраля 2012

Я что-то тестирую с помощью jMonkeyEngine и пытаюсь, чтобы камера следовала пространственному блоку.Я следовал официальным инструкциям здесь:

http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:making_the_camera_follow_a_character

При применении того, что я там узнал, я создал следующий код:

@Override
public void simpleInitApp() {
    flyCam.setEnabled(false);

    //world objects
    Box b = new Box(Vector3f.ZERO, 1, 1, 1);
    Geometry geom = new Geometry("Box", b);

    Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    mat.setColor("Color", ColorRGBA.Blue);
    geom.setMaterial(mat);

    rootNode.attachChild(geom);

    //Ship node
    shipNode = new Node();
    rootNode.attachChild(shipNode);

    //Ship
    Box shipBase = new Box(new Vector3f(0, -1f, 10f), 5, 0.2f, 5);
    Geometry shipGeom = new Geometry("Ship Base", shipBase);

    Material shipMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    shipMat.setColor("Color", ColorRGBA.Green);
    shipGeom.setMaterial(shipMat);

    shipNode.attachChild(shipGeom);

    //Camera node
    cameraNode = new CameraNode("Camera Node", cam);
    cameraNode.setControlDir(ControlDirection.CameraToSpatial);
    shipNode.attachChild(cameraNode);

    initPhysics();

    initKeys();


}

Когда вызывается следующий код:

@Override
public void simpleUpdate(float tpf) {
    //Update ship heading
    shipHeading = shipHeading.mult(shipRotationMoment);
    shipNode.setLocalRotation(shipHeading);

    shipPos = shipPos.add(shipVelocity);
    shipNode.setLocalTranslation(shipPos);
}

Коробка перемещается в соответствии с прогнозом, но камера остается там, где она есть.График должен выглядеть примерно так:

  • rootNode
    • b (Box)
    • shipNode
      • shipBase
      • cameraNode

Поэтому камера должна быть уже привязана к shipNode.Что мне не хватает?

1 Ответ

4 голосов
/ 20 февраля 2012

Читая учебник, который вы предоставили, возможно, вы опечатались. У вас есть:

cameraNode.setControlDir(ControlDirection.CameraToSpatial);

Тем не менее, учебник имеет:

//This mode means that camera copies the movements of the target:
camNode.setControlDir(ControlDirection.SpatialToCamera);

Ниже в учебном пособии определяется разница между этими двумя ControlDirections. В том, что предусмотрено в учебном пособии, камера следит за движением объекта, а то, что у вас есть, следует за движением камеры.

Надеюсь, это поможет.

...