【问题标题】:Draw 2.5D or 3D Map with C# from lines使用 C# 从线条绘制 2.5D 或 3D 地图
【发布时间】:2010-05-11 06:02:48
【问题描述】:

我正在使用 C# 和 .NET CF 为 Windows Mobile 开发逐向导航软件。我可以通过绘制线条来绘制 2D 地图。我的问题是我想得到一张像图片中那样的 2.5D 地图。我在 2D 渲染图像上尝试了非仿射变换,但对于我们的目标 Windows Mobile 设备来说它太慢了。谁能给我一个关于我的问题的线索?


(来源:cartotype.com

【问题讨论】:

    标签: c# graphics 3d navigation


    【解决方案1】:

    一个非常基本的线性变换可能就足够了,因为视口总是具有相同的方向(即“倾斜”)。

    类似:

    # assuming 0,0 is top left of screen
    w = 320 # screen width
    h = 480 # screen height
    
    t1 = 0.75 # scale at top of screen
    t2 = 1.25 # scale at bottom of screen
    
    # x,y is the initial point
    # x_,y_ is the transformed result
    x_ = (x - w/2)*(t1+(y/h)*(t2-t1)) + w/2
    y_ = y
    

    这会将x 乘以一个较小的因子,屏幕越高,从顶部的0.75*x(当y=0)到底部的1.25*x(当y=h)。请注意,我们需要相对于屏幕中心缩放x

    这几乎可以像直接画线一样快,如有必要,可以分解出常量表达式,并可能使用查找表。

    【讨论】:

    • 您的回答遇到了新问题。当 y >= 0 和 y h 时,线条就会变得不规则。你能再帮我一次吗?
    • 也许可以尝试x_ = (x - w/2)*min(t2,max(t1, t1+(y/h)*(t2-t1))) + w/2 或类似的东西来防止 x_ 在 y 离开屏幕时过度扭曲。
    【解决方案2】:

    使用透视变换,因为它将直线映射到直线。更多详情请见this answer

    【讨论】:

      猜你喜欢
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2020-01-06
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多