public void desplazar(Vector3f distancia) {
        Transform3D nueva = MiLibreria3D.trasladarDinamico(distancia);
        Transform3D actual = new Transform3D();
        tgPersonaje.getTransform(actual);
        actual.mul(nueva);
        tgPersonaje.setTransform(actual);
        float diagonal = distancia.getY() * ESCALA;
        if (direccion.equals(Direccion.adDer)) {
            posicionActual.setX(posicionActual.getX() + MiLibreria3D.pitagorasIsosceles(diagonal));
            posicionActual.setZ(posicionActual.getZ() - MiLibreria3D.pitagorasIsosceles(diagonal));
        } else if (direccion.equals(Direccion.adIzq)) {
            posicionActual.setX(posicionActual.getX() - MiLibreria3D.pitagorasIsosceles(diagonal));
            posicionActual.setZ(posicionActual.getZ() - MiLibreria3D.pitagorasIsosceles(diagonal));
        } else if (direccion.equals(Direccion.atDer)) {
            posicionActual.setX(posicionActual.getX() + MiLibreria3D.pitagorasIsosceles(diagonal));
            posicionActual.setZ(posicionActual.getZ() + MiLibreria3D.pitagorasIsosceles(diagonal));
        } else if (direccion.equals(Direccion.atIzq)) {
            posicionActual.setX(posicionActual.getX() - MiLibreria3D.pitagorasIsosceles(diagonal));
            posicionActual.setZ(posicionActual.getZ() + MiLibreria3D.pitagorasIsosceles(diagonal));
        } else if (direccion.equals(Direccion.adelante)) {
            posicionActual.setZ(posicionActual.getZ() - distancia.getY() * ESCALA);
        } else if (direccion.equals(Direccion.atras)) {
            posicionActual.setZ(posicionActual.getZ() + distancia.getY() * ESCALA);
        } else if (direccion.equals(Direccion.izquierda)) {
            posicionActual.setX(posicionActual.getX() - distancia.getY() * ESCALA);
        } else if (direccion.equals(Direccion.derecha)) {
            posicionActual.setX(posicionActual.getX() + distancia.getY() * ESCALA);
        }
        actualizarDireccion();
    }