Инициализация геометрии – создание вершин: InitGeometry
Теперь зададимся вопросом: предположим у нас имеется задумка о том, что будет из себя представлять наш будущий объект, короче – мы имеем конкретные координаты 3d вершин, имеем их количество а также знаем номера вершин которые будет группироваться в треугольники. Но как все эти данные установить в 3d адаптер в качестве вершинного и индексного буфера? Ответ несложный. Нужно сначала определить эти данные, потом создать на их основе объект вершинного буфера, и затем просто установить этот вершинный буфер в Direct3D (одновременно может быть установлен только один вершинный буфер – то есть устанавливаем буфер для одной модели, рисуем её, потом устанавливаем для другой, рисуем и т.д. Итак, создадим вершинный буфер:
Вы наверняка обратили внимание, что входящие данные для буфера – это обычный массив. Так что входящие данные для буфера можно не только заполнять константами, как в примере – а также можно генерировать их в массив динамически или загружать из файла. Теперь установим этот буфер как вершинный буфер Direct3D по умолчанию:
Теперь создадим индексный буфер чтобы знать какие вершины группируются в треугольники (полигоны):
Установим индексный буфер и его топологию (она всегда будет одинаковой).
Теперь для того, чтобы отобразить вершины нужно будет всего лишь вызывать каждый кадр метод g_pImmediateContext::DrawIndexed. Этот код пригодиться дальше в программе, и здесь он приведен лишь для примера:
В параметрах процедуры DrawIndexed передается количество вершин в модели. На этом функция InitGeometry завершена и мы можем смело приступать к функции Render, где мы каждый кадр отобразим нашу модель. В нашем уроке модель представляет из себя куб. У него 8 вершин, однако чтобы образовать сплошной куб их надо соеденить 12-ю полигонами. Также не будем забывать что в Direct3D версии 11 не обойтись без шейдеров и мы уже загрузили код шейдера в нашу программу, так что бегло рассмотрим этот код, после того как разберемся с содержимым Render. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|