【问题标题】:WPF - 2D Image to 3DWPF - 2D 图像到 3D
【发布时间】:2019-06-02 21:09:41
【问题描述】:

您好,我尝试从 2D 位图图像创建 3D 地图。我有一个像this. 黑色像素是墙的图像。并且这些像素具有恒定的高度。不是深度图,也没有不同的高度。

现在我尝试了常规方法。

    void Map_2D_to_3D(Image<Bgr,Byte> map_image)
    {
        for (int i = 0; i < map_image.Height; i++)
        {
            for (int j = 0; j < map_image.Width; j++)
            {
                Bgr pixel_color = map_image[i, j];
                if (pixel_color.Blue == 0 && pixel_color.Red == 0 && pixel_color.Green == 0)
                {
                    View3D.Children.Add(helper_box.Create_Helper_Box(2, 2, 2, i * 2, j * 2, 2, Color.FromRgb(0, 0, 255)));
                }
            }
        }
    }

在 XAML 中

    <Grid x:Name="grid_3D" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2" Grid.RowSpan="1">
        <h:HelixViewport3D x:Name="View3D" >
            <h:DefaultLights/>               
        </h:HelixViewport3D>
    </Grid>

在 for 循环中,我为每个像素添加一个立方体。结果就像this.

但在这种方法中,我创建了 400 多个不同的立方体。所以这很慢。由于性能问题,很难缩放和旋转此地图。

如果我使用更大的对象进行 3D 转换,性能会有所提高,但对于这种方法,我必须使用图像分割算法来检测圆形、多边形形状。

你能帮我解决这个问题吗?提前谢谢你。

附: : 我在 WPF 中使用 Helix-3d-Toolkit 进行 3D 视图。

【问题讨论】:

  • 这个问题可能会因为过于宽泛而被标记,但如果我这样做,我可能会使用 the Marching Squares algorithm 创建一个网格。如果可能的话,我还会结合Point In Polygon algorithm 来实现它来填充形状;如果用户实际上不能去那里,就没有必要为内部创建几何图形。

标签: wpf 3d helix-3d-toolkit


【解决方案1】:

我认为您仍然可以将 2D 地图用作高度图,根据您在 XZ 平面上的网格分辨率创建网格网格,根据地图数据更改顶点 Y 位置。那么它将是一个网格而不是许多盒子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-19
    • 2012-12-31
    • 1970-01-01
    • 2018-07-07
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多