Хобрук: Ваш путь к мастерству в программировании

Координаты области просмотра Wpf

Привет, ребята, я работаю с wpf 3d, в настоящее время я пишу программу, которая будет создавать 3D-плитки на экране слева направо, но мне нужно знать, каковы мои границы по X, Y, т.е. (-x-0) (0- x+), поэтому я знаю, когда начинать следующий ряд плиток. Мои первоначальные мысли пытаются выяснить сложный алгоритм перехода от пикселей к координатам экрана, однако кажется, что должен быть более простой способ.

26.12.2009

Ответы:


1

Если я вас правильно понял, вы хотите узнать, какой диапазон 3D-координат виден через ваш Viewport3DVisual.

Этот вопрос не имеет единого ответа. Чтобы понять почему, представьте, что вы сидите за кухонным столом и завтракаете, а случайно смотрите в окно. Какой горизонтальный диапазон вы видите? Ну, вы можете видеть около пяти миль тех голубых гор вдалеке, но только в тридцати футах от вашего заднего забора. Другими словами, видимая область представляет собой не прямоугольную призму, а скорее пирамиду.

Суть в том, что вам нужно будет указать необходимое расстояние, прежде чем станет понятным, какой горизонтальный и вертикальный диапазон виден через окно просмотра.

После того, как вы указали расстояние, вот как сопоставить ваш видовой экран с 3D-точками на заданной плоскости, не выполняя все расчеты самостоятельно:

  1. Создайте модель в отдельном Viewport3dVisual, используя те же настройки камеры, но с моделью, состоящей исключительно из одного большого прямоугольника на нужном расстоянии.
  2. Используйте проверку попадания для проверки каждого угла области просмотра, получая обратный вызов результата проверки попадания.
  3. Извлеките координаты прямоугольника из результатов теста попадания и используйте их для своих расчетов.

Преимущество этого метода заключается в том, что он надежно работает, куда бы ни была направлена ​​камера, и даже работает с анимированными камерами и т. Д.

Примечание. Если я неправильно понял вопрос, и вы просто спрашиваете о размещении рядов плиток в 2D, которые будут содержать 3D-контент, то вы можете получить описанный вами эффект, просто используя WrapPanel. Если вы хотите выполнить привязку данных, используйте ItemsControl или ListBox с ItemPanelTemplate WrapPanel.

27.12.2009
Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

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

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..