3D Engineering

...Лучшее из общего.

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Во время работы с объектами сцены непосредственно в пользовательском ...

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

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

И в этом случае на помощь приходит метод представления процесса вращения с помощью кватернионов. Кватернионы явно обозначают всякое возможное вращение, что позволяет точно и однозначно задать вращение вокруг осей X, Y и Z.

Значение кватерниона выражается в виде угла и значения типа Point3, описывающего некий вектор:

quat

Векторная часть данного выражения относится к выражению типа Point3. Отдельные значения в выражении типа Point3 всегда находятся в пределах от -1 до 1. Ниже приведены некоторые примеры обозначения кватернионов:

quat 30 [1, 0, 0]
quat 30 [0.266917, 0.534798, 0.801715]

Для того чтобы лучше понять кватернионы, представьте себе сферу с вектором, направленным от центра сферы к ее поверхности. Векторная часть кватерниона обозначает направление вектора, в угол— количество градусов, на которое объект должен повернуться вокруг данного вектора.

Если векторное значение состоит из единицы и двух нулей, то вектор нетрудно себе представить направленным вдоль одной из осей X, Y или Z. При этом 1 определяет ось, вдоль которой вектор направлен. Так, векторное значение [1, 0, 0] направляет вектор вдоль оси X.

В более сложном вектором выражении, как, например, [0.266917, 0.534798, 0.801715], вектор направлен из воображаемого центра сферы к точке поверхности, определяемой данным выражением типа Point3. Объект будет вращаться вокруг данного вектора на количество градусов, определяемых угловым значением кватерниона. В приведенных выше примерах это угловое значение равно 30.

Как правило, используются векторы, направленные вдоль оси X, Y или Z. А для того чтобы использовать векторы, имеющие другое направление, нужно знать, как их строить.

Векторные значения

Векторные значения кватернионов следует рассчитывать очень аккуратно. Квадратный корень из суммы квадратов всех составляющих должен быть равен 1. Так, из приведенного выше примера кватерниона quat 30 [0.266917, 0.534798, 0.801715] можно установить, что

квадратный корень из суммы (0.266917)2 + (0.534798)2 + (0.801715)2 = 1

Это ограничение объясняется тем, что длина вектора должна быть всегда равна 1. Следовательно, длина вектора всегда равна квадратному корню из суммы x2 + y2 + z2.

Правильное определение векторных значений кватерниона — занятие долгое и утомительное. Поэтому для упрощения расчетов применяется метод normalize.

rot_vect = normalize [10, 14, 5]
q = quat 90 rot_vect

Предопределенные значения углов вращения

В MAXScript имеется ряд предопределенных глобальных переменных. К ним относятся три следующие переменные: x_axis, y_axis и z_axis. Они представляют значения типа Point3, обозначающие вращение вокруг соответствующих осей:

x_axis представляет[1, 0, 0]
y_axis представляет[0, 1, 0]
z_axis представляет[0, 0, 1]

В любом выражении, описывающем вращение, выражение типа Point3 можно заменить соответствующей переменной. Зная это, данное выражение можно использовать для составления следующего выражения:

q = quat 45 x_axis

Аналогично методу eulerAngles, объект кватернионного вращения может быть присвоен любому вращаемому объекту.

b = box()
q = quat 45 x_axis
rotate b q

Выражения в качестве аргументов

Нередко оказывается удобнее сократить два или более оператора сценария до одного. В MAXScript это нетрудно сделать при вызове функций. Во всех приведенных выше примерах переменные или явно указываемые числовые значения были приведены в качестве аргументов. Но в этом качестве можно использовать и выражения. Выражение представляет собой конструкцию для вычисления значения. Так, если в приемнике команд ввести quat 20 x_axis и нажать клавишу , в ответ появится сообщение об успешном выполнении команды.

Во веденном выше выражении было вычислено значение, хотя оно и не было присвоено переменной. В данном случае создается кватернионный объект, а вычисленное значение хранится во внутренней переменной MAXScript, которая недоступна для пользователя. Оба приведенных ниже сценария выполняют одно и то же действие.

В первом сценарии сначала создается кватернионный объект, а затем параллелепипед, который далее поворачивается на следующую величину:

rot = quat 30 y_axis
b = box rotation:rot

А во втором сценарии то же самое делается с помощью выражения в конструкторе:

b = box rotation:(quat 30 y_axis)

В выражении quat 30 y_axis вычисляется кватернион, поэтому его можно ввести вместо аргумента функции. Данное выражение сначала вычисляется внутри 3ds Max, а затем его значение присваивается свойству вращения. Такое выражение следует указывать в круглых скобках, чтобы 3ds Max было проще распознать его начало и конец. Где и как часто следует использовать подобные выражения, зависит от ваших целей и стиля программирования.

Кватернионы имеют свои ограничения. В частности, углы можно указывать только в пределах от -180° до 180°. Если же требуется повернуть объект на угол, который превышает данный 360-градусный диапазон, придется воспользоваться методом AngleAxis.

 

Архив статей

 июл   Август 2019   сен

ВПВСЧПС
   1  2  3
  4  5  6  7  8  910
11121314151617
18192021222324
25262728293031
Julianna Walker Willis Technology

Случайная новость

Для того, что бы отображаемая во вьюпорте текстура была более высокого качества необходимо увеличить разрешение отображаемых во вьюпорте текстур. Делается это следующим образом: выбираем меню Customize -> Preferences… В открывшемся окне выбираем закладку под названием Viewports. Там в разделе Display Drivers нажимаем на кнопку Configure Driver. В появившемся окне в разделе Download Texture Size выбираем максимально возможный вариант (по умолчанию стоит 256). Если же и этого качества нехватает его можно еще увеличить следующим образом: В папке МАКСа найдите файл под названием oglgfx.ini (если в качестве используемого драйвера у вас включен OpenGl), либо d3dgfx.ini (если вы используете Direct3D), либо d3d81gfx.ini (если вы используете Direct3D с DirectX 8.1). В этом файле найдите строчку “TexSize=…” после равно впишите 1024 или 2048. Только не забывайте, что чем больше размер отображаемой текстуры, тем больше вьюпорты будут тормозить.

29) Вот что у меня получилось, правда тут и невидно что всё точно : (Рис.18)

30) Да, размеры на чертеже это очень хорошо, но если их нету? Хороший вопрос... Я делаю так: настраиваю Плэйн с материалом в виде с боку... проверяю на точность по колёсам... Настроил... теперь мне известна высота... Начинаю настраивать вид спереди... Высоту мы знаем, а как быть с шириной? Ищем какие то зацепки, возможно это значок круглый... BMW или Opel... строим по ним круг... подгоняем по ширине... Если значка нет спереди, возможно он есть сзади : ну а если вообще незачего зацепится, то на глаз... и по фотографиям.... если настроите вид спереди, то с видом сверху проблем уже точно не будет.

Ну вот и всё. Всем спасибо за внимание. Надеюсь вы что нибудь узнали новое. Если возникнут вопросы, пишите мне на e-mail, или на форуме в личные собщения.

далее