3d 跟随播放器旋转的摄像机

3d 跟随播放器旋转的摄像机,3d,camera,libgdx,3d,Camera,Libgdx,至于这类问题, (更多关于清晰描述问题的图片) 我有一个球员的动作和摄像机的实施, 我想在Ashley ECS中制作这样一个相机 目前,我们在玩家身上安装了一个摄像头,但我们想要的是一个在玩家移动时可以旋转的摄像头,一个放在玩家身后的摄像头,它可以一直看着玩家 //Move if (-PlayerController.getMovementVector().y < 0 || Gdx.input.isKeyPressed(Input.Keys.W)) { charac

至于这类问题, (更多关于清晰描述问题的图片) 我有一个球员的动作和摄像机的实施, 我想在Ashley ECS中制作这样一个相机

目前,我们在玩家身上安装了一个摄像头,但我们想要的是一个在玩家移动时可以旋转的摄像头,一个放在玩家身后的摄像头,它可以一直看着玩家

//Move
    if (-PlayerController.getMovementVector().y < 0 || Gdx.input.isKeyPressed(Input.Keys.W)) {
        characterComponent.walkDirection.add(camera.direction);
    }
    if (-PlayerController.getMovementVector().y > 0 || Gdx.input.isKeyPressed(Input.Keys.S)) {
        characterComponent.walkDirection.sub(camera.direction);
    }
    if (-PlayerController.getMovementVector().x  > 0 || Gdx.input.isKeyPressed(Input.Keys.A)) {
        tmp.set(camera.direction).crs(camera.up).scl(-1);
    }
    if (-PlayerController.getMovementVector().x  < 0 || Gdx.input.isKeyPressed(Input.Keys.D)) {
        tmp.set(camera.direction).crs(camera.up);
    }
    characterComponent.walkDirection.add(tmp);
    if (Gdx.app.getType() == Application.ApplicationType.Android) {
        characterComponent.walkDirection.scl(1f * delta); //Vitesse Déplacement Personnage
    }
    else if (Gdx.app.getType() == Application.ApplicationType.iOS) {
        characterComponent.walkDirection.scl(1f * delta); //Vitesse Déplacement Personnage
    }
    if (Gdx.app.getType() == Application.ApplicationType.Desktop) {
        characterComponent.walkDirection.scl(10f * delta); //Vitesse Déplacement Personnage
    }
    characterComponent.characterController.setWalkDirection(characterComponent.walkDirection);
    ghost = new Matrix4();
    translation = new Vector3();
    characterComponent.ghostObject.getWorldTransform(ghost);
    ghost.getTranslation(translation);
    modelComponent.instance.transform.set(translation.x, translation.y, translation.z, camera.direction.x, camera.direction.y, camera.direction.z, 0);
    //BodyParts movement
    hair.getComponent(PlayerModelComponent.class).instance.transform.set(translation.x, translation.y, translation.z, camera.direction.x, camera.direction.y, camera.direction.z, 0);
    ear.getComponent(PlayerModelComponent.class).instance.transform.set(translation.x, translation.y, translation.z, camera.direction.x, camera.direction.y, camera.direction.z, 0);
    mouth.getComponent(PlayerModelComponent.class).instance.transform.set(translation.x, translation.y, translation.z, camera.direction.x, camera.direction.y, camera.direction.z, 0);
    scar.getComponent(PlayerModelComponent.class).instance.transform.set(translation.x, translation.y, translation.z, camera.direction.x, camera.direction.y, camera.direction.z, 0);
    float offsetx = 2;
    float offsetz = 2;
    camera.position.set(translation.x+offsetx, translation.y, translation.z+offsetz);
    camera.lookAt(translation.x, translation.y, translation.z);
    
//移动
if(-PlayerController.getMovementVector().y<0 | | Gdx.input.isKeyPressed(input.Keys.W)){
characterComponent.walkDirection.add(camera.direction);
}
if(-PlayerController.getMovementVector().y>0 | | Gdx.input.isKeyPressed(input.Keys.S)){
characterComponent.walkDirection.sub(摄影机方向);
}
if(-PlayerController.getMovementVector().x>0 | | Gdx.input.isKeyPressed(input.Keys.A)){
tmp.set(摄像机方向).crs(摄像机向上).scl(-1);
}
if(-PlayerController.getMovementVector().x<0 | | Gdx.input.isKeyPressed(input.Keys.D)){
tmp.set(摄像机方向).crs(摄像机向上);
}
characterComponent.walkDirection.add(tmp);
if(Gdx.app.getType()==Application.ApplicationType.Android){
characterComponent.walkDirection.scl(1f*delta);//Vitesse Déplacement Personnage
}
else if(Gdx.app.getType()==Application.ApplicationType.iOS){
characterComponent.walkDirection.scl(1f*delta);//Vitesse Déplacement Personnage
}
if(Gdx.app.getType()==Application.ApplicationType.Desktop){
characterComponent.walkDirection.scl(10f*delta);//Vitesse Déplacement Personnage
}
characterComponent.characterController.setWalkDirection(characterComponent.walkDirection);
ghost=新矩阵x4();
平移=新向量3();
characterComponent.ghosObject.getWorldTransform(ghost);
ghost.getTranslation(翻译);
modelComponent.instance.transform.set(translation.x,translation.y,translation.z,camera.direction.x,camera.direction.y,camera.direction.z,0);
//身体部位运动
hair.getComponent(PlayerModelComponent.class).instance.transform.set(translation.x,translation.y,translation.z,camera.direction.x,camera.direction.y,camera.direction.z,0);
getComponent(PlayerModelComponent.class).instance.transform.set(translation.x,translation.y,translation.z,camera.direction.x,camera.direction.y,camera.direction.z,0);
getComponent(PlayerModelComponent.class).instance.transform.set(translation.x,translation.y,translation.z,camera.direction.x,camera.direction.y,camera.direction.z,0);
scar.getComponent(PlayerModelComponent.class).instance.transform.set(translation.x,translation.y,translation.z,camera.direction.x,camera.direction.y,camera.direction.z,0);
浮动补偿x=2;
浮动偏移量z=2;
相机.position.set(translation.x+offsetx,translation.y,translation.z+offsetz);
摄影机.注视(平移.x,平移.y,平移.z);
开始工作的想法是什么 正如您在下面的示例中所看到的,我尝试偏移cam pos,但没有达到我应该的程度,离最终机制不远,但也没有我想要的那么近, 有人能帮上忙吗