Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Скрипт плугины класса SimpleMod

Читайте также:
  1. Celebrity Reflection – новейший лайнер класса Премиум
  2. АБСОЛЮТ (литера класса А)
  3. Анализ развития коллектива класса
  4. Введение в WSH. Обзор технологий скриптинга
  5. Вы можете выполнять задачи геообработки, запустив инструмент из диалогового окна, командной строки, либо в рамках скрипта или модели.
  6. Глава 12. Музыка для рабочего класса
  7. Глава 2. Основные негативные состояния и их скрипты.

Плугины данного класса позволяют реализовать произвольный модификатор, который может перемещать вершины, но не изменять топологию объекта (число вершин, принадлежность вершин к ребрам и граням и т.д.) Примерами таких модификаторов могут служить такие стандартные модификаторы 3ds max, как Bend, Stretch или Taper. Их написание, как правило, требует только одного обработчика события – map. Это событие происходит всякий раз, когда модификатор применяется к объекту. Именно в нем реализуется алгоритм перемещения вершин объекта в зависимости от параметров модификатора. Пример

plugin simpleMod saddle name:"SaddleDeform" classID:#(685325,452281)

version:1

(-- Блок параметров

parameters main rollout:params

(amount type:#integer ui:amtSpin default:20

)

-- Свиток, задающий параметр

rollout params "Saddle Parameters"

(spinner amtSpin "Amount: " type:#integer range:[0,1000,20]

)

-- Вычисление перемещения вершин

on map i p do

(p.z += amount * sin((p.x * 22.5/extent.x) * (p.y * 22.5/extent.y))

p

)

)

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

on map Индекс Точка_в_3D_пространстве do

Данный обработчик вызывается для каждой точки деформируемого объекта, которая может быть вершиной сетки, сплайна, управляющей вершиной NURBS объекта и т.д. Его задача вычислить новые координаты, для каждой точки и вернуть преобразованную точку, как результат работы функции. Первый аргумент обработчика – индекс представляет собой номер точки, который не обязательно совпадает с номером вершины в сетке. Второй аргумент – собственно точка, то есть ее координаты в трехмерном пространстве. Поскольку данный обработчик события вызывается весьма часто – столько раз, сколько точек в объекте, следует, по возможности, ограничить число создаваемых им объектов. Если Вам нужны локальные переменные, то лучше объявить их не в обработчике, а в определении плугина, что позволит избежать лишней работы с динамической памятью. Не следует так же пытаться получить доступ к модифицируемому объекту из обработчика map. Это может привести к тому, что модификация начнет рассчитываться внутри обработчика, а в результате образуется бесконечный цикл.

В обработчике map можно пользоваться предопределенными локальными переменными, содержащими данные о габаритном контейнере модификатора

min – Точка в 3D пространстве, содержащая минимальные координаты

габаритного контейнера

max – Точка в 3D пространстве, содержащая максимальные координаты

габаритного контейнера

center – Точка в 3D пространстве, содержащая координаты центра

габаритного контейнера

extent – Точка в 3D пространстве, содержащая размеры габаритного

контейнера

Последняя переменная, extent, как раз и используется в приведенном выше примере.

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

on modLimitZMin do

on modLimitZMax do

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

on modLimitAxis do

который должен возвращать одно из значений #x, #y или #z. При этом указанные в двух предыдущих обработчиках значения будут ограничивать применение модификатора по соответствующим осям. Простейший способ определения этих обработчиков – использовать значения заданные с помощью компонент интерфейса.


Дата добавления: 2015-10-31; просмотров: 62 | Нарушение авторских прав


Читайте в этой же книге: Список с возможностью множественного выбора | Индикатор процесса | Тело контекстного меню | Макро скрипты | Правила оформления средств работы с мышью | Скрипт плугины | Правила построения скрипт-плугина | Определение параметра | Функции, применяемые при разработке скрипт плугинов | Внесение изменений в плугин |
<== предыдущая страница | следующая страница ==>
Скрипт плугины класса SimpleObject| Скрипт плугины класса RenderEffect

mybiblioteka.su - 2015-2024 год. (0.006 сек.)