【发布时间】: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