В.Коваленко
Визуализация данных - один из традиционных разделов машинной графики, в котором решается задача наглядного представления больших массивов числовой информации. Такая задача естественна, поскольку "перемалывать" числа компьютер умеет быстро и в больших количествах. Как анализировать результаты - вот вопрос, с которым сталкиваются многие приложения в таких областях, как моделирование, обработка результатов экспериментов и данных мониторинга среды.
Прежде всего, необходимо более точное определение, понятия "данные". Этот термин перегружен сверх всякой меры, но виновных уже не найти, и в области визуализации ему придается достаточно точный, хотя и очень общий смысл. Данные имеют две части. Первая часть - это множество точек, заданных в некотором координатном пространстве и образующих область определения (носитель или сетку). Вторая часть - это числовые значения, поставленные в соответствие каждой точке. Вообще говоря, для одной точки таких чисел может быть несколько, и они составляют векторы значений, имеющие одну и ту же длину во всех точках области определения. В частном случае, когда длина вектора значений равна 1, говорят о скалярных данных.
Общность понятия данных делает методы их визуализации применимыми к данным совершенно разной природы. Так, примерами данных в описанном выше смысле могут быть: распределение электростатического потенциала в некотором объеме (скалярные данные), поле скоростей в потоке жидкости или газа (векторные данные).
Две составляющие "данных" предполагают, что при визуализации требуется наглядно представить два аспекта: значения и их распределение на носителе - в координатном пространстве. Хорошо известен "школьный" набор способов визуализации: графики функций, карты изолиний, сеточные поверхности, гистограммы.
Как можно охарактеризовать современный уровень области визуализации данных? Наиболее существенными представляются следующее тенденции:
- произошел реальный выход в изобразительное пространство 3-х измерений;
- качество инструментальных средств, предоставляемых пользователю в системах визуализации, доведено до уровня, при котором работа прикладного специалиста становится эффективной.
Задача визуализации данных состоит в том, чтобы преобразовать числовые массивы в геометрические образы или объекты. Если в двумерном изобразительном пространстве выбор форм представления сильно ограничен и они весьма абстрактны, то в пространстве 3D их можно в максимальной степени приблизить к моделируемой реальности. В этом аспекте визуализация данных развивается параллельно со смежными разделами машинной графики - геометрическим моделированием, анимацией и виртуальной реальностью. Есть несколько обстоятельств, позволяющих считать, что 3D-революция произошла на практике.
Во-первых, трехмерную визуализацию современные системы машинной графики обеспечивают на базовом, в том числе на аппаратном, уровне, реализуя рендеринг - расчет распределения света в сценах, которые составлены из геометрических объектов. При этом учитываются оптические свойства объектов: прозрачность, отражательность, текстура, а также расположение и направленность источников света. Модели расчета освещенности позволяют реалистично передать глубину сцены и пространственные соотношения между ее элементами.
Во-вторых, рендеринг объемов становится доступным не только на графических рабочих станциях, но и на персональных компьютерах. Вычислительной мощности хватает для интерактивной визуализации данных, а такие, например, операции, как панорамирование, вообще выполняются в реальном времени.
По-видимому, наиболее ярким и хорошо известным примером приложения 3D-визуализации данных может служить компьютерная томография. Это один из методов объемной реконструкции внутренних органов (мозг, сосуды, кости) путем неинвазивного (не требующего хирургического вмешательства), и достаточно безвредного медицинского обследования. Сочетание специальной аппаратуры сканирования и математических методов реконструкции позволяет получить числовые данные, характеризующие физические свойства тканей на множестве точек, расположенных регулярно в некотором объеме. Средства машинной графики позволяют показать эти данные в естественном виде. Работая с системой визуализации, врач может, например, детально рассмотреть модель кости с разных позиций, построить на экране ее сечение по плоскости, проходящей в районе трещины.
Трехмерность открывает перспективы на пути интеграции визуализации данных с геометрическим моделированием и виртуальной реальностью: характеристики изучаемого процесса, т.е. значения данных, можно привязать к геометрическим объектам, составляющим модельный мир. Так, например, естественно показывать значения плотности воздушного потока, обтекающего самолет, вместе с изображением самолета.
Для систем визуализации данных большое значение имеет эффективность технологии работы пользователей. Действительно, визуализация не решает сама по себе задачу, а служит вспомогательным, эвристическим средством. В современных системах визуализации данных применяются самые передовые компьютерные технологии: визуальный интерфейс, интерактивность, объектная ориентированность. В результате, набор средств и понятий системы визуализации данных образуют свой достаточно замкнутый объектный мир, и для того чтобы визуализировать данные, вовсе не требуется программировать. Системы визуализации данных становятся таким же доступным инструментом повседневной деятельности, как привычные редакторы текстов, графические редакторы или системы CAD/CAM. В полной мере все сказанное относится к системе IRIS DATA EXPLORER, разработанной компанией Silicon Graphics и реализованной сегодня на многих платформах от рабочих станций на базе RISC-процессоров MIPS до ПК на платформе Intel.
Обзор системы IRIS DATA EXPLORER
Система IRIS DATA EXPLORER, или просто EXPLORER, - это продукт, функционирующий в среде UNIX (для станций SGI) и Windows NT (для станций на платформе Pentium). Основой системы является графический интерфейс OpenGL, обеспечивающий реализацию рендеринга.
Спецификация системы определяет ее предметную область, как визуализацию данных, обработку изображений и создание продукции мультимедиа. Однако собственная организация системы EXPLORER представляет для специалистов не меньший интерес. В составе системы имеются средства, поддерживающие полный цикл разработки приложений по обработке данных, однако главная роль отводится визуальной компоновке, и в этом плане EXPLORER относится к классу систем быстрой разработки приложений (RAD - Rapid Application Development) и прототипирования.
В пользовательском и программном интерфейсе EXPLORER четко выдерживается объектно-ориентированный подход и модульность. В системе определены всего пять базовых типов данных (Lattice, Pyramid, Geometry, Parameter и Pick), и только с ними имеет дело пользователь.
Lattice - основной тип для представления визуализируемых данных. Он содержит числовые массивы, описывающие сетку, массивы значений и размерности массивов.
Pyramid - иерархия данных типа Lattice вместе с информацией о том, как следующий уровень строится из предыдущего. Этот тип используется для компактного представления конечно-элементных и молекулярных данных. EXPLORER содержит средства для работы с молекулярными данными в формате Brookhaven Protein DataBase.
Geometry - геометрическое представление объектов, состоящее из примитивов: полигонов, линий и точек.
Parameter - скалярные данные, которые управляют работой приложения и могут интерактивно меняться.
Pick - представляет информацию об указываемых на экране точках объектов.
Приложение можно рассматривать, как последовательность преобразователей (модулей), применяемых к данным этих типов. На первом этапе входные массивы данных, которые могут быть введены, например, из файлов произвольной структуры, преобразуются в данные типа Lattice или Pyramid. На последнем шаге производится преобразование в тип Geometry, который, собственно, визуализируется. Существуют различные способы такого преобразования, соответствующие разным формам визуального представления данных. Во всей цепочке преобразований участвуют только данные пяти перечисленных типов, которые, однако, параметризованы и имеют подтипы.
Функциональная единица пользовательского интерфейса - модуль обработки данных. Это выполняемая программная единица, реализованная на языке программирования Си или Fortran. Она имеет входные и выходные параметры, называемые в системе EXPLORER портами.
Визуально модуль представляется пользователю в виде управляющей панели, которая в зависимости от требуемой детализации может иметь три состояния: микро, мини и макси. На рис. 1 показана управляющая панель модуля в макси-состоянии, а на рис. 2 все модули имеют мини-панели.
Рисунок 1.
Управляющая панель модуля в макси-состоянии.
Управляющая панель содержит:
- кнопки входов и (отдельно) выходов;
- совокупность виджетов, посредством которых вводятся значения некоторых скалярных входных портов. Список разных видов виджетов включает циферблат (dials), слайдер, кнопки, редактор текста;
- некоторые модули имеют виджет для вывода изображений;
- кнопку Help для вывода функционального описания модуля.
Поставляемые в составе EXPLORER модули (и, возможно, модули, разработанные пользователем) лежат в библиотеке на полках, а разработка приложения заключается в компоновке из модулей схем (Map). Для этого нужные модули перетаскиваются с полок в рабочее окно Редактора Схем (Map Editor) и соединяются друг с другом. В собранном виде схема выглядит, как на рис. 2.
Рисунок 2.
Мини-панели.
В составе EXPLORER поставляется довольно много готовых схем, реализующих моделирование, обработку, визуализацию и анимацию данных из различных прикладных областей. Поскольку готовые схемы легко модифицируются путем добавления, удаления модулей и изменения связей, эти схемы служат полезными шаблонами для реализации различных способов визуализации данных. Рисунки, приводимые в этой статье, изготовлены именно на основе этих схем. Таким же образом могут быть сохранены в библиотеке и схемы, собранные пользователем. Для запуска готовых схем их достаточно переместить с полки библиотеки в рабочее окно.
Соединение модулей в схему заключается в установке соответствий между их входными и выходными портами. При нажатии на кнопки выходов пользователю предлагается меню, в котором перечислены названия и типы всех выходных портов модуля. Выбрав один из пунктов меню, соответствующие этому порту данные можно подать на некоторый входной порт следующего модуля, проделав ту же процедуру с его входным меню. Связи модулей по данным изображаются соединяющими их синими линиями (рис. 2).
При запуске схемы последовательность выполнения модулей определяется естественным образом - вычисленностью их входных параметров. Как правило, в конце схемы обработки стоят модули визуализации: DisplayImg (для вывода готовых изображений) или Render (для рендеринга и визуализации). Панели модулей содержат различные управляющие устройства - виджеты. Изменение состояния виджета, например перемещение ползунка, приводит к установке нового значения некоторого порта и к повторному выполнению всех модулей, зависящих от этого порта, результаты немедленно показываются в окне модуля визуализации. Таким образом обеспечивается интерактивность.
Сгенерированная в модуле Render 3D-сцена представляет собой конечный результат выполнения приложения и является не просто картинкой. Это виртуальный мир, в котором можно перемещаться, совершать прогулки и полеты, создавая, при необходимости, файл анимации. В окне изображения модуля Render работает специальный компонент - визуализатор, обеспечивающий все эти удовольствия. Кроме того, можно установить дополнительные источники света, отладить их направленность, цвет, интенсивность. Можно также поменять композицию сцены, перемещая и поворачивая участвующие в сцене объекты - и на этом список воэможностей не исчерпывается. Зачем все это надо? В контексте визуализации данных манипуляция сценой может быть полезной для того, чтобы полностью исследовать наблюдаемый объект. Например, чтобы разглядеть какую-то мелкую деталь, может понадобиться установить источник света в нужном ракурсе.
Система EXPLORER поддерживает полный цикл разработки визуальных приложений. Набор инструментов столь большой, что здесь мы можем только кратко их охарактеризовать.
Утилита DataScribe является средством ввода входных массивов, преобразования в типы данных EXPLORER. При вводе данных из файлов можно описать их входной формат и соответствие различным компонентам типов данных EXPLORER. Описание производится визуально с помощью управляющих панелей, в которых перечислены типы данных и их структура. В результате применения этой утилиты и редактора схем Map Editor строится модуль ввода или преобразования данных.
Редактор схем MapEditor и утилита DataScribe составляют минимальный набор средств для пользователей, которые могут обойтись в своих запросах готовым набором модулей - эти компоненты полностью визуальны и не предполагают никакого программирования.
Module Builder - это инструмент превращения программ на языке Си или Fortran в модули в смысле системы EXPLORER. С помощью Module Builder можно отобразить параметры функций в порты модуля, определить виджеты на управляющей панели модуля и связать их с параметрами функций. Все это опять же делается визуально.
Язык Shape во многом напоминает Си с расширениями для работы с типом данных Lattice. Он интерпретируется, и поэтому модули можно создавать, не используя Module Builder. Такой способ предпочтителен при отладке и прототипировании.
Модель данных в системе EXPLORER
Ранее мы определили данные визуализации, как отображение конечного множества точек сетки, называемых узлами, на множество числовых значений. Теперь имеет смысл более точно рассмотреть структуру и состав данных, используемых в EXPLORER, что необходимо для более четкого понимания, какие массивы должны быть подготовлены вне EXPLORER. Напомним, что для ввода и преобразования входных массивов в типы данных EXPLORER используется визуальная утилита DataScribe.
Существуют два типа для представления данных визуализации - Lattice и Pyramid. Тип Lattice позволяет представить данные, заданные на регулярных сетках, он более прост, и в данном случае ограничимся только им. Тип Pyramid используется для компактного представления нерегулярных структур: конечно-элементных сеток и сложных молекул. Однако способы визуализации данных, которые описываются в следующем разделе для типа Lattice, применимы и к типу Pyramid. Тип Lattice содержит следующие компоненты:
- nDim - размерность сетки;
- dims[nDim] - количество узлов сетки по каждому индексу (направлению) сетки;
- nDataVar - длина вектора значений в каждом узле;
- primType - тип значений данных: byte, short, long, float, double;
- nCoordVar - размерность пространства, в котором заданы узлы сетки или число координат у узлов;
- CoordType - тип сетки: uniform, perimeter, curvilinear.
Сетки, представимые в типе Lattice, имеют узлы, которые упорядочены в массиве размерности nDim. Если обозначить N множество узлов сетки, то отдельный узел идентифицируется nDim индексами N[i1,i2,3/4,inDim]. Каждый узел сетки, кроме граничных, имеет одинаковое число соседних узлов, у которых индексы отличаются на единицу - в этом заключается регулярность, и это используется при визуализации.
Существенно, что различается размерность сетки - nDim и размерность координатного пространства, в котором она задана, - nCoordVar (всегда выполняется соотношение nCoordVar > nDim). Для примера рассмотрим случай 3-мерного координатного пространства (nCoordVar=3). Если заданная в нем сетка имеет размерность nDim=2, то эта сетка представляет поверхность и ее можно визуализировать соединением соседних узлов отрезками (проволочная модель) или полигонами. Если же сетка имеет размерность nDim=3, то данные заданы на объемной сетке и к ним применим метод визуализации объема (volume rendering).
В структуре Lattice содержится информация о координатах узлов и соответствующих значениях. Значения данных всегда задаются массивом, в котором каждые nDataVar элементов относятся к одному узлу. Координаты узлов могут быть заданы по-разному, в зависимости от типа сетки CoordType.
Равномерная сетка (uniform) состоит из одинаковых прямоугольных ячеек размерности nDim. Для сеток этого типа размерности координатного пространства и сетки совпадают. Количество узлов сетки по каждому координатному направлению задается в массиве dims[nDim]. Координаты узлов не представляются в явном виде - вместо них хранятся граничные координаты по каждому направлению, которые вместе с количеством узлов определяют шаги сетки, возможно разные для разных направлений. Пример 3D-сетки uniform приведен на рис. 3.
Рисунок 3.
Равномерная сетка.
Сетка, заданная границей (perimeter), аналогична равномерной сетке, но шаг в каждом направлении может быть переменным. Узлы такой сетки задаются одномерными массивами координат граничных узлов по каждому направлению. Как и у однородных сеток, у сеток perimeter nDim=nCoordVar. Пример 2D сетки типа perimeter приведен на рис. 4., эту сетку определяют векторы X и Y.
Рисунок 4.
Сетка, заданная границей.
Криволинейные (curvilinear) сетки формально могут иметь любые координаты узлов, которые задаются явно в массивах, имеющих размерность координатного пространства. Для таких сеток уже не обязательно, чтобы nDim=nCoordVar, и это позволяет задавать множества, меньшие по размерности, чем координатное пространство. Примеры криволинейных сеток разной размерности приведены на рис. 5.
Рисунок 5.
Криволинейные сетки.
Рассмотрим примеры представления в типе данных Lattice некоторых важных видов информации.
1. Изображения задаются на 2-мерной равномерной сетке, в которой узлами служат пиксели. Значения данных кодируют цвет. Длина вектора значений может быть равной 1, что соответствует черно-белому полутоновому изображению, 3 - для цветного изображения в компонентах RGB или 4 - к компонентам RGB добавляется коэффициент непрозрачности (opacity) А. В результате для изображений имеем: nDim=2, nDataVar= 1,3,4, Coordtype=uniform.
2. Чтобы представить функцию от двух переменных, заданную на плоской равномерной сетке, в виде поверхности в 3D-пространстве, ее нужно преобразовать в тип Lattice с nDim=2, nCoordvar=3 и CoordType=curvilinear, где в качестве третьей координаты используются значения функции.
Способы визуализации данных
Для визуализации данных, представленных в типе Lattice, нужно передать их на входной порт модуля, выполняющего преобразование в геометрическую форму (тип Geometry). Форма визуализации зависит, главным образом, от размерности сетки nDim и размерности координатного пространства nCoordVar. Методы, применяемые для некоторой размерности координатного пространства, формально годятся и для меньших размерностей (в этом случае недостающие координаты устанавливаются в 0).
Изображение данных на плоскости
Начнем с nCoordVar=1. Для визуализации данных, заданных на одномерной сетке в пространстве одной переменной, имеется модуль Graph построения графиков значений в зависимости от узлов сетки. Если вектор значений имеет больше чем одну компоненту (отдельные компоненты называются каналами), можно построить несколько графиков. В управляющей панели модуля Graph есть слайдер, с которого вводится параметр - номер канала. Такой способ выбора каналов для визуализации применяется и в других модулях EXPLORER.
Для nCoordVar=2 данные интерпретируются как изображение. Значения задают цвет пикселей, как это описано в примере 1 предыдущего раздела. Изображение строится модулем DisplayImg в плоскости, совпадающей с плоскостью экрана. Модуль DisplayImg представляет собой визуализатор, позволяющий одновременно работать с несколькими изображениями, перемещать их по полю зрения и выполнять панорамирование. В EXPLORER имеется богатый набор модулей (около 60), которые реализуют классические методы обработки изображений - фильтрацию, Фурье-анализ, композицию и т.п. В этом плане EXPLORER представляет собой интерактивную оболочку другого продукта компании Silicon Graphics - ImageVision Library. Имеются также модули ввода (ReadImg) и вывода (WriteImg) изображений в форматах SGI, FIT, GIF, TIFF, PhotoCD. Все это вместе делает EXPLORER мощным инструментом интерактивной обработки изображений.
Изображение данных в пространстве
Наибольший интерес представляют способы визуализации в 3D-пространстве (nCoordvar=3), и здесь все зависит от размерности сетки: при nDim=2 данные заданы на поверхности, а при nDim=3 - это объемные данные.
Данные, заданные на поверхности
Это случай nDim=2. Прямой способ - изобразить сетку как геометрический объект, моделирующий поверхность. Такое преобразование из типа Lattice в тип Geometry выполняет модуль LatToGeom. Выход модуля LatToGeom типа Geometry подается на вход модуля Render, и в его окне появляется изображение объекта - поверхности. Можно выбрать 3 различных способа изображения поверхности:
- точками, которые расставлены в узлах сетки (0D-представление);
- решеткой, соединяющей соседние узлы (1D-представление);
- полигонами, натянутыми на соседние узлы сетки (2D-представление).
Значения данных изображаются цветом. Если вектор значений имеет размерность nDataVar=3, то компоненты вектора интерпретируются как RGB. Скалярные значения отображаются в черно-белый диапазон. Производится интерполяция цвета между узлами. Такая раскраска создается по умолчанию. Имеется специальный модуль GenerateColormap, с помощью которого можно построить произвольное отображение значений в цвет. На вход модуля подаются визуализируемые данные (в типе Lattice), а на выходе получается цветовая карта (она тоже типа Lattice). В окне модуля GenerateColormap изображается цветовая карта и графики зависимости компонентов RGBA от значений данных. Коэффициент "A" определяет прозрачность - при A=0 цвет невидим. Эти графики можно изменять, перемещая контрольные точки (они гладко соединяются сплайнами). В результате соответствие "цвет-значения" меняется. Можно разнести разные диапазоны значений в разные участки спектра (красный - голубой) или не изображать некоторые значения, сделав их прозрачными.
Цветовая карта подается на вход модуля Render и используется для раскраски поверхности. На рис. 6 показано изображение двухмерной функции T(x,y) - температуры от координат на плоскости. Эта функция получена путем моделирования диффузионного теплового потока. Распределение температуры имеет два пика, соответствующих источнику тепла и стоку. В левом верхнем углу изображена легенда , которая здесь демонстрирует соотношение значений температуры с цветовой картой. Схема генерации этого изображения может использоваться как шаблон для задач в параболических дифференциальных уравнениях теплопроводности.
Рисунок 6.
Остановимся на способе получения такого изображения функции от двух переменных. Принято, что в функции T(x,y) пары (xi,yi) называются аргументами, а Ti=T(xi,yi) - значениями. Такому пониманию соответствуют данные типа Lattice c nDim=2, nCoordVar=2 и nDataVar=1. Данные именно в такой форме наиболее просто получить при моделировании. Если непосредственно передать такие данные в модуль Render, то изображение будет строиться в плоскости, а значения функции будут эту плоскость раскрашивать. То же самое изображение можно получить, применяя не Render, а модуль DisplayImg.
Для того чтобы построить поверхность в 3D-пространстве, надо преобразовать данные в криволинейную двухмерную сетку (nDim=2 и nCoordVar=3). Это делается с помощью модуля DisplaceLat. В общем случае на вход ему подаются Функция и Смещение, оба - типа Lattice. Они должны иметь одинаковые размерности и длины массивов. Когда Смещение имеет скалярные значения, они добавляются к координатам узлов Функции, как дополнительное измерение (с возможностью масштабирования). Поэтому при вводе входной массив, содержащий только граничные значения координат, число точек и массив значений, преобразуется в тип Lattice c nCoordvar=2, nDataVar=1. Эти данные подаются в модуль DisplaceLat и как Функция, и как Смещение. На выходе получаются данные c криволинейной сеткой и nCoordVar=3.
Рисунок 7.
Модуль DisplaceLat можно применить и к изображениям. Самое простое - выдавить плоскую картинку в пространство, используя в качестве третьего компонента интенсивность цвета. Более содержателен пример комбинирования изображения рельефа местности, полученного при аэрофотосъемке, и топографических данных о высоте. На рисунке 7 показан плоский снимок местности в Корее, а на рисунке 8 - его пространственный ландшафт. Для этого в модуль DisplaceLat подается Функция - плоский снимок и Смещение - топографический массив. Рисунок 8 - результат рендеринга полученных таким образом данных.
Рисунок 8.
Объемные данные
Объемные данные задаются на трехмерной сетке (nDim=3) в 3D-координатном пространстве (nCoordVar=3). Рассмотрим три формы визуализации: рендеринг объема, слайсинг и построение изоповерхностей.
Прямой метод визуализации - это рендеринг объема. Для его получения используется модуль VolumeToGeom, преобразующий данные типа Lattice с nCoordVar=3 и nDim=3 в данные типа Geometry, которые уже можно визуализировать, подав их на вход все того же модуля Render. Преобразование заключается в вокселизации заданной области объема. Значения данных определяют цвет элементов объема - вокселей, причем отображение значения - цвет можно, так же, как при визуализации поверхностей, установить в модуле GenerateColormap. Применяются три различных алгоритма вокселизации, различающихся разной скоростью и качеством, вплоть до интерактивной скорости для достаточно сложных сцен.
При рендеринге объема существенным элементом цветовой карты становится четвертый компонент - коэффициент непрозрачности "A", изменяя который можно показать различную глубину визуализируемого объема (при A=0 воксель становится прозрачным - невидимым).
На рис. 9 показан пример визуализации атмосферных данных, полученных в Университете шт. Иллинойс путем численного моделирования зарождения сильного шторма [1].
Рисунок 9.
В качестве значений данных используется насыщенность воздуха водяным паром, а в результате получается картина штормовых облаков или даже смерча. Цветовая карта установлена так, что малому содержанию воды соответствует красный цвет, а большому - голубой.
Метод слайсинга позволяет выделить двухмерную поверхность (слайс) и цветом показать на ней значения данных. Исходными служат данные типа Lattice с nDim=3, а результатом - данные того же типа с nDim=2. В простейшем варианте этого метода применяется модуль OrthoSlice, который выделяет "плоскость" в пространстве индексов сетки. Если обозначить индексы входной сетки как I,J,K, то выходная сетка определяется фиксацией одного из них, например J=const. Выбираемый индекс и его значение являются параметрами модуля OrthoSlice и устанавливаются в его управляющей панели. Если входная сетка криволинейная, слайс не обязательно будет плоскостью, а может представлять собой, например, цилиндрическую поверхность. Выходом модуля слайсинга являются данные типа Lattice, и их можно визуализировать путем применения последовательности модулей LatToGeom и Render.
Если вместо модуля OrthoSlice взять модули Slice или ProbeLat, то индексную "плоскость" можно произвольно переместить или развернуть относительно сетки - получится косой слайс. Для задания преобразования, определяющего положение слайса, используется модуль TransformGen, выход которого, преобразование (тип Lattice), подается на модули слайсинга и на вход модуля Render.
Рисунок 10.
Рисунок 10 иллюстрирует пример визуализации для задачи исследования динамики воздушного потока, обтекающего самолет. Геометрия самолета получена 3D-сканированием, а данные обтекания рассчитаны по программе NASA ARC3D.
В качестве значений данных, изображаемых цветом, выступает плотность воздуха. Сеточная поверхность получена применением модуля OrthoSlice. В этой задаче используется криволинейная система координат и поэтому слайс тоже кривой. Систему расположенных под углом слайсов создает модуль ProbeLat - эту систему можно перемещать и поворачивать. Наибольшая плотность воздуха достигается в носовой части, где происходит максимальное сжатие газа.
Изоповерхности представляют собой последний из рассматриваемых способов визуализации объемных данных. Как известно, изоповерхность - это множество точек, на которых значения данных постоянны. Модуль IsosurfaceLat строит подмножество данных, удовлетворяющих этому условию, на двухмерной (nDim=2) криволинейной сетке. Изоповерхность показана на рис. 10 розовым цветом.
Рисунок 10 демонстрирует еще одно важное свойство организации обработки данных в EXPLORER: можно показать на одной сцене (в окне изображения модуля Render) несколько объектов, построенных различными способами по одним или разным данным.
Литература
[1]. Wilhelmson R.B., et al. A Study of Evolution of a Numerically Modelled Severe Storm, Intern. Journal of Supercomputer Applications, vol. 4, No. 2, 1990, pp.20-36.