Проект системы "Mechanics Studio .NET" | ||||||
Программирование 3D графики на Managed DirectX | ||||||
  
Обновление: 01.09.05
|
       Типы данных для выполнения матричных преобразований       В библиотеке Managed DirectX 9 имеются уже реализованные и удобные в использовании типы данных для работы с матрицами и векторами. Эти типы имеют удобные и быстрые методы выполнения векторных и матричных операций. Поэтому, в данном случае, нет необходимости создавать какие-либо свои типы данных, а нужно использовать уже имеющиеся. Далее я приведу краткое описание этих типов.       Структуры векторов:
      Вектора имеют поля, через которые можно обращаться к компонентам вектора: X, Y, Z, W. Вне зависимости от того, какого типа вектор, он имеет общие для всех векторов методы. Многие методы имеют как обычную, так и статическую реализацию. Я приведу лишь названия основных статических методов, без указания типов передаваемых в качестве параметров векторов:
      Структура матрицы:       Matrix pM = new Matrix( ); – конструктор создания 0-й матрицы размерности 4x4;       Доступ к компонентам матрицы осуществляется через поля именуемые как Mij, где i=1..4, j=1..4. В структуре матрицы так же определены статические методы, позволяющие создавать матрицы, выполняющие стандартные пространственные аффинные преобразования:
      Как и для вектора, в структуре матрицы реализованы статические и нестатические методы, выполняющие основные операции над матрицами. Приведу лишь некоторые из статических реализаций этих методов:
       Пространственные и проекционные системы координат       Системы координат в DirectX описываются матрицами Matrix. В зависимости от использования, системы координат принято называть по разному. Исходную систему координат, по отношению к которой выполняются все преобразования объектов сцены, принято называть мировой системой координат. Систему координат, связанную с некоторым объектом, и преобразуемую вместе с объектом, называют объектовой системой координат (говорят, что объект “вморожен” в систему координат).
      Для изменения мировой системы координат в DirectX, необходимо изменить
определяющую её матрицу. Матрица мировой системы координат хранится в поле объекта Device – устройства,
выполняющего все графические операции Direct3D: Device→Transform→World;       Если мировая система координат (X, Y, Z) преобразована к (Xo, Yo, Zo), то все объекты будут отображаться в новой объектовой системе координат (см. рис.).       Кроме пространственных систем координат, в DirectX есть так же проекционные системы координат, которые используются в процессе рендеринга сцены – т.е. при проецировании 3-х мерных
объектов на плоскость камеры. Положение и направление камеры определяются матрицей вида: device→Transform→View; Таким образом, матрица вида определяет положение и ориентацию системы координат камеры (Xc, Yc, Zc) (см. рис. ниже - Camera coordinates). Матрица вида может быть автоматически сформирована путём вызова статического метода LookAtLH по передаваемым векторам положения камеры (CamPosition), точки фокуса (camTarget) и верха камеры (CamUpVector): device→Transform→View = Matrix::LookAtLH( Vector3 camPosition, Vector3 camTarget, Vector3 camUpVector );       Кроме того, для полного определения процесса проецирования, нужно задать
параметры используемой нами камеры. Эти параметры хранятся в матрице проецирования: device→Transform→Projection;       Прежде всего, необходимо определить какой тип проекции будет использоваться:
Когда сцена спроецирована на проекционную плоскость, то координаты точек этой плоскости измеряются в экранных координатах (p, q) (Screen Coordinates).        Материалы, текстуры и загрузка полигональных моделей из X-файла       Для моделирования реалистичных геометрических сцен, в качестве составных объектов используются полигональные модели или Mesh-объекты. Полигональной моделью (Mesh) называется объект, содержащий вершинный и индексный буферы, определяющих полигоны некоторого геометрического объекта.       Основным преимуществом использования Mesh-объектов является возможность удобного хранения и формирования сложных геометрических объектов, а также их эффективный рендеринг.       Для реалистичного отображения не достаточно только информации о его вершинах. К примеру, Mesh-объекты не содержат информации о цвете вершин, а так же способе наложения на объект текстуры, более подробно описывающеё его поверхность. Материал – это описание, того каким образом покрываемая им поверхность будет отражать свет. Материал включает в себя отражаемый диффузный (Diffuse) и общий цвет (Ambient), цвет блика (Speccular), параметры отражения света и уровень прозрачности материала (Alpha). Текстура – это изображение, которое накладывается на поверхность геометрического объекта определённым образом. Способ наложения текстуры определяют текстурные координаты.       Информация о текстурных координатах обычно добавляется в буфер вершин геометрического объекта, на который будет наложена текстура. Обычно задание текстурных координат (и буфера вершин в целом) достаточно трудоёмкий процесс для сложных объектов. Но, к счастью, вся информация о полигональной модели может быть загружена из файла специального формата – X-файла. X-файл – это файл в формате XML, хранящий следующие данные полигональной модели:
      Данные из X-файла могут быть загружены с помощью следующей функции:
// Код функции приведён на языке C++/CLI: |