Maxscript - спрости собі життя, або одкровення - чайника - уроки по 3d max - уроки - все для дизайну
MAXScript - спрости собі життя, або одкровення "чайника"
Взагалі 3D Studio Max моторошно "гнучка" штука, і, судячи з усього, творці приділяють велику частину уваги цієї гнучкості, а не зручностей користувача. Ні, я ні в якій мірі не хочу зачепити почуття тих, хто вже давно моделює на 3D Studio Max. просто я "чайник" і це мої відчуття :) Але, так чи інакше, в гнучкою 3D студії, є гнучкий скриптова мова, MAX Script. де за допомогою команд ви зможете створювати об'єкти, керувати ними і взагалі робити все, що може робити 3D студія.
Так, для початку попереджаю всіх - я роблю це в перший раз, тому можу помилятися :) Для повного відчуття крутості зробимо всього цього інтерфейсік. Я поки знайшов два способи виготовлення інтерфейсу, перший: вручну, а другий спосіб - це за допомогою приблуди візуального моделювання під назвою "Visual MAX Script", яку можна знайти в розділі "Програми" (молоток), натиснувши кнопку More. там в списку він у мене останній.

Але перед тим як починати створювати інтерфейс, я розповім Вам трохи програмуванні на MAX Script. Правда, я сам мало що знаю про це, хе хе хе.
Взагалі, щоб створити скрипт. на панелі утиліт є кнопка MAX Script. який відкриє вкладку з утилітами для створення скриптів.

Для приколу давайте створимо новий скрипт. і спробуємо щось зробити, а точніше, напишемо такий код:
for i = 1 to 10 do (
x = random 1 100.0
y = random 1 100.0
z = random 1 100.0
Sphere radius: 20 smooth: on segs: 32 chop: 0 slice: off sliceFrom: 0 sliceTo: 0 mapCoords: off recenter: off pos: [x, y, z] isSelected: on
)
Тепер збережіть скрипт і запустіть його ... Н у як, все вийшло? Хе хе, ось і ваш перший скрипт. який малює кульки з радіусом 20 по випадкових координатами від 0 до 100, по всіх осях. Багато хто скаже. "І в чому тут прикол, таке і мишкою можна швидко зробити ...". Для таких любителів напишемо наш код по - іншому.
for i = 1 to 300 do (
x = sin (i * 3 * 2.6) * 100
y = cos (i * 3 * 2.2) * 100
z = cos (i * 3 * 1.2) * 100
Sphere radius: 5 smooth: on segs: 8 chop: 0 slice: off sliceFrom: 0 sliceTo: 0 mapCoords: off recenter: off pos: [x, y, z] isSelected: on
)

Ну як, слабо Вам сплести таку закарлюку вручну. Якщо немає, то починайте.
А я поки повернуся до теми інтерфейсу - здається, саме про це я говорив вище :) Давайте подумаємо - в останньому прикладі, щоб отримати різні закарлюки потрібно поміняти пару значень, та й перемалювати все нафіг. Звичайно, можна поміняти значення прямо в скрипті. але це нудно, а я говорив про красу і понти :)
Ну дик ось, є в MAX Script можливість створювати всякі кнопочки, віконечка та інші заморочки. Робиться це приблизно так.
rollout unnamedRollout "Ролаут :)" width: 162 height: 130
(
button btn1 "Кнопка" pos: [24,88] width: 120 height: 32
editText Привіт "Хелло" pos: [5,10] width: 148 height: 22
checkButton ckb1 "CheckButton" pos: [24,48] width: 120 height: 32
on unnamedRollout open do
x = 10
on btn1 pressed do
x = 12
)
createDialog unnamedRollout width: 162 height: 130

Запустіть цей скрипт. і побачите що вийде. Спробую коротко описати що тут і як.
unnamedRollout - це "розворот" (поле), на якому знаходяться різні кнопочки віконечка та інше (компоненти).
Button - кнопка.
EditText - віконце з текстом який можна водити
checkButton - кнопка яка може бути затиснути або відпущена.
Кожна компонента має свої властивості і події.
on btn1 pressed do - якщо кнопка натиснута, то x = 12
x = 12
Спочатку у нас порожній роллаут. на який нам потрібно перетягнути потрібні нам компоненти. Компоненти розташовані на панелі компонентів.
Там є такі штучки.
Піду по порядку, картинки видирати не буду, лінь :)
Стрілка - Дозволяє змінювати розмір компонентів
Bitmap - Картинка. Можна намалювати свою або завантажити текстурки.
Button - Просто кнопка, на яку можна натискати, також можна завантажити картинку або написати напис ...
MapButton - Кнопка вибору карти текстури
MaterialButton - Кнопка вибору матеріалу.
PickButton - Кнопка вибору чогось зі сцени.
CheckButton - Кнопка з двома положеннями, затиснута чи ні.
ColorPiker - Вибір кольору.
ComboBox - Вибір пункту призначення із.
DropDownList - Список, що випадає вниз.
ListBox - Ще один вид списку у вигляді лістингу.
Label - Мітка для створення написів на формі.
GroupBox - Панель для групи компонентів.
CheckBox - Галочки
RadioButtons - Точки-перемикачі, можна вибрати тільки одну
Spiner - контроль над значенням обраного параметра за допомогою керуючих стрілок.
ProgressBar - індикатор у вигляді смужки
Slider - бігунок яким можна щось вибрати
Timer - таймер
Ole - Ole контейнер
User - щось створене користувачем ...
Гаразд, давайте щось зробимо.
Давайте допрацьовувати наші кульки, на порожній роллаут виносимо наступні компоненти - 3 штуки типу Spiner і одну кнопку Button. Тепер, якщо ми виділимо Edit Text. то в правій частині екрана з'являться його властивості, в полі Caption для першого Spiner ми напишемо "Коф X", для другого "Коф Y" і для третього "Коф Z". А для кнопки в полі Caption введемо "Створити".
Так чи інакше, у вас повинно було статися щось на кшталт такого:

Вийшло? Молодця, тепер йдемо на закладку Event Handlers. виділяємо нашу кнопку "Створити" і в списку з'явилися подій вибираємо Pressed. а в що з'явилося віконце вводимо код події.
for i = 1 to 300 do (
x = sin (i * 3 * spn2.value) * 100
y = cos (i * 3 * spn3.value) * 100
z = cos (i * 3 * spn4.value) * 100
Sphere radius: 5 smooth: on segs: 8 chop: 0 slice: off sliceFrom: 0 sliceTo: 0 mapCoords: off recenter: off pos: [x, y, z] isSelected: on
)

Дізналися наш код, все той же, але з маленькими змінами. Формула розрахунку шляху по x. y. z містить множник spn2.value, spn3.value і spn4.value. Це значення, що зберігаються в наших Spinner'ах. У кожного елемента в наше формі є назва, воно дається програмою автоматично, але ви вільно можете змінити його на інше. Для цього просто потрібно змінити поле name в закладці Value. це там де ми вводили caption.
У кожного компонента є властивості, до яких ми можемо звертатися по імені компонента через точку. Наприклад, значення компонента Spinner зберігається в полі Value. ну ми і говоримо скрипту. множ на spn2.value, і т.п.
Гаразд, натискаємо Ok. В теорії наш RollOut готовий. Зберігаємо його на диску з назвою test.vms. а потім зберігаємо його як test.ms. Двічі Зберігаємося тому, що Visual MAX Script не зможе відкрити файл формату ms. і ми не зможемо більше щось змінити у формі. Тепер закриваємо Visual MAX Script і відкриваємо наш скрипт для доведення в 3D Studio Max.
У нас вийшло щось на зразок:
rollout unnamedRollout "Untitled" width: 160 height: 128
(
button btn8 "Створити" pos: [32,96] width: 104 height: 24
spinner spn2 "Коф X" pos: [24,16] width: 128 height: 16
spinner spn3 "Коф Y" pos: [24,40] width: 128 height: 16
spinner spn4 "Коф Z" pos: [24,64] width: 128 height: 16
on btn8 pressed do
(
for i = 1 to 300 do (
x = sin (i * 3 * spn2.value) * 100
y = cos (i * 3 * spn3.value) * 100
z = cos (i * 3 * spn4.value) * 100
Sphere radius: 5 smooth: on segs: 8 chop: 0 slice: off sliceFrom: 0 sliceTo: 0 mapCoords: off recenter: off pos: [x, y, z] isSelected: on
)
)
)
Якщо ми зараз запустимо скрипт. то нічого не станеться, так як ми зробили тільки опис ролаута. Потрібно додати ще один рядок, щоб сказати Максу, як використовувати цей скрипт.
І ось цей рядок:
createDialog unnamedRollout width: 160 height: 128
яка говорить Максим, що потрібно створити діалог, розміром 160 на 128 з нашим ролаутом.
Також потрібно трохи довести наші Spinner'и. вказавши параметр Range [0,100,2.6] для spn2,
Range [0,100,2.2] для spn3 і Range [0,100,1.2] для spn4.
Зробити це потрібно так.
spinner spn2 "Коф X" pos: [24,16] width: 128 height: 16 range: [0,100,2.6]
spinner spn3 "Коф Y" pos: [24,40] width: 128 height: 16 range: [0,100,2.2]
spinner spn4 "Коф Z" pos: [24,64] width: 128 height: 16 range: [0,100,1.2]
де:
перше значення - мінімальне, що можна ввести
друге значення - максимальне, що можна ввести
третє значення - це значення за замовчуванням, яке буде встановлено спочатку.
Тепер зберігаємо наш скрипт. і запускаємо його.
Ура. Працює. У мене, принаймні, працює. Тепер передаємо привіт нашим творцям, яким я раніше запропонував намалювати кульки вручну, вони напевно ще длубаються. Для тренування можна спробувати самим модифікувати скрипт. зробити можливість управління кількістю кульок, кількістю граней і т.п.
Уф, втомився, добре, на перший раз вистачить :) Ах так, тут настромив ще одну штучку, для того щоб створювати ролаути. Коли ми відкриваємо новий скрипт. то в меню EDIT є пункт Edit Rollout і New Rollout. скориставшись цим пунктом у нас відкривається Visual MAX Script. а текст скрипта зберігається прямо в текст скрипта. Забавна штука, навіть працює ... хе хе хе ...