
- •Теория maxScript Оглавление
- •Часть 1 2
- •Часть 1
- •Окно maxScript Listener
- •Окно maxScript Editor
- •Синтаксис
- •Управляющие конструкции
- •Пропуск проходов и принудительный выход из циклов
- •Часть 2 Функции
- •Объекты и классы в объектно-ориентированном программировании
- •Определения
- •Операции со строками
- •Операции с массивами
- •Команды 3ds max в maxScript
- •Часть 3 Создание свитков
- •События
- •Элементы интерфейса
- •Радиокнопки
- •Спиннер
- •Часть 4 Сплайны
- •Класс SplineShape
- •Методы, работающие с целым объектом Shape
- •Методы, работающие со сплайнами объекта Shape
- •Методы, работающие с сегментами сплайнов объекта Shape
- •Методы, работающие с вершинами сплайнов объекта Shape
- •Часть 5 Простейшие диалоговые окна
- •If queryBox “Хотите продолжить?” beep:false then ... Некоторые из методов работы с объектами
- •Характерные точки объектов
- •Системы координат
- •Координатные сетки
- •Определение угла между двумя векторами
- •Представление ориентации при помощи кватернионов (quaternions)
- •Создание вспомогательных объектов-пустышек Dummy
- •Изменение общих параметров анимации
- •Анимация вершин сплайнов
- •Примеры контроллеров анимации path constraint и link constraint
- •Методы print и format
Координатные сетки
Можно создать свою собственную координатную сетку, сделать активной и работать в ее системе координат. Сетка создается при помощи конструктора grid и обладает следующими свойствами:
<grid>.length длина сетки (float, 50.0 – по умолчанию)
<grid>.width ширина сетки (float, 50.0 – по умолчанию)
<grid>.grid размер ячейки (float, 10.0 – по умолчанию)
Пример:
setka=grid position: [0,0,0] -- создаем координатную сетку
rotate setka 90 [1,0,0] -- поворачиваем на 90 градусов относительно оси Х
activeGrid=$Grid01 -- активируем сетку по имени
in coordsys grid -- в системе координат сетки рисуем сплайн
(
item = splineShape ()
item.name = "Фигура"
item.steps = 0
item.optimize = true
addNewSpline item
addKnot item 1 #corner #line [0,0,0]
addKnot item 1 #corner #line [200,0,0]
addKnot item 1 #corner #line [200, 100,0]
addKnot item 1 #corner #line [0, 100, 0]
close item 1
item.pivot = [50, 0, 0]
updateShape item
in coordsys world setKnotPoint item 1 3 [200, 0, 300] -- в МСК перемещаем точку
addModifier item (Extrude amount: 10) -- применяем модификатор
)
activeGrid=homeGrid -- активируем стандартную сетку
delete setka -- стираем старую сетку
clearlistener() -- очищаем Listener
Определение угла между двумя векторами
a=[10, 0, 0]; b=[-10, 10, 0] -- первый и второй вектор
--ПЕРВЫЙ СПОСОБ - ПЛОХОЙ
c=cross a b -- вектор-нормаль к плоскости из первых двух векторов
ugol=asin(length(c)/(length(a)*length(b))) -- формула определения угла
messagebox (ugol as string)
--ВТОРОЙ СПОСОБ - ХОРОШИЙ
scalar_mult=a.x*b.x+a.y*b.y+a.z*b.z -- скалярное произведение векторов
ugol=acos(scalar_mult/(length(a)*length(b))) -- формула определения угла
messagebox (ugol as string)
Представление ориентации при помощи кватернионов (quaternions)
Кватернион – набор четырех значений, первое (скалярная часть) определяет поворот вокруг вектора, остальные три (векторная часть) определяют вектор оси поворота. Нормированный (normalized) кватернион, т.е. тот, у которого сумма квадратов всех компонентов равна единице, обладает следующими свойствами: скалярная часть равна косинусу половины угла поворота, векторная часть – ось вращения, длина вектора оси равна синусу половины угла поворота. Нормированный кватернион может определять повороты только от –PI до +PI.
Именно кватернионы, а не углы Эйлера используются в 3ds max (и вообще в компьютерной графике) для хранения поворотов объектов, поскольку это наиболее надежный и удобный способ. Вектор можно выразить через кватернион, у которого скалярная часть равна нулю.
Повороты в MAXScript происходят по правилу правой руки, т.е. против часовой стрелки вокруг положительного направления оси при вращении на положительный угол.
Конструкторы:
1. quat <x_float> <y_float> <z_float> <w_float>, где x, y, z – вектор, w – поворот.
2. quat <degrees_float> <axis_point3>, где <degrees_float> – угол в градусах, <axis_point3> – ось вращения (величина Point3).
3. <angleaxis> as quat – перевести величину <angleaxis> (ось и угол) в кватернион. Выражение типа <angleaxis> представляет собой набор из двух значений: угла поворота в градусах и вектора оси вращения (величина Point3).
4. <eulerangle> as quat – перевести величину <eulerangle> (угол Эйлера) в кватернион. Выражение типа <eulerangle> представляет собой набор углов поворотов вокруг осей координат: x, y, z.
5. <matrix3> as quat – перевести в кватернион ту часть матрицы 4х3, которая отвечает за поворот.
Можно и кватернионы переводить в углы Эйлера, выражения типа ось и угол или матрицы: <quat> as eulerAngles, <quat>as angleaxis, <quat> as matrix3.
Свойства: <quat>.w; <quat>.x; <quat>.y; <quat>.z – у всех тип Float.
Вычисляемые свойства: <quat>.angle – тип Float, <quat>.axis – тип Point3.
Некоторые из методов:
normalize <quat> – возвращает нормированный кватернион.
inverse <quat> – возвращает обратный кватернион (1/q).
Вектор q*v*(1/q) равен повернутому вектору v, выраженному через кватернион.