Определение формата исходных данных
Плоскость для нашего ландшафта мы определим как сетку из точек. Количество вершин в сетке будет определять разрешение нашего ландшафта. Чем больше вершин в ландшафте, тем детальнее он будет. Однако не стоит увлекаться излишней детализацией, так как при большом количестве обрабатываемых вершин вершинный шейдер окажется перегружен. Так, мы имеем для сетки ландшафта размером 512×512 вершин 524000 отображаемых полигонов в сцене, что чрезмерно много, нас интересует количество около 40000 полигонов, с учетом моделей сцены. Для нашего текущего примера мы создадим совсем небольшой тестовый ландшафт. Исходными данными для ландшафта будет количество вершин по горизонтали u и по вертикали v а также размер ландшафта size. Зададим размер ландшафта:
Определим формат вершинного буфера для ландшафта. Обратите внимание, что в вершинный буфер добавлена новая переменная normal. Эта переменная потребуется для правильного освещения ландшафта. О том, как работать с освещением и устанавливать его мы поговорим уже в следующем уроке. Итак, определим формат вершинного буфера для сетки ландшафта:
Теперь определим формат индексного буфера:
Теперь посмотрим какой код потребуется для генерации сетки и заполнения вершинного буфера:
Сетка сгенерирована правильно. Однако обратите внимание, что хотя координаты x иz просчитаны правильно, высота элемента ландшафта взята из пока еще неопределенного массива hmap[][]. В этом массиве будет храниться карта высот для нашего ландшафта. Для индексного буфера мы должны сгенерировать номера вершин в следующем виде:
Таким образом, существует определенная несложная формула длянахождение каждой пары тройки чисел, определяющих индексы для использования в индексном буфере ландшафта.
Обзор приложения В данном приложении мы рассмотрели генерацию меша из произвольного набора вершин и индексов. Исходный код текст данного приложения а также само приложение вы можете скачать тут. Сетка из вершин, генерируемая данным приложением иллюстрирует возможность генерации ландшафта используя имеющуюся карту высот. Заключение В этом уроке вы узнали, для чего нужна процедурная генерация; что нужно для того, чтобы правильно определить исходные данные для вершинного и индексного буфера; каким образом правильно задать вершинный и индексный буфер из своего набора вершин; разобрали пример приложения, генерирующего сетку вершин. В следующем уроке вы познакомитесь с очень увлекательной темой создания освещения в Direct3D11. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|