Здравствуйте, я пытаюсь создать 3D-карту из 2D растрового изображения. У меня есть изображение вроде 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 я добавляю куб для каждого пикселя. И результат как это.
Но в этом методе я создаю более 400 различных кубов. Так что это было очень медленно. Трудно увеличить и повернуть эту карту из-за проблем с производительностью.
Если я использую более крупный объект для 3D-преобразования, производительность улучшается, но для этого метода я должен использовать алгоритм сегментации изображения для обнаружения кругов, многоугольников.
Не могли бы вы помочь мне с этой проблемой? Заранее спасибо.
P.S. : Я использую Helix-3d-Toolkit в WPF для 3D-просмотра.