我正在使用Ox Engine在XNA中制作一款3D游戏。很少有文档可供参考,但我到目前为止还是挺顺利的。然而,现在我遇到了一个逻辑难题,卡住了很长一段时间,我认为是时候寻求外部帮助了。
所有的移动和鼠标控制都正常工作,并且相机也能正确地跟随。但是,当我在Y轴上向上/向下移动鼠标以使相机围绕角色做圆形运动时,其他所有元素都会失去同步。相机应该绕着角色做轨道运动,但它还需要知道角色的朝向。我似乎无法同时实现这两个功能。
当我编写告诉它角色朝向并从其“远离”(转置)的代码时,它移动了轨道本身:
所有的移动和鼠标控制都正常工作,并且相机也能正确地跟随。但是,当我在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:如何在不移动中心点的情况下使环绕相机的“气泡”变大(转置不起作用或者我使用错误!)
编辑:我希望能为此设置赏金,哈哈