Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Тема 2

.pdf
Скачиваний:
9
Добавлен:
05.06.2015
Размер:
856.2 Кб
Скачать

Пример 2.7

Рассмотрим фрагмент прикладной программы визуализации, в котором отфильтрованным исходным данным из примера 2.2 ставится в соответствие компьютерное представление геометрической модели пространственной сцены в виде совокупности cфер.

……….

 

for i = 1 to ArrayX2.count do -----

оператор цикла,

( -----

где значение переменной i изменяется от 1 до

-----числа элементов массива ArrayX2 (т.е. числа точек,

-----отобранных на шаге фильтрации)

x = ArrayX2 [i] -- присвоение переменной x значения текущего элемента массива y = ArrayY2 [i] -- присвоение переменной y значения текущего элемента массива z = ArrayZ2 [i] ---присвоение переменной z значения текущего элемента массива

Sphere radius:0.4 pos: [x,y,z] --- создание сферы с выбранным радиусом 0.4 и

--- с центров в точке с координатами x,y,z

)

---по завершению цикла создается соответствующее

---размерности массива ArrayX2

---количество сфер с именами Sphere01, Sphere02…,

---задаваемыми по умолчанию

……….

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

Пример 2.8

<Standard> ambient: [<числовое значение>, <числовое значение>, <числовое значение>] wire: <логическое значение> faceted: <логическое значение> opacity: <числовое значение>

Эта функциональная процедура служит для задания компьютерного представления 2-й составляющей описания (модели) пространственной сцены - текстуры. Задаваемые параметры:

аmbient –цвет покрытия

wire – наличие/отсутствие решетчатой текстуры

faceted – наличие/отсутствие ребристой текстуры

opacity – процент прозрачности

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

Пример 2.9

Рассмотрим фрагмент прикладной программы визуализации, в котором задается компьютерное представление текстурного покрытия cфер из примера 2.7.

……….

select $Sphere* -- вспомогательная операция выделения всех сфер из примера 2.7

-- (после этого над ними могут выполняться те или иные операции)

ArraySphere = for b in $* collect ( b ) --- оператор цикла, в теле которого из ранее

---выделенных сфер формируется

---массив сфер ArraySphere

---вспомогательной переменной b в цикле

--присваивается в качестве значения текущая

--сфера

for i = 1 to ArraySphere.count do -----

оператор цикла,

( -----

где значение переменной i изменяется от 1 до

-----числа элементов массива ArraySphere

-----(т.е. числа сфер)

ArraySphere[i].material = standard ambient: [150, 250, 150] wire: false faceted: true

opacity: 50 ---- создание полупрозрачной ребристой текстуры салатового цвета

)

……….

Отметим, что помимо рассмотренной функциональной процедуры задания текстуры в программном продукте 3ds Max предусмотрены также другие функциональные процедуры аналогичного назначения.

Отметим также, что в 3ds Max предусмотрена программные средства для быстрого и несложного создания нештатных функциональных процедур мэппинга в виде плагинов 3ds Max.

Функциональные процедуры рендеринга

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

Рендеринг имеет ряд параметров (здесь, как было оговорено ранее, имеется в виду 3D рендеринг), в частности, к ним относятся - камера, источники освещения и среда. Рассмотрим примеры функциональных процедур задания этих параметров.

Пример 2.10

<targetCamera>_<pos>: [<числовое значение>,< числовое значение >, < числовое значение >] _ <target>:(<targetObject> _<pos>:[<числовое значение>,< числовое значение >,< числовое значение >])_<fov>: < числовое значение >

Результатом выполнения данной функциональной процедуры будет создание компьютерного представлений направленной камеры (камера направлена на цель (target)). Задаваемые параметры:

pos – координаты камеры в пространстве

target – объект-цель (в виде точки), на который будет направлена камера, задается с помощью параметра pos – координаты объекта-цели камеры в пространстве

fov – поле зрения камеры (величина обратная фокусному расстоянию камеры)

Пример 2.11

<Omnilight>_<rgb>:(<color> [<числовое значение>,< числовое значение >, <

числовое значение >)_<shadowColor>:(<color> <числовое значение>,< числовое значение >, < числовое значение >)_<pos>: [<числовое значение>,< числовое значение >, < числовое значение >]

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

rgb – цветовая окраска света, излучаемого источником освещения

shadowColor – цветовая окраска тени, отбрасываемой объектами, освещенными данным источником освещения

pos – координаты источника освещения в пространстве

Пример 2.12

<addAtmospheric> _(<Fog>_<Fog_Color>:_(<color> <числовое значение>_<

числовое значение >_< числовое значение>)_<Density>:< числовое значение>)

Результатом выполнения данной функциональной процедуры будет создание компьютерного представления среды типа «туман». Задаваемые параметры:

Color – цвет тумана

Density – плотность тумана

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

Пример 2.13

<render>_<camera>:<указатель на камеру>_ <outputwidth>: <числовое значение> _< outputheight>: <числовое значение> _ < outputfile>: <"название файла">

Результатом выполнения данной функциональной процедуры будет статическое проекционное графическое изображение текущей (сформированной к данному моменту времени) сцены на графическом терминале, в качестве которого в 3ds Max используется монитор. Одновременно компьютерное представление проекционного графического изображения сцены сохраняется в файл. Задаваемые параметры:

camera – камера, с помощью которой будет осуществляться рендеринг

outputwidth – ширина получаемого графического проекционного изображения в пикселях

outputheight – высота получаемого графического проекционного изображения в пикселях

outputfile – название файла, в котором будет сохранен результат рендеринга (необязательный параметр)

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

Пример. 2.14

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

……….

c = targetCamera pos:[10,0,0] target:(targetObject pos:[0, 0, 0]) fov: 45

set animate on

at time ti move c [10,0,0] ---- расположение камеры в выбранный начальный дискретный

----момент времени (ti=i*dt) в точке с

----координатами 10,0,0

at time tj move c [20,0,0] ---- расположение камеры в выбранный конечный дискретный

----момент времени (tj=j*dt) в точке с

----координатами 20,0,0

……….

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

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

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

<render>_<camera>:<указатель на камеру>_<fromframe>: <числовое значение>_<toframe>: <числовое значение>_ <outputwidth>: <числовое значение> _< outputheight>: <числовое значение> _ < outputfile>: <"название файла">

Здесь дополнительно задаются параметры:

fromframe – задаваемый номер k начального проекционного графического изображения , соответствующего моменту времени tk=k*dt, k>=i.

toframe – задаваемый номер l конечного проекционного графического изображения , соответствующего моменту времени tl=l*dt, l>=j.

Т.е. в процессе выполнения этой функциональной процедуры на графическом терминале последовательно воспроизводятся статические проекционные графические изображения с номерами, изменяющимися от k до l из числа сформированных статических проекционных графических изображений с номерами от i до j.

Приведем пример прикладной программы визуализации исходных данных из примера 2.1. Результатом работы этой программы будет статическое проекционное графическое изображение пространственной сцены, получаемое в результате мэппинга, описанного в примере 2.7.

Фрагменты этой программы, соответствующие вызовам функциональных процедур задания исходных данных, фильтрации и мэппинга, были приведены выше в примерах 2.1, 2.2, 2.7

Пример 2.15

fs=openFile ”c:\\textfile.txt” --- открытие файла с именем

”c:\\textfile.txt” , и присвоение переменной fs значения указателя на данный файл . Здесь в качестве параметра функции используется символьное значение ”c:\\textfile.txt” .

 

ArrayX = # ()

 

ArrayY = # ()

 

ArrayZ = # ()

 

for i = 1 to 10 do ----- оператор цикла,

 

( ----- где значение переменной i изменяется от 1 до 10

 

x = readValue fs ------ считывание текущего значения координаты x из

Задание

файла

исходных

y = readValue fs ------ считывание текущего значения координаты y из

данных

файла

 

z = readValue fs ------ считывание текущего значения координаты z из

 

файла

 

append ArrayX x ------ занесение текущего значения переменной x в

 

массив ArrayX

 

append ArrayY y ------ занесение текущего значения переменной y в

 

массив ArrayY

 

append ArrayZ z ------ занесение текущего значения переменной z в

 

массив ArrayZ

 

)

 

close fs --- закрытие файла

 

ArrayX2 = # ()

 

ArrayY2 = # ()

 

ArrayZ2 = # ()

 

for i = 1 to 10 do ----- оператор цикла,

 

( ----- где значение переменной i изменяется от 1 до 10

 

x = ArrayX [i] ------ присвоение переменной x значения текущего

 

элемента массива

 

y = ArrayY [i] ------ присвоение переменной y значения текущего

 

элемента массива z = ArrayZ [i] ------ присвоение переменной z

 

значения текущего элемента массива

 

if (x > -5 and x < 5 and y > -5 and y< 5 and z > -5 and z < 5) --- оператор

Фильтрация

условия

исходных

--- проверка нахождения точки

данных

 

 

--- внутри куба

 

then

 

(

 

append ArrayX2 x ------ занесение выбранного значения переменной

 

x в массив

 

append ArrayY2 y ------ занесение выбранного значения переменной

 

y в массив

 

append ArrayZ2 z ----- занесение выбранного значения переменной z

 

в массив

 

)

 

)

Мэппинг отфильтрованных данных

Рендеринг

for i = 1 to ArrayX2.count do -----

оператор цикла,

( -----

где значение переменной i изменяется от 1 до

-----числа элементов массива ArrayX2 (т.е. числа точек,

-----отобранных на шаге фильтрации)

x = ArrayX2 [i] -- присвоение переменной x значения текущего элемента массива

y = ArrayY2 [i] -- присвоение переменной y значения текущего элемента массива

z = ArrayZ2 [i] ---присвоение переменной z значения текущего элемента массива

Sphere radius:0.4 pos: [x,y,z] --- создание сферы с выбранным радиусом 0.4 и

--- с центров в точке с координатами x,y,z

)

---по завершению цикла создается соответствующее

---размерности массива ArrayX2

---количество сфер с именами Sphere01, Sphere02…,

---задаваемыми по умолчанию

c = targetCamera pos:[10,0,0] target:(targetObject pos:[0, 0, 0]) fov: 45 render camera:c

При заданных в файле textfile.txt исходных данных

0 0 0

1 3 0

2 2 0

3 3 0

0 4 0

5 3 0

1 7 0

1 0 2

0 1 0

0 -1 0

получим проекционное графическое изображение, представленное на Рис.2.3

Рис.2.3

Анализ этого изображения позволяет предварительно выделить 2 кластера пространственных точек, координаты которых лежат в диапазоне от -5 до 5, заданного в прикладной программе (исходное количество точек равнялось 10).

Следует отметить, что в 3ds Max функциональные процедуры рендеринга доступны не только из прикладной программы. Так, например, человек может модифицировать полученное проекционное графическое изображение сцены, описанной в прикладной программе, в интерактивном режиме с использованием языка диалога 3ds Max.

Заканчивая рассмотрение использования программного средства 3ds Max в качестве инструментального средства для решения прикладных задач анализа данных методом научной визуализации, отметим, что более подробное описание 3ds Max можно найти, например, в учебнике «Основы 3ds Max 8. MaxScript».