С# Создать "каркас" /3D "карта"

изображение http://prod.triplesign.com/map.jpg

Как я могу произвести аналогичный вывод в формах окон С# самым простым способом?

Есть ли хорошая библиотека для этой цели? Мне просто нужно указать направление, в котором графическая библиотека лучше всего подходит для этого.

5 ответов

Вы должны просто сворачивать свои собственные в 3D-графической библиотеке. Вы можете использовать directx. При использовании WPF он встроен, вы можете искать viewport3d. http://msdn.microsoft.com/en-us/magazine/cc163449.aspx

В графическом программировании то, что вы строите, - очень простая версия карты высот. Я думаю, что создание собственного даст большую гибкость в долгосрочной перспективе.


Так что лучшей библиотеки не существует. Их много, а некоторые - для разных целей. Вот небольшой список возможностей:

  • Tao: Сделайте что-нибудь самостоятельно с OpenGL
  • OpenTK: преемник структуры Tao
  • Dundas: один из лучших, но довольно дорогих (отсутствует в режиме реального времени)
  • Nevron: неплохо, но гораздо дешевле (также есть проблемы с данными в реальном времени)
  • National Instruments: дорогие, а не самые лучшие, но чертовски хороши в реальном времени.
  • ... Возможно, кто-то другой сделал некоторые другие переживания.


Вот как я реализую это с помощью OpenGL.

Сначала вам понадобится оболочка для импорта OpenGL API в С#. Немного Гуглинг привел меня к этому:

CsGL - OpenGL.NET

Там есть несколько примеров программ, демонстрирующих, как работает интерфейс OpenGL. Поиграйте с ними, чтобы получить представление о том, как работает система.

Чтобы реализовать 3D-карту:

  • Создайте массив векторов (это не тип std::vector/List, а x, y, z triplets), где x и y расположены вдоль горизонтальной плоскости, а z - это сумма вверх.
  • Установите сравнение Z с меньшим или равным (так что нарисованные сегменты линии видны).
  • Создайте список квадов, где вершины квадов берутся из массива в (1)
  • Рассчитайте цвет квада. Используйте точечный продукт квадрового нормали и направления источника света, чтобы получить значение для значения тени, т.е. Нормальное. Свет 1 черный, а -1 белый.
  • Создайте список сегментов линии, снова из массива в (1).
  • Рассчитать положение экрана различных точек проекции осей.
  • Настройте преобразование камеры и мира → (используйте примеры программ, чтобы получить представление о том, как это сделать).
  • Отдайте квадратики и линии, OpenGL выполнит преобразование из мировых координат (список в (1)) на экранное пространство. Нарисуйте метки, вы не захотите делать это с помощью OpenGL, поскольку метки не должны масштабироваться с расстоянием от камеры, иначе они могут стать слишком маленькими для чтения.

Так как выше всего довольно много, на самом деле нет места (и времени с моей стороны), чтобы опубликовать рабочий код (но кто-то может добавить что-то, если вам повезет). Вы можете сломать задачу и задать вопросы по частям, которые вы не совсем понимаете.


Вы пробовали это... инструменты визуализации данных gigasoft (его не бесплатно)

И вы можете проверить онлайн демонстрацию каркаса здесь

licensed under cc by-sa 3.0 with attribution.