首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows Phone XNA:实时战略摄像头

Windows Phone XNA:实时战略摄像头
EN

Stack Overflow用户
提问于 2012-02-27 05:07:58
回答 1查看 322关注 0票数 0

我们正在为WP7开发一个实时策略变体。目前,我们需要一些指导/指令来构建一个有效的相机系统。换句话说,我们想要一台可以在平面(二维或三维水平图)周围平移的相机。我们一直在试验2d瓦片地图,而我们的单位/角色都是3d模型。

乍一看,我们似乎需要弄清楚如何计算相机周围的边界框及其整个视图透视图。或者,将摄像机的移动限制在它能看到的范围内,限制在2d地图的边界内。

任何帮助都将不胜感激!

干杯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-27 14:21:49

如果你在做真正的2D滚动,那就很简单了:

screen.width

  • Scroll.Y
  • Scroll.X必须介于0和level.width之间-Scroll.X必须介于0和level.height之间- screen.height

(使用MathHelper.Clamp来帮助您完成此任务)

至于3D,它有点棘手,但原理几乎是一样的。

你真正需要的是定义两个Vector3点,一个是左下角,另一个是右上角(或者你也可以定义左上角/右下角,等等,由你决定)。这些将是您的边界值。

第一个可以定义为仅具有常量值的readonly,您可以完全按照您希望的那样调整该角的摄影机边界。有一种方法可以计算这个值,但老实说,我更喜欢有更多的控制,所以我通常选择值调整的路线。

第二个你可以从一个“基础”开始,你可以像以前一样手动调整(或计算),但这次你必须添加地图的宽度和长度(到X和Z),这样你就可以知道真正的边界取决于你加载的地图。

一旦有了这些值,就像以前一样钳制它们:

代码语言:javascript
复制
    //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;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9457166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档