netlib.narod.ru< Назад | Оглавление | Далее >

Вершины и примитивы

Самой фундаментальной частью трехмерного объекта является вершина. Математически вершины представляются исключительно их трехмерными координатами (которые отображаются на тип данных Vector3 в XNA), но в XNA они включают дополнительную информацию, такую как цвет, текстура или данные вектора нормали, в зависимости от используемого формата вершин. В таблице 7.1 представлены определения вершин, предоставляемые XNA Framework.


Таблица 7.1. Определения структур форматов вершин в XNA



Формат вершин Описание

VertexPositionColor Определяет вершину с местоположением и цветом визуализации
VertexPositionTexture Определяет вершину с местоположением и координатами текстуры, описываеющими, как заданная текстура отображается на эту вершину, где (0, 0) является координатой верхнего левого угла текстуры, а (1, 1) соответствует правому нижнему углу текстуры
VertexPositionColorTexture Определяет вершину с местоположением, цветом и координатами текстуры
VertexPositionNormalTexture Определяет вершину с местоположением, вектором нормали и координатами текстуры


Помимо местоположения вершин и дополнительных данных, при создании трехмерных объектов вам надо указать, как XNA будет соединять эти вершины в различные примитивы рисования.

Примитивы рисования, или трехмерные примитивы, объясняют XNA как набор вершин (называемый в XNA буфер вершин, vertex buffer) будет визуализирован при вызове функции рисования. Вершины могут рисоваться как набор изолированных точек, как набор линий или как треугольники.

Треугольники используются как основа для создания любых других двухмерных или трехмерных объектов. Это вызвано тем, что для примитива, определенного только тремя точками, гарантируется, что он будет находиться в одной плоскости и будет выпуклым (линия, соединяющая любые две точки, находящиеся внутри треугольника, всегда полностью находится внутри треугольника, что не всегда справедливо для фигур, состоящих из четырех точек). Эти характеристики являются ключом к возможности быстрой визуализации в видеокартах, которые всегда используют в качестве основного типа примитивов визуализации треугольники.

Так, например, если вы хотите нарисовать на экране квадрат, следует использовать два треугольника. Если вы хотите создать куб, используется 12 треугольников (по 2 для каждой грани), как показано на рис. 7.4.


Рис. 7.4. Куб, составленный из треугольников

Рис. 7.4. Куб, составленный из треугольников


В XNA у объекта графического устройства есть метод с именем DrawPrimitives, который применяется для рисования содержимого буфера вершин, согласно заданному типу примитива, определенному в перечислении PrimitiveType:

 

ПРИМЕЧАНИЕ
Рисуя треугольники вам следует уделять особое внимание порядку их вершин, если вы хотите, чтобы XNA корректно определял, какие треугольники обращены к камере, а какие — нет. Это важно при рисовании сложных объектов, таких, например, как бублики. Чтобы определить «лицевую» сторону треугольника, следуйте пальцами правой руки за его вершинами, от первой до последней, в порядке их определения. Ваш большой палец будет указывать лицевую сторону треугольника, точно так же, как это было в правосторонней системе координат на рис. 7.1. Обратная сторона треугольника может рисоваться, а может и нет, в зависимости от параметра CullMode класса RenderState, так что вы должны создавать все треугольники объекта, следуя одному и тому же порядку.

netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz