КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Изменение цвета каркаса объектов в цикле
Работа с выражениями Дальнейшие шаги по совершенствованию сценария необходимо тщательно продумаь. При написании сценариев нередко оказывается полезным набросать на бумаге предполагаемые действия, в том числе математические операции. В данном случае это не требуется, но при создании собственных сценариев такой подход может вам пригодиться. Основы MAXScript Теперь вам предстоит дополнить сценарий операциями изменения цвета каркаса объектов для формирования градиента от низа до верха столбика. В данном случае цвет каркаса должен изменяться снизу вверх от красного до желтого. Для выбора красного и желтого цветов потребуются следующие значения RGB. • Красный цвет: [255,0,0] • Желтый цвет: [255,255,0] Значение второй составляющей цвета (зеленой) должно изменяться от 0 до 255 в течение всего цикла изменения цвета каркаса. Допустим, что на сцене находятся пять объектов. В таком случае зеленая составляющая цвета каркаса должна изменяться следующим образом. • Объект 1:1/5 * 255 = 51 • Объект 2:2/5 * 255 = 102 • Объект 3:3/5 * 255 = 153 • Объект 4:4/5 * 255 = 204 • Объект 5:5/5 * 255 = 255 Итак, зеленая составляющая цвета каркаса первого объекта будет иметь значение 51. Но, если она должна иметь нулевое значение, соответствующий дробный множитель должен изменяться не от 1/5 до 5/5, а от 0/4 до 4/4. • Объект 1: 0/4 * 255 = 0 • Объект 2: 1/4 * 255 = 63.75 • Объект 3: 2/4 * 255 = 127.5 • Объект 4: 3/4 * 255 = 191.25 • Объект 5: 4/4 * 255 = 255 В данном случае числитель дроби (т.е. делимое число) представляет собой номер объекта, уменьшающийся на единицу (-1), а знаменатель дроби (т.е. число, на которое делят) остается без изменения и равен числу объектов минус один. В следующем упражнении вам предстоит ввести в сценарий код для изменения цвета каркаса объектов в цикле описанным выше образом. 1. Прежде всего, нужно получить знаменатель дроби, который равен числу находящихся на сцене объектов минус один. Для этого введите после строки кода coll = $ * следующую строку: bottomFraction = coll.count - 1 -- Получить знаменатель Но дело в том, что для определения числителя дроби нельзя использовать индекс совокупности объектов. В качестве выхода из этой ситуации можно изменить способ организации цикла Глава 1 2. Замените строку в цикле for следующей строкой кода: for i = 1 to coll.count do В этой строке значение переменной i заменено индексом объекта вместо самого объекта. 3. Внесите изменения в следующей строке: coll[i].pos = [0, 0, zNextObject] Необходимо также внести изменения в той строке, в которой определяется координата Z положения следующего объекта: zNextObject = zNextObject+ coll[i].height А теперь следует ввести две строки кода, в которых задается цвет каркаса. 4. Введите следующие строки кода непосредственно перед закрывающей цикл круглой скобкой: topFraction = i - 1 greenValue = (topFraction / bottomFraction) * 255 coll[i].wirecolor = [255, greenValue, 0] 5. Переместите немного объекты в видовых окнах, а затем выполните данный сценарий. Объекты складываются в столбик, но имеют не совсем верные цвета: все объекты, кроме верхнего, оказываются красными.
6. Проанализируйте код, используемый для расчета зеленой составляющей цвета каркаса, и определите причину появления подобной ошибки в сценарии: greenValue = (topFraction / bottomFraction) * 255 Обе переменные, topFraction и bottomFraction, имеют целые значения. В результате деления целых чисел в MAXScript всегда получается целое число, а дробная часть, если таковая образуется при делении, отбрасывается. Следовательно, если значение переменной topFraction равно 1, при делении получается следующий результат: 1/4 = 0 На самом деле он должен быть равен 0,25. Но поскольку дробная часть при делении целых чисел отбрасывается, результат остается равным 0 вплоть до значения 4 переменной topFraction для последнего объекта в данной совокупности. 7. Для устранения данной ошибки достаточно привести переменную topFraction или bottomFraction к типу чисел с плавающей точкой. Для этого внесите следующие изменения в выражение присваивания значения переменной bottomFraction: bottomFraction = coll.count - 1.0 Благодаря использованию в данном выражении числа 1.0 вместо целого числа 1, значение, сохраняемое в переменной bottomFraction, автоматически приводится к типу чисел с плавающей точкой. Теперь при делении значения переменной topFraction на это числовое значение будет также получаться число с плавающей точкой. Примечание. Для достижения того же результата можно было бы изменить на 1.0 число в выражении topFraction = i - 1. 8. Выполните данный сценарий. Теперь объекты получают цвета градиента от красного внизу до желтого вверху столбика. 9. Сохраните видоизмененный сценарий в файле MyPileUp.ms. Завершенный вариант данного сценария можно найти в файле \chapter1\ pile_up.ms на прилагаемом к этой книге CD-ROM. Совет. Данный сценарий можно немного усовершенствовать, организовав массив objects. Он представляет собой совокупность всех объектов, автоматически создаваемых в 3dsMax. Вместо того чтобы использовать массив coll для управления циклом for, замените соответствующую строку в данном цикле следующей строкой кода: for i = 1 to objects.count do После этого следует заменить все ссылки на массив coll ссылками на массив objects и удалить строку coll = $*. В итоге получится такой же результат, как при выполнении сценария, созданного в предыдущем упражнении. Данный вариант сценария можно найти в файле \chapter1\pile_up_2.ms на прилагаемом к этой книге CD-ROM. Глава 1
Заключение В этой главе вы научились пользоваться MAXScript для создания простых сценариев. В частности, вы использовали приемник команд MAXScript Listener для объявления переменных и присваивания им значений, а также для определения и применения функций. Кроме того, вы ознакомились с основными понятиями программирования, включая условные операторы, циклические конструкции, область действия, передачу параметров функции, массивы и структуры. И наконец, вы создали рабочий сценарий, видоизменяющий свойства объектов. Построение пользовательских интерфейсов Глава 2
Глава 2 Задание После изучения этой главы вы должны уметь следующее. • Создавать перемещаемые диалоговые окна или свитки утилиты • Вводить в свиток элементы управления пользовательского интерфейса • Организовывать реакцию сценария на пользовательский ввод
Дата добавления: 2014-10-15; Просмотров: 511; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |