我们正在为WP7开发一个实时策略变体。目前,我们需要一些指导/指令来构建一个有效的相机系统。换句话说,我们想要一台可以在平面(二维或三维水平图)周围平移的相机。我们一直在试验2d瓦片地图,而我们的单位/角色都是3d模型。
乍一看,我们似乎需要弄清楚如何计算相机周围的边界框及其整个视图透视图。或者,将摄像机的移动限制在它能看到的范围内,限制在2d地图的边界内。
任何帮助都将不胜感激!
干杯
发布于 2012-02-27 14:21:49
如果你在做真正的2D滚动,那就很简单了:
screen.width
(使用MathHelper.Clamp来帮助您完成此任务)
至于3D,它有点棘手,但原理几乎是一样的。
你真正需要的是定义两个Vector3点,一个是左下角,另一个是右上角(或者你也可以定义左上角/右下角,等等,由你决定)。这些将是您的边界值。
第一个可以定义为仅具有常量值的readonly,您可以完全按照您希望的那样调整该角的摄影机边界。有一种方法可以计算这个值,但老实说,我更喜欢有更多的控制,所以我通常选择值调整的路线。
第二个你可以从一个“基础”开始,你可以像以前一样手动调整(或计算),但这次你必须添加地图的宽度和长度(到X和Z),这样你就可以知道真正的边界取决于你加载的地图。
一旦有了这些值,就像以前一样钳制它们:
//pans the camera but caps at bounds
public void ScrollByCheckBounds(Vector3 scroll, Vector3 bottomLeftFront, Vector3 topRightBack)
{
Vector3 newScroll = Scroll + scroll;
//clamp each dimension
newScroll.X = MathHelper.Clamp(newScroll.X, topRightBack.X, bottomLeftFront.X);
newScroll.Y = MathHelper.Clamp(newScroll.Y, topRightBack.Y, bottomLeftFront.Y);
newScroll.Z = MathHelper.Clamp(newScroll.Z, bottomLeftFront.Z, topRightBack.Z);
Scroll = newScroll;
}https://stackoverflow.com/questions/9457166
复制相似问题