Скрипты для GTA от dim1988 aka d88

Главная | Регистрация | Вход

Приветствую Вас Гость | RSS
[Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Скрипты » Всё о клео скриптах » Вопросы по созданию скриптов
Вопросы по созданию скриптов
dim1988 Дата: Воскресенье, 19.07.2009, 18:43 | Сообщение # 1
Создатель
Группа: Администраторы
Сообщений: 2242
Статус: Offline
Ответы на самые часто задаваемые вопросы

Как сохранить (компилировать) скрипт?
Почему не следует использовать в клео скриптах глобальные переменные?
Как узнать координаты мест, через какую прогу?
Как поместить игрока в интерьер?
Опкод, который открывает все дома в СА
Запись в переменную ближайшего педа и проверка его модели
Как заставить актёров ходить по определённым координатам
Проверка нажатия определённой клавиши
Пак пути с анимацией
Как сделать так, чтоб 2 миссии следовали друг за другом?
Как актёру дать оружие?
Как создать транспорт
Как создать жёлтый маркер для входа в интерьер?
При компиляции выдаёт ошибку перехода на нулевой оффсет,что это и как исправить?
Как транспорту присвоить определённый цвет?
Что делать если пишет ожидалось 'x' параметров?
Как написать цветной текст?
Номера костей актёра
Что такое gosub?
Опкоды, связанные с созданием огня
Как изменить оружие банд?
Образец добавления в игру объектов
Проверка нажатия клавиши в игре и список значений
Путь или scmpath
Как изменить цвет затемнения экрана?
Как записать в переменную случайное число из интервала
Список стилей боя
Как привязать эффект к кости актёра?
Как произвести действия, над педами, созданными игрой
Как заменить модель игрока
Как заставить актёра поднять руки, как при аресте
Сброс анимации
Как метнуть объект?
Как из одного скрипта запустить другой?

+ файл от пользователя нашего сайта Absolute . Здесь перечислены все вопросы из этой этой темы и ответы на них. Скачать
 
 
Scripter100 Дата: Среда, 28.03.2012, 21:36 | Сообщение # 3001
Группа: Проверенные
Сообщений: 108
Замечания: 0%
Статус: Offline
Привет всем, у меня тут проблема небольшая, хочу сделать чтобы военные спускались по верёвке с вертолёта, создал верт и верёвку, а они не спускаются а падают с верёвке, может надо какую-то анимацию к ним применить?

 
 
SUPMAN Дата: Четверг, 29.03.2012, 09:53 | Сообщение # 3002
Группа: Пользователи
Сообщений: 8
Замечания: 0%
Статус: Offline
а как пользоваться этим опкодом?

учусь скриптингу
 
 
Vadik7 Дата: Четверг, 29.03.2012, 17:14 | Сообщение # 3003
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline
Quote (SUPMAN)
Вот создал я чела и он если в него стреляет кто нибудь но не CJ вобще никак не отвечает. Мне нужно что бы он в ответ стрелял

Это тоже можно реализовать, работая с моделью поведения актера(Decision Maker). В моём скрипте это выглядит так:
060A: create_decision_maker_type 3 store_to 8@
0708: reset_decision_maker 8@ event 9
0709: set_decision_maker 8@ on_event 9 taskID 1000 unknown 100.0 100.0 chance 100.0 unknown 100.0 0 1
060B: set_actor 1@ decision_maker_to 8@
И удаляем сведения о модели поведения вот такой строкой: 065C: release_decision_maker 8@
Конечно, тебе нужно поставить свои локальные переменные, в которые ты запишешь своего актера и модель поведения, у меня это - 1@ и 8@

Добавлено (29.03.2012, 17:06)
---------------------------------------------

Quote (wmysterio)
060A: create_decision_maker_type 3 store_to 13@
060B: set_actor 2@ decision_maker_to 13@

Как мне известно этот опкод задаёт модель поведения пед'а.
Но при попытке атаки, актёр всё равно приседает или поднимает руки. Как сделать, что бы актёр был бесстрашным?

wmysterio, этот опкод хоть и задает модель поведения, но совсем бесстрашным он актера не делает. Как я понял, нужно задавать самому реакцию актера на определённые события. Я вот что сделал:
060A: create_decision_maker_type 3 store_to 8@
0708: reset_decision_maker 8@ event 9 // тут сбрасываем стоковую реакцию актера на событие.
0708: reset_decision_maker 8@ event 31
0709: set_decision_maker 8@ on_event 9 taskID 1000 unknown 100.0 100.0 chance 100.0 unknown 100.0 0 1 // если актер поврежден другим педом, то он убьет его.
0709: set_decision_maker 8@ on_event 31 taskID 257 unknown 100.0 100.0 chance 100.0 unknown 100.0 0 1 // если на актёра нацелились, то ему, впринципе, всё равно=)
060B: set_actor 1@ decision_maker_to 8@

И можно удалить сведения о модели поведения таким опкодом: 065C: release_decision_maker 8@ smile

Добавлено (29.03.2012, 17:14)
---------------------------------------------

Quote (SUPMAN)
а как пользоваться этим опкодом?

SUPMAN, со схемой работы с Decision Maker я, например, ознакомился здесь: http://gtamodding.ru/wiki/Decision_Maker
А так же Den_spb дал ссылку на 100-ой странице форума biggrin Мне это очень помогло!


Пытаюсь научиться скриптингу)
 
 
wmysterio Дата: Четверг, 29.03.2012, 17:14 | Сообщение # 3004
Группа: Проверенные
Сообщений: 51
Замечания: 0%
Статус: Offline
Vadik7, спс, работает отлично!
 
 
dim1988 Дата: Четверг, 29.03.2012, 19:28 | Сообщение # 3005
Создатель
Группа: Администраторы
Сообщений: 2242
Статус: Offline
Quote (Scripter100)
Привет всем, у меня тут проблема небольшая, хочу сделать чтобы военные спускались по верёвке с вертолёта, создал верт и верёвку, а они не спускаются а падают с верёвке, может надо какую-то анимацию к ним применить?

Я видел код, не пробовал работать с ним. Попробуй поискать в мэйне, как там делается.


Mortal Kombat Conquest for GTA SA V2.0
GTA Invasion V2.0
Частная собственность
 
 
Mehaniq Дата: Четверг, 29.03.2012, 20:22 | Сообщение # 3006
Группа: Проверенные
Сообщений: 28
Замечания: 0%
Статус: Offline
Подскажите, есть ли возможность привязать к транспорту обьект который создан игроком во время игры? например как взрывпакет..( ты его кидаешь на машину и он двигаеться вместе с машиной)

Пеку пироги
 
 
Den_spb Дата: Пятница, 30.03.2012, 01:11 | Сообщение # 3007
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline
SUPMAN, параметры опкода - координаты двух диаметрально противоположных углов куба, внутри которого надо отключить создание педов.
Mehaniq, 0681: attach_object 71@ to_car 60@ with_offset 0.5 0.3 0.3 rotation 0.0 0.0 0.0
 
 
SUPMAN Дата: Пятница, 30.03.2012, 10:27 | Сообщение # 3008
Группа: Пользователи
Сообщений: 8
Замечания: 0%
Статус: Offline
Vadik7 погоди а откуда узнать к каким цифрам какие действия принадлежат

Добавлено (30.03.2012, 10:27)
---------------------------------------------
Den_spb пасиба понял smile


учусь скриптингу
 
 
MarryJane Дата: Пятница, 30.03.2012, 14:35 | Сообщение # 3009
Группа: Пользователи
Сообщений: 1
Замечания: 0%
Статус: Offline
Всем привет! Мне нужна помощь. К примеру у меня есть скрипт

Code

:HOTKEY
if  
0AB0:  key_pressed 110
jf @HOTKEY
jump @SCTIPT

:SCRIPT
// Тут код
jump @SCRIPT_2

:SCRIPT_2
// Тут код
jump @HKEY_CHECK

:HKEY_CHECK
if
0AB0:  key_pressed 111
jump @HOTKEY


Скажите, как сделать так, чтобы когда я нажму кнопку скрипт мгновенно прекращал свою работу, и после этого я мог запустить его опять. Сколько ни пытался - ничего не получается.
P.S. потоков (SCRIPT_x) может быть ОЧЕНЬ много.
 
 
Mehaniq Дата: Пятница, 30.03.2012, 14:49 | Сообщение # 3010
Группа: Проверенные
Сообщений: 28
Замечания: 0%
Статус: Offline
Я в таких случаях вручную при нажатии кнопки прекращаю все действия, выгружаю модели, анимации, эффекты и т.д. могу навести пример

Пеку пироги
 
 
Vadik7 Дата: Пятница, 30.03.2012, 17:04 | Сообщение # 3011
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline
Quote (SUPMAN)
Vadik7 погоди а откуда узнать к каким цифрам какие действия принадлежат

SUPMAN, список событий актеров (ped events) я нашел тут: http://gtamodding.ru/wiki/Ped_Events
а список задач, т.е. реакций(TaskID) на события, тут: http://www.gtamodding.com/index.php?title=Task_IDs_%28GTA_SA%29
Хоть события описаны на английском, думаю разобраться можно smile

Добавлено (30.03.2012, 17:04)
---------------------------------------------
Quote (MarryJane)
Скажите, как сделать так, чтобы когда я нажму кнопку скрипт мгновенно прекращал свою работу, и после этого я мог запустить его опять. Сколько ни пытался - ничего не получается.
P.S. потоков (SCRIPT_x) может быть ОЧЕНЬ много.

MarryJane, я считаю, что можно вот так:

:HOTKEY
wait 0
if
0AB0: key_pressed 110
jf @HOTKEY
wait 0
jump @SCRIPT

:HKEY_CHECK
wait 0
if
8AB0: not key_pressed 111
jf @HOTKEY
wait 0
return

:SCRIPT
wait 0
gosub @HKEY_CHECK
// code
wait 0
jump @SCRIPT_2

:SCRIPT_2
wait 0
gosub @HKEY_CHECK
// code
wait 0
jump @NEXT_LABEL // тут переходим на следующий лейбл, если есть необходимость и таковой имеется.

Немного объясню о чём идет речь. Первый лейбл,(HOTKEY), как и прежде, разрешает развитие скрипту, только в случае, если нажата клавиша 110. Если она все же нажата, то скрипт переходит к выполнению лейбла SCRIPT, который в свою очередь выполнится лишь тогда, когда выполнится лейбл HKEY_CHECK. К лейблу HKEY_CHECK мы приходи посредством gosub. Если условие HKEY_Check не выполняется и клавиша 111 нажата, то выполнение скрипта прекращается и переходит к лейблу HOTKEY. Только это не значит, что пропадут все модели и всё такое... Просто скрипт прекратит свою работу, пока снова не нажмёте key 110. Если же условие выполняется, то затем и лейбл SCRIPT выполняется, после него SCRIPT_2, если также пройдет проверка HKEY_CHECK. И так далее с любым кол-вом лейблов smile


Пытаюсь научиться скриптингу)

Сообщение отредактировал Vadik7 - Пятница, 30.03.2012, 17:05
 
 
SUPMAN Дата: Пятница, 30.03.2012, 19:28 | Сообщение # 3012
Группа: Пользователи
Сообщений: 8
Замечания: 0%
Статус: Offline
Vadik7 спасибо большое! biggrin

Добавлено (30.03.2012, 19:28)
---------------------------------------------
Помогите плиз! Вроде все верно, но не работает

{$CLEO}

:metka
wait 0
if
model.Load(#FAM3)
model.Load(#COLT45)
038B: load_requested_models

:metka_2
wait 0
if
model.Available(#FAM3)
model.Available(#COLT45)
jf @metka_2

actor.Create($ACT,4,#FAM3,2529.1667, -1658.589, 20.3471)
01B2: give_actor $ACT weapon 22 ammo 100
060A: create_decision_maker_type 3 store_to 3@
060B: set_actor $ACT decision_maker_to 3@
0709: set_decision_maker 3@ on_event 53 taskID 1000 chance_if_acquaintance respect 0.0 hate 100.0 unk 0.0 unk 0.0 in_car 0 on_foot 1
end_thread


учусь скриптингу
 
 
wmysterio Дата: Пятница, 30.03.2012, 19:56 | Сообщение # 3013
Группа: Проверенные
Сообщений: 51
Замечания: 0%
Статус: Offline
SUPMAN,
Code
{$CLEO}

:metka
wait 0
model.Load(#FAM3)
model.Load(#COLT45)
038B: load_requested_models

:metka_2
wait 0
if and
model.Available(#FAM3)
model.Available(#COLT45)
jf @metka_2
actor.Create($ACT,4,#FAM3,2529.1667, -1658.589, 20.3471)
01B2: give_actor $ACT weapon 22 ammo 100
060A: create_decision_maker_type 3 store_to 3@
0708: reset_decision_maker 8@ event 53     
0709: set_decision_maker 3@ on_event 53 taskID 1000 chance_if_acquaintance respect 100.0 hate 100.0 unk 0.0 unk 0.0 in_car 0 on_foot 1
060B: set_actor $ACT decision_maker_to 3@
0A93: end_custom_thread

------------------------
пытаюсь вывести строку на экран:
Code
5@v = "VINCENT"
0ACF: show_formatted_styled_text 5@v time 2 style 4
Но текст отображается не полностью
------------------------
1@ = 1470
6@ = 2000
Code
0AD1: show_formatted_text_highpriority "~w~Reputation~g~ %06x ~w~/ ~r~%06x" time 1 1@ 6@

Цифры выводятся на экран в шеснадцатиричном виде. Можно как сделать, что бы выводились в десятичном?


Сообщение отредактировал wmysterio - Пятница, 30.03.2012, 20:22
 
 
Mehaniq Дата: Суббота, 31.03.2012, 14:46 | Сообщение # 3014
Группа: Проверенные
Сообщений: 28
Замечания: 0%
Статус: Offline
Вы не так поняли. мне надо привязать обьект к авто чтоб оффсет был не от центра авто а от центра игрока. например обьект создаёться перед игроком, а потом привязуеться к авто сохраняя старые координаты. ПРИМЕР: когда кидаешь взрывпакет на авто то он цепляеться к машине там куда кидает игрок а не с оффсетом от центра машины. а когда машина едет, пакет двигаеться с ней. мне нужен принцип взрывпакета. если кто знает напишите
Извините, не знаю как точно обьяснить чего я хочу добиться(

Добавлено (31.03.2012, 14:46)
---------------------------------------------
или скажите есть ли возможность записать в оффсет расстояние между уже созданным обьектом и авто к которому он будет привязан


Пеку пироги
 
 
Den_spb Дата: Суббота, 31.03.2012, 18:48 | Сообщение # 3015
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline
Пересчитать координаты из одной системы в другую (мировая система координат -> система координат машины) можно путём определённых вычислений.
Проще воспользоваться новым опкодом 0D10 от DK22Pac: http://modsforgta.ucoz.ru/forum/12-62-1
 
 
Mehaniq Дата: Суббота, 31.03.2012, 23:50 | Сообщение # 3016
Группа: Проверенные
Сообщений: 28
Замечания: 0%
Статус: Offline
Спасибо. это то что надо. только что такое матрица? в переменную матрицы можно записать обьект?

Пеку пироги
 
 
Den_spb Дата: Воскресенье, 01.04.2012, 04:27 | Сообщение # 3017
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline
Посмотрел внимательнее - 0D10 не подойдёт, т.к. пересчитывает оффсеты в мировые координаты (аналогично стандартным опкодам "store coords with offsets"). Нужный опкод (с противоположным действием) появится в следующей версии библиотеки, а пока можно применить другой способ, правда более сложный.

Код, переводящий мировые координаты в оффсеты относительно транспорта 29@:
Code
// В 0@ 1@ 2@ записать мировые координаты

car.storepos(29@ 7@ 8@ 9@)
0063: 0@ -= 7@ // (float)  
0063: 1@ -= 8@ // (float)  
0063: 2@ -= 9@ // (float)  
      
0A97: 3@ = car 29@ struct
3@ += 0x14
0A8D: 3@ = read_memory 3@ size 4 virtual_protect 0
0AC7: 4@ = var 0@ offset
0AC7: 6@ = var 7@ offset
0AC6: 5@ = label @inverse_matrix offset
          
0AA5: call 0x7F2070 num_params 2 pop 2 3@ 5@
0AA5: call 0x59C790 num_params 3 pop 3 4@ 5@ 6@

// В переменные 7@ 8@ 9@ запишутся оффсеты относительно транспорта 29@

....

:inverse_matrix // Этот кусок разместить в самом конце скрипта, чтобы на него не могло перейти исполнение кода
hex
     00 00 00 00     00 00 00 00     00 00 00 00     00 00 00 00
     00 00 00 00     00 00 00 00     00 00 00 00     00 00 00 00
     00 00 00 00     00 00 00 00     00 00 00 00     00 00 00 00
     00 00 00 00     00 00 00 00     00 00 00 00     00 00 00 00
end

Номера переменных можно заменить на свои, но координаты во всех случаях должны быть записаны в 3 последовательные переменные (например, 0@ 1@ 2@, 7@ 8@ 9@, 20@ 21@ 22@ и т.д.)

А матрица - это просто таблица с числами. В игре матрицы обычно используются для хранения координат векторов, т.е. описывают позицию и углы поворота оъекта.
 
 
Mehaniq Дата: Понедельник, 02.04.2012, 00:25 | Сообщение # 3018
Группа: Проверенные
Сообщений: 28
Замечания: 0%
Статус: Offline
0ас7 0ас6
где мне взять патч на работу этих опкодов?

Добавлено (02.04.2012, 00:25)
---------------------------------------------
0ас7 0ас6
где мне взять патч на работу этих опкодов?


Пеку пироги
 
 
Den_spb Дата: Понедельник, 02.04.2012, 00:29 | Сообщение # 3019
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline
Это стандартные опкоды КЛЕО4. Если Sanny Builder их не распознаёт, то надо переустановить КЛЕО4. В окне инсталлятора должна быть включена галка "Sanny Builder data files" (что-то вроде этого).
 
 
Mehaniq Дата: Понедельник, 02.04.2012, 02:58 | Сообщение # 3020
Группа: Проверенные
Сообщений: 28
Замечания: 0%
Статус: Offline
спасибо. когда испытаю - дам знать о результате

Пеку пироги
 
 
wmysterio Дата: Понедельник, 02.04.2012, 13:38 | Сообщение # 3021
Группа: Проверенные
Сообщений: 51
Замечания: 0%
Статус: Offline
всем хай. Меня всегда интересовало, что за типы автомобилей:
Code
08EC: 2@ = car $CAR type
Какие есть типы авто? smile
 
 
Mehaniq Дата: Понедельник, 02.04.2012, 16:15 | Сообщение # 3022
Группа: Проверенные
Сообщений: 28
Замечания: 0%
Статус: Offline
типы
normal=0 poorfamily=1 richfamily=2 executive=3 worker=4 big=5 taxi=6 moped=7 motorbike=8 leisureboat=9 workerboat=10 bicycle=11 ignore=-1 Английский шаришь или перевести?


Пеку пироги
 
 
wmysterio Дата: Понедельник, 02.04.2012, 16:43 | Сообщение # 3023
Группа: Проверенные
Сообщений: 51
Замечания: 0%
Статус: Offline
Mehaniq, английского не знаю biggrin переводить не надо. Всё что просил ты предоставил smile СПС!

Сообщение отредактировал wmysterio - Понедельник, 02.04.2012, 16:48
 
 
Mehaniq Дата: Вторник, 03.04.2012, 02:22 | Сообщение # 3024
Группа: Проверенные
Сообщений: 28
Замечания: 0%
Статус: Offline
Den_spb, Вот я уже достиг чего хотел. итоговый опкод 0681: attach_object 11@ to car 25@ with offset 7@ 8@ 9@ rotation 0.0 0.0 0.0
Теперь главный вопрос.. как определить постоянное число на оси оборота z? (х и у мне не нужны) я что только не пробовал... и angle актера записывать в z, и angle первоначального обьекта еще до привязки к авто... когда играю обьект привязывает случайное число (0, 90, 180, 270) не знаю, может это делаеться таким же сложным методом как ты мне расписал недавно(((
зато я рад что основную часть благодаря тебе выполнил


Пеку пироги
 
 
Den_spb Дата: Вторник, 03.04.2012, 13:38 | Сообщение # 3025
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline
Углы в 0681, как и координаты, указываются локальные (т.е. они отсчитываются в системе координат машины).
Если Х и Y углами можно пренебречь (машина не перевёрнута и не стоит на очень крутой горке), то локальный Z угол объекта можно определить как разницу между мировым Z углом объекта и мировым Z углом машины.

Ну а если надо пересчитать все 3 угла, то это делается сложнее, пример есть тут: http://modsforgta.ucoz.ru/forum/5-24-3091-16-1327680876
Прикрепления: 7640348.jpg (16.1 Kb)


Сообщение отредактировал Den_spb - Вторник, 03.04.2012, 13:42
 
 
Mehaniq Дата: Среда, 04.04.2012, 00:18 | Сообщение # 3026
Группа: Проверенные
Сообщений: 28
Замечания: 0%
Статус: Offline
Ой чую сегодня ночью мне спать не прийдеться) ахахаха. Если будет результат то обязательно его покажу

Добавлено (03.04.2012, 21:31)
---------------------------------------------
Ой чую сегодня ночью мне спать не прийдеться) ахахаха. Если будет результат то обязательно его покажу

Добавлено (04.04.2012, 00:18)
---------------------------------------------
Всё! всё удалось точно как я хотел! Спасибо тебе огромное, с меня подарочек вконтакте если дашь ссылку на свою страницу.


Пеку пироги
 
 
Vadik7 Дата: Среда, 04.04.2012, 21:40 | Сообщение # 3027
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline
Ого, парни - смотрю углубились в геометрию smile
Quote (Den_spb)
Углы в 0681, как и координаты, указываются локальные (т.е. они отсчитываются в системе координат машины).
Если Х и Y углами можно пренебречь (машина не перевёрнута и не стоит на очень крутой горке), то локальный Z угол объекта можно определить как разницу между мировым Z углом объекта и мировым Z углом машины.

Den_spb, поражают твои познания, дружище smile Картинку прикольную нарисовал. Я что думаю - то, что изображено на рисунке стрелочками - это векторы в трёхмерной системе координат, и над этими векторами могут также быть проведены все операции (сложение, вычитание, умножение и деление и др.) И положение любого объекта в игре в каждый промежуток времени описывается вектором(скорее всего единичным, так как я думаю, что длина его здесь не важна). Зная, как вектор проходит через объект, в теории можно прицепить объект к другому объекту так, как нужно нам. Может, возможно через эту систему работать с мировыми координатами объекта, т.е. координатами векторов, задающих положение объекта в пространстве smile


Пытаюсь научиться скриптингу)
 
 
Den_spb Дата: Четверг, 05.04.2012, 21:02 | Сообщение # 3028
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline
Для представления углов поворота объекта используется не один, а три единичных вектора, жёстко связанных с объектом - Right (X), Top (Y), At (Z). Если все три угла поворота объекта равны нулю, то вектора направлены в те же стороны, куда направлены мировые (глобальные) оси координат, т.е. Right - на восток, Top - на север, Z - в зенит.
Координаты единичных векторов и координаты самого объекта (координаты радиус-вектора объекта) хранятся в матрице (таблице) позиционирования и вращения данного объекта, которая выглядит так:
Code

RightX RightY RightZ 0
TopX   TopY   TopZ   0
AtX     AtY     AtZ      0
PosX   PosY   PosZ    0

Матрицы и вектора, как и обычные числа, можно складывать и перемножать. Это применяется, например, для пересчёта координат из одной системы в другую - о чём шла речь выше.



Сообщение отредактировал Den_spb - Четверг, 05.04.2012, 21:07
 
 
Vadik7 Дата: Четверг, 05.04.2012, 23:28 | Сообщение # 3029
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline
Quote (Den_spb)
Для представления углов поворота объекта используется не один, а три единичных вектора, жёстко связанных с объектом - Right (X), Top (Y), At (Z). Если все три угла поворота объекта равны нулю, то вектора направлены в те же стороны, куда направлены мировые (глобальные) оси координат, т.е. Right - на восток, Top - на север, Z - в зенит.
Координаты единичных векторов и координаты самого объекта (координаты радиус-вектора объекта) хранятся в матрице (таблице) позиционирования и вращения данного объекта, которая выглядит так:
Code

RightX RightY RightZ 0
TopX   TopY   TopZ   0
AtX     AtY     AtZ      0
PosX   PosY   PosZ    0

Матрицы и вектора, как и обычные числа, можно складывать и перемножать. Это применяется, например, для пересчёта координат из одной системы в другую - о чём шла речь выше.

Den_spb, спасибо за объяснения, теперь мне более менее понятно, как задаётся положение объекта в пространстве smile Но, вот как это всё работает в матрице, я что-то не догоняю sad В частности, меня ввело в ступор, что, например в матрице есть столбцы и RightX и RightY и RightZ, хотя ведь единичный вектор Right (X). Так то тригонометрию вроде могу вспомнить, а вот в какую сторону углы отсчитывать точно не понял. По принципу, если ось считать стрелой, и она летит на нас и будет изображена на чертеже как окружность с точкой в центре..?


Пытаюсь научиться скриптингу)
 
 
Den_spb Дата: Пятница, 06.04.2012, 04:11 | Сообщение # 3030
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline
Quote (Vadik7)
В частности, меня ввело в ступор, что, например в матрице есть столбцы и RightX и RightY и RightZ, хотя ведь единичный вектор Right (X).

Любой вектор на плоскости задаётся двумя координатами, а в пространстве - тремя, т.е. RightX, RightY и RightZ - координаты вектора Right.
Координаты могут иметь различные значения (в зависимости от текущего направления вектора), но т.к. длина единичного вектора всегда равна 1.0 (как ты правильно отметил), то должно выполняться условие:
SQRT(RightX^2 + RightY^2 + RightZ^2) = 1.0
SQRT - квадратный корень, ^2 - возведение в квадрат.

Quote (Vadik7)
а вот в какую сторону углы отсчитывать точно не понял. По принципу, если ось считать стрелой, и она летит на нас и будет изображена на чертеже как окружность с точкой в центре..?

Да, совершенно верно. Как отсчитывается угол Z - показано на картинке выше (векторы At машины и объекта, а также мировая ось Z направлены на нас). Другие два угла отсчитываются аналогично.


Сообщение отредактировал Den_spb - Пятница, 06.04.2012, 04:15
 
 
Форум » Скрипты » Всё о клео скриптах » Вопросы по созданию скриптов
Поиск:

Copyright dim1988 aka d88 © 2024
Сайт управляется системой uCoz