第三人称摄像机在y轴上不能正确地围绕玩家球体旋转 - 逻辑问题?

4
我正在使用Ox Engine在XNA中制作一款3D游戏。很少有文档可供参考,但我到目前为止还是挺顺利的。然而,现在我遇到了一个逻辑难题,卡住了很长一段时间,我认为是时候寻求外部帮助了。
所有的移动和鼠标控制都正常工作,并且相机也能正确地跟随。但是,当我在Y轴上向上/向下移动鼠标以使相机围绕角色做圆形运动时,其他所有元素都会失去同步。相机应该绕着角色做轨道运动,但它还需要知道角色的朝向。我似乎无法同时实现这两个功能。
当我编写告诉它角色朝向并从其“远离”(转置)的代码时,它移动了轨道本身:
        if (changeY > 0)
        {
            if (camMemory.Y > 110)
                tempMatrix *= Matrix.CreateFromAxisAngle(model.Orientation.Left, MathHelper.ToRadians(changeY));
        }
        else if (changeY < 0)
        {
            if (camMemory.Y < 400)//FAKE PLACEHOLDER VALUE... highest point in arc goes here
                tempMatrix *= Matrix.CreateFromAxisAngle(model.Orientation.Left, MathHelper.ToRadians(changeY));       
        }

        Vector3 camPos = new Vector3(0, 0, 0) ;
        camMemory = tempMatrix.Translation;

        //NOTE: this is the piece that causes the "bubble" to move
        moveAmount = tempMatrix.Forward * 200f;
        /////
        tempMatrix.Translation += moveAmount;
        camPos = tempMatrix.Translation + model.Position;

        //Pointer in front, Camera behind, make camera face pointer.



        Engine.Camera.SetTransformByLookTarget(camPos, model.Orientation.Up, trackPos);

这意味着如果没有正确地围绕角色转动相机,当他转动相机时,相机位置会出错。

然而,当我解决了这个问题后,我离角色不够远,无法得到正确的视图。简单地将tempMatrix.Translation乘以一个数来“扩大”“气泡”,会导致我的位置严重偏离。我一筹莫展。任何见解都将不胜感激。

tl,dr:如何在不移动中心点的情况下使环绕相机的“气泡”变大(转置不起作用或者我使用错误!)

编辑:我希望能为此设置赏金,哈哈

1个回答

3

摄像机应该绕角色旋转,但也需要告诉它角色面朝的方向。我似乎无法同时实现两者。

同时实现的方法是基于角色矩阵基向量偏移设置相机位置。这样当角色旋转并更改基向量时,相机会跟随其旋转。同时或独立地,更改偏移值将使相机绕角色轨道运动。

看起来你的代码只围绕模型的X轴运动。要演示沿该轴的方法,可以尝试以下操作:

Vector3 offset = Vector3.Transform(model.Orientation.Backward, Matrix.CreateFromAxisAngle(model.Orientation.Left, camMemory.Y));

camPos = model.Position + (offset * bubbleSize);

现在,如果角色自己旋转,相机也会跟随,因为model.Orientation.Backward会改变。但是,如果camMemory.Y改变(我假设这是基于输入的),相机也会自行绕轨道运动。

请注意,缩放偏移向量会影响“气泡”大小。


抛开之前的话,我会继续尝试这个,你的代码完全破坏了我的x轴运动,但是我已经修复了它;现在看看它是否可以用来使y轴工作... - Remm
好的,最終這讓我面臨同樣的問題,只是氣泡在他面前翻譯而不是在後面 - Remm
没事了,我搞定了。哦,天啊,那真是太不容易了。谢谢你的帮助,伙计,我会把我的长子寄给你,让你为他献祭任何你认为合适的神灵。 - Remm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接