Архитектура программного обеспечения, предназначенного для работы с трёхмерной графикой и её взаимодействия с электродинамическими моделями.

 

Введение

 

Электродинамические модели объектов зависят от геометрии последних. В то же время информация о геометрии содержится в файлах трёхмерной графики. Поскольку перед нами стоят задачи моделирования электромагнитных явлений, а также визуализации, то целесообразно создание совместимых интерфейсов графики и электродинамики. Разработка данных интерфейсов базировалась на следующих принципах:

-          независимость от конкретной реализации трёхмерной графики;

-          использование в качестве прототипа технологии DirectX.

Первый из этих принципов обеспечивает лёгкую адаптацию к различным реализациям 3D графики (DirectX, OpenGL и т.п.). Использование прототипа позволило в короткий срок разработать самосогласованный интерфейс с удачно выбранными названиями методов, которые совпадают с названиями методов прототипа. В настоящее время создана реализация данных интерфейсов с использованием технологии DirectX.

1. Описание графических интерфейсов.

 

Диаграмма классов графических интерфейсов представлена на следующем рисунке.

 

 

Рисунок 1. Диаграмма классов трёхмерной графики

 

 

Все абстрактные классы (названия этих написаны курсивом) касаются графического отображения. Классы EmVertex и MultiVertex , предназначенные для моделирования электродинамических явлений взаимодействуют с графическими с классами графики (взаимодействие отмечено стрелками). В каждом из классов трёхмерной графики помимо специфичных методов имеются два стандартных.

 

      virtual void SetPointer(void *p);

      virtual void * GetPointer();

 

Эти два метода реализуют доступ к объектам конкретной реализации графики. Например, в классе D3DFaceDX, являющемся наследником класса ID3DFace есть поле LPDIRECT3DRMFACE f; 

которое и предназначено для реализации графики с использованием DirectX, а реализация упомянутых методов выглядит следующим образом.

void D3DFaceDX::SetPointer(void *p)

{

            f = (LPDIRECT3DRMFACE)p;

}

 void * D3DFaceDX::GetPointer()

{

            return f;

}                                                        

 

Тип void * в данных методах используется для обеспечения переносимости.

 

Теперь перейдём к описанию интерфейсов каждого из указанных классов.

 

2.1 Класс ID3DFace

 

Прототипом данного класса интерфейс IDirect3DRMFace, используемый в технологии DirectX. Класс предназначен для отображения ограниченной плоским многоугольником поверхности. Он имеет следующие методы:

 

   virtual int GetVertexCount() - данный метод возвращает количество вершин поверхности;

   virtual TNT::Vector<double> GetNormal() – данный метод возвращает вектор нормали к  поверхности;

   virtual TNT::Vector<double> GetVertex(int i) – данный метод возвращает i – ю вершину поверхности ;                                                                                 

virtual TNT::Vector<double> GetColorV() – возвращает цвет элемента в виде четырёхмерного вектора;

   virtual void SetColorV(const TNT::Vector<double> & v) – устанавливает цвет элемента;

 

2.2 Класс ID3DFaceArray

 

Прототипом данного класса интерфейс IDirect3DRMFaceArray, используемый в технологии DirectX. Класс содержит коллекцию элементов поверхности. Он имеет следующие методы:

   virtual int GetElement(int index, ID3DFace **face) метод доступа до элемента поверхности, имеющего индекс равный index.

   virtual int GetSize() – возвращает количество элементов поверхности;

 

2.3 Класс ID3DFrame

 

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

 

   virtual TNT::Matrix<double> GetOrientation(ID3DFrame * frame) - данный метод возвращает ортогональную матрицу ориентации данного фрейма относительно фрейма frame;

   virtual TNT::Vector<double> GetPosition(ID3DFrame * frame) данный метод возвращает трёхмерный вектор положения данного фрейма относительно фрейма frame;

 

2.4 Класс IMeshBuilder

 

Прототипом данного класса интерфейс IDirect3DRMMeshBuilder, используемый в технологии DirectX. Класс содержит информацию о поверхности трехмерного объекта. Он имеет следующие методы:

 

   virtual void Load(const char* filename) – загрузка объекта из файла;

  

   virtual int GetFaces(ID3DFaceArray ** faces) – метод доступа до массива элементов поверхности;

 

2. Краткое описание взаимодействия с электродинамической моделью.

 

            Каждый элемент электродинамической модели имеет поле, являющееся указателем на объект типа ID3DFace и метод

 

void EmVertex::SetFace(ID3DFace * Face)

 

Данный метод осуществляет присваивание данному полю значение формального параметра Face, а также приводит геометрию элемента электродинамической модели в соответствие с геометрией графического объекта. Кроме того, в электродинамических моделях существуют методы графического отображения электромагнитных явлений. Эти методы используют указанное выше поле.

 

3. Реализация трехмерной графики с использованием DirectX.

        

Для реализации графики были созданы классы являющиеся наследниками, описанных в разделе 2 абстрактных классов, как показано на следующем рисунке.

 

 

Рисунок 2. Диаграмма классов реализации трёхмерной графики с использованием DirectX.

 

Мы видим, что данные наследники содержат поля – указатели на соответствующие объекты DirectX . Графическое отображение осуществляется через данные указатели.

 

 

4. Графический метод расчёта видимости элементов поверхности.

 

            В электродинамических моделях возникает необходимость расчёта видимости элементов поверхности излучателем. Геометрический расчёт является очень трудоёмким, и его сложность квадратично возрастает по мере увеличения количества элементов поверхности. Вместе с тем современные видеоплаты осуществляют подобные расчёты в доли секунды. Суть графического расчёта видимости состоит в том, чтобы раскрасить элементы поверхности разными цветами, а затем по составу цветов на полученном изображении определить какие элементы являются видимыми.

 

5.   Иллюстрации электродинамических моделей.

 

Ниже приведены графические иллюстрации электродинамических моделей. Производилось моделирование облучения моделей с разных позиций. Модели отображены в разных ракурсах. Цвета отображения соответствуют амплитудам токов моделей. Красный соответствует минимальному току, фиолетовый – максимальному, промежуточные – остальным цветам радуги, по возрастанию частоты светового  излучения.

Иллюстрации.

 

 

 

B - 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


B - 52

 

 

 

 

 


F - 14