русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Управление прозрачностью графических объектов


Дата добавления: 2015-07-23; просмотров: 767; Нарушение авторских прав


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

В книгу «MATLAB. Using MATLAB Graphics. Version 6.0» введен обширный раздел, посвященный управлению прозрачностью объектов. Ниже представлена краткая «выжимка» из этого раздела.

Свойство прозрачности основано на представлении изображений в виде отдельных слоев, что обычно требует применения многомерных массивов. Данные о прозрачности размещаются в матрице размера mxn AlphaData, элементы которой должны иметь тип double или uint8 (элементы типа NaN недопустимы). Возможности задания прозрачности поддерживаются графическими файлами с расширением PNG. В изображениях, хранящихся в этих файлах, возможна поддержка кодирования цветов с разным разрешением - вплоть до 48 бит при RGB графике.

Для управления прозрачностью служит специальная системная переменная alpha, значение которой лежит в пределах от 0 до 1. Если построенный вами графический объект содержит элементы прозрачности, то для их наблюдения нужно задать команду alpha(x), где х задает уровень прозрачности. Например, задав alpha(0.5), мы получим «полупрозрачное» изображение, на котором будут видны обычно скрытые его детали.

Приведем наглядный пример использования свойств прозрачности из описания графики системы MATLAB, где строится график скорости жидкости на пути ракеты подводного базирования в бесконечной емкости:

[х у z v] = flow;

p=patch(isosurface(x,y,z,v,-3));

isonormals(x,y,z,v,p);

set(p,'facecolor','blue','edgecolor','none');



daspect([1 1 1]);

view(3); axis tight; grid on;

camlight; lighting gouraud;

Здесь строится график трехмерной фигуры flow (течение). Она представлена тремя массивами своих точек х, у и z и дополнительным массивом класса AlphaData — v. При первом построении свойство прозрачности отсутствует (по умолчанию) и построенная фигура будет иметь вид, представленный на рис. 7.6.

Рис. 7.6.Трехмерная фигура в обычном представлении (без свойства прозрачности)

Если исполнить команду alpha(0.5), то в массиве AlphaData будут заданы эле-менхы, обеспечивающие степень прозрачности 0.5. При этом изображение объекта будет иметь вид, представленный на рис. 7.7. Теперь на нем четко видна скрытая ранее твердая сердцевина фигуры и даже проглядывают координатные оси.

Рис. 7.7.Трехмерная фигура с установкой свойства прозрачности

Более подробные сведения об использовании свойства прозрачности можно найти в обширной документации по графике в формате PDF. Эта документация в виде файла graphg.pdf объемом свыше 12 Мбайт поставляется с системой MAT-LAB 6.

Примеры, иллюстрирующие возможности дескрипторной графики

Теперь рассмотрим более сложные примеры, наглядно демонстрирующие возможности дескрипторной графики. Воспользовавшись File > New > M-File или edit msl.m. создадим файл msl.m следующего содержания:

[х,у] = meshgrid([-2:.4:2]);

Z =sin(x. ^ 2+y.^2);

fh = figureCPosition'.[350 275 400 300].'Color ' . V);

ah = axes('Color'.[.8 .8 .8].'XTick'.[-2 -1 0 1 2]....

'YTick',[-2 -1 0 1 2]};

sh = surfaceCXData'.x.'YData'.y.'ZData'.Z....

'FaceColor',get(ah.'Color')+.....

'EdgeColor'. 'k'.'Marker'.'o'....

'MarkerFaceColor',[.5 1 .85]):

В этом файле заданы три объекта: прямоугольник fh — объект класса figure, оси с метками ah — объект класса axes и трехмерная поверхность sh — объект класса surface. Она является результатом наложения объектов fh и ah друг на друга. При этом объект ah класса axes явно наследует свойства объекта fh класса figure. Наследование здесь проявляется в том, что при задании свойства «цвет граней» (FaceColor) объекта sh используется осветление (добавлением константы 0.1) цвета осей, полученного при помощи функции get (ah. color).

Команда v1ew(3) изменяет точку обзора трехмерной поверхности. Раньше, когда параметры осей были жестко заданы, мы смотрели на поверхность строго сверху. Теперь команда v1ew(3) установила точку обзора трехмерных графиков, принятую по умолчанию.

Теперь создадим второй файл — ms2.m:

h(l) = axes('Position',[0 Oil]);

sphere;

h(2) = axesCPosition'.[0 0 .4 .6]);

peaks:

h(3) = axes('Position'.[0 .5 .5 .5]);

sphere:

h(4) = axes('Position'.[.5 0 .4 .4]);

sphere;

h(5) = axes('Position 1 .[.5 .5 .5 .3]):

cylinder([0 0 0.5]);

set(h,'Visible 1 .'off):

alpha(0.l):

set(gcf.'Renderer'.'opengl')'

Здесь задано 5 трехмерных объектов: три сферы разных размеров, поверхность peaks и цилиндр.

Запустив файл ms2, мы получим еще более интересную картину. Заново будет вычислена величина z, а затем построены изображения пяти фигур:

z = 3*(1-х). ^ 2.*ехр(-(х. ^ 2) - (у+1). ^ 2) ...

- 10*(х/5 - х.'З - у."5).*ехр(-х.^2-у.^2) ...

- 1/3*ехр(-(х+1).^2 - у.^2)

Последовательность наложения фигур, заданных в файле ms2, определяется последовательностью их появления в файле. Любопытен вид цилиндра — похоже, что произошедшее с ним преобразование связано с изменением системы координат с декартовой на сферическую.

Рис. 7.8.Комбинированный рисунок, полученный при запуске файла ms2.m после запуска ms1.m

Чтобы понять, какие из объектов наследуют свойства других объектов, следует рассмотреть диаграмму иерархии объектов дескрипторной графики MATLAB, что объекты surface расположены ниже объектов axes, а те, в свою очередь, расположены ниже объектов класса figure. Поэтому ясно, что в случае запуска файла msl свойства сетки, построенной с применением объекта axes, будут унаследованы объектом sh, построенным командой surface.

[ Обратите внимание, что трехмерная графика в этом примере строится с рендерингом MATLAB 6 ('opengl'). В MATLAB 5.3 без установки патча Open GL по умолчанию был бы выбран рендеринг с использованием Z-буфера и на некоторых компьютерах были бы возможны искажения. Не было бы прозрачной фигуры. В MATLAB 6 при включенном режиме видеоадаптера TrueColor можно пропустить последнюю команду. Но при необходимости вывода изображения на печать set(gcf,'Renderer','opengl') можно быстро отредактировать и заменить на set(gcf,'Renderer', 'painters'). — Примеч. ред. ]

Все объекты второго файла — ms2 — относятся к классу axes. Именно поэтому они строятся поверх объектов, показанных на рис. 7.10. Координаты всех пяти трехмерных фигур (см. рис. 7.11) жестко заданы в соответствующих командах axes. В заключение этого раздела следует еще раз отметить, что дескрипторная графика рассчитана не столько на конкретных пользователей, использующих MATLAB как прикладную программу, сколько на опытных разработчиков программного обеспечения для этой системы. Разумеется, это не исключает полезную возможность изменения параметров графиков путем настройки свойств графических объектов, что особенно наглядно видно из последних приведенных примеров. Многие тайны дескрипторной графики познаются только в ходе практических экспериментов с ней.



<== предыдущая лекция | следующая лекция ==>
Объекты дескрипторной графики | Основные команды для создания пользовательского интерфейса


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.057 сек.