2017-01-15 11 views
0

Я пишу виртуальный глобус, используя DirectX, подобный Google Earth. До сих пор я завершил тесселяцию и протестировал с завернутой текстурой по всей сфере, что было успешным. Я написал координаты текстуры, чтобы соответствовать широте и долготе (90lat, -180lon = 0,0 и -90lat, 180lon = 1,1).Сопоставление текстур с сферой DirectX?

Для этого проекта мне нужно сложить несколько фрагментов изображения над сферой. Например, 8 изображений, охватывающих 90 градусов на 90 градусов. Эти плитки могут динамически обновляться (т. Е. Плитки могут быть добавлены или удалены при панорамировании). Я подумал об использовании целевого представления рендеринга и рисовании плиток напрямую, но я уверен, что есть лучший способ.

Как бы я это сделал? Есть ли способ установить текстуру только для охвата определенного пространства координат текстуры? То есть от (0, 0) до (0,25, 0,5)?

ответ

0

Существует три прямых решения (и, возможно, много более сложных).

  1. Вы можете создать геометрию, соответствующую часть сферы, покрытую плиткой и привлечь тех, кто впоследствии, установив правильную текстуру перед каждым вызовом отрисовки (если плитки раскладывают в простой форме, вы можете также генерировать эта геометрия с использованием instancing и один вызов рисования).
  2. Вы можете написать пиксельный шейдер, который оценивает координаты текстуры и выбирает соответствующую текстуру, используя преобразованные координаты текстуры.
  3. Извлечь все текстуры в большую текстуру и использовать их для визуализации сферы. Всякий раз, когда плитка меняется, свяжите большую текстуру как цель рендеринга и нарисуйте новую плиту поверх нее.