You are not logged in.
Pages: 1
Можно ли через CLEO текстурировать поверхности моделей в игре?
Движок каждый раз производит перезапись значений в мировых матрицах компонентов, двигаясь от корневого компонента иерархии к компонентам самого низкого ранга.
При этом для нахождения мировой матрицы компонента-ребёнка перемножаются мировая матрица компонента-родителя и локальная матрица компонента-ребёнка. Локальную матрицу движок перезаписывает только в том случае, если нужно изменить позицию/поворот данного компонента относительно родителя.
Отсутствие эффекта при перезаписи мировых матриц компонентов в скрипте связано с очерёдностью выполнения процессов:
выполнение скриптов -> пересчёт координат -> отрисовка
То есть игровой движок пересчитывает значения в мировых матрицах компонентов после выполнения клео-скриптов, поэтому значения, записанные скриптом будут вновь переписаны. По этой же причине будет отсутствовать эффект и при перезаписи локальных матриц некоторых компонентов (например, нельзя повернуть передние колёса, а также изменить их позицию по оси z. В то же время, например, двери автомобиля можно вращать и перемещать как угодно, т.к. локальные матрицы дверей обновляются не всё время, а только во время их открытия и закрытия).
Если необходимо задать компоненту определённые глобальные координаты, то можно пересчитать глобальные координаты в локальные и записать их в локальную матрицу.
Благодарствую, теперь все понятно)))
Большое спасибо, Den_spb, что помог расставить все на свои места, еще одно не больше уточнение: я могу задавать позицию компонента в +0x30 PosX +0x34 PosY +0x38 PosZ от матрицы позиции компонента в мире (+0x50) или надо все таки просчитывать в локальных координатах т.е. от родителя, и соответственно записывать в матрицу (+0x10). или надо и туда и туда записывать (есс-но в одну глобальные координаты, а в другую локальные посчитанные относительно родителя с нужными сдвигами/ поворотами) чтобы компонент изменил свое положение. а то по идее если меняется глобальная координата то и меняется координата расположения компонента относительно родителя. Еще раз большое спасибо) p.s. проверил запись в матрицу глобального расположения, компонент не изменил свое положение.
Уважаемые сриптеры, у меня несколько вопросов.
0A97: 1@ = car 0@ struct 1@ += 0x650 // правое переднее колесо 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ <> 0 then 1@ += 0x10 // указатель на матрицу 1@ += 48 // X-position. Суммирование в 2 этапа применено для наглядности
.
1)в данном коде матрица по смещению 0x10, это какая матрица? матрица перехода от родителя к дочернему элементу? Если так, то она должна быть 3*3, т.е. 36 байт. а у нас как минимум 60 байт. 2)X-positon - это X в какой системе координат?
в этом коде:
0A97: 1@ = car 0@ struct 1@ += 0x650 //Указатель на адрес правого переднего колеса 0A8D: 9@ = read_memory 1@ size 4 virtual_protect 0 //Адрес колеса if 9@ <> 0 then 0AA7: call_function 0x7F0990 num_params 1 pop 1 9@ 10@ end
3)10@ содержит матрицу, опять же что это за матрица? ну и аналогичный вопрос: 4)что за X координата по смещению 48 от начала матрицы, в смысле в какой системе координат?
Во-первых, на CLEO такие вещи нелогично делать, и очень сложно (а значит - и не нужно).
Во-вторых, даже если и делать на CLEO, то делать "инжектом" ("хук"ом, - подставлением своего кода из скрипта в стандартные функции или написание своих функций в скрипте), а для этого надо знать язык ассемблера.
Вообще, если у вас в скрипте часть ассемблерных вставок перевалила за половину всего обьёма скрипта, - надо уже делать плагины
В пример приведу CLEO, Ryosuke, ну и ImVehLM/Ft (если о таком вообще кто-то слышал )
Посмотрел ImVehLM, я тоже кстати делаю тормозные колодки в частности, да уменя впринципе почти уже все готово, что хотел, в данный момент хочу ради интереса рекурсией воспользоваться для перебора дерева компонентов в модели, хотя уже готов вариант, когда расположение компонентов известно, и я просто перехожу от предыдущего который известен, к следующему который я сам уже добавил в zModeller'е
0A97: 1@ = car 0@ struct 1@ += 0x668 // правая дверь авто 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ <> 0 then 1@ += 0x9C // смещение в структуре компонента, по которому записан указатель на следующий компонент иерархии с таким же рангом 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ <> 0 then
все ясно, а когда скрипт дойдет до последнего компонента с текущим рангом, какой адрес будет в указателе 1@. Нужно условия выхода из цикла(цикл пробежиться по всем компонентам автомобиля). Можно ли считать, что когда 1@ == 0, то все дальше нет объектов с текущим "рангом"?
DirectX > Мультитекстурирование.
И смысл этого? мне нужно то как этим пользовваться через CLEO
Благодарю, жаль Гугл не выдает такие ценные странички=)с перемещением разобраться более менее. меня еще интересуют текстуры. Есть скажем несколько текстур, их надо совместить и наложить на поверхность, в какую сторону копать? Для начала лишь как просто наложить текстуру на какую-нибудь модель? Заранее благодарен.
Можно ли из CLEO работать с компонентами автомобиля специально сделанными в zModeller'е (изменять их положение, поворот) Ну и соответственно допускает ли CLEO накладывать на поверхностит текстуры с нужными сдвигами. Смотря в чужих скриптах увидел лишь следующий код:
0AA6: call_method 5878048 1@ num_params 3 pop 0 0.0 2@ 0.0
на сколько я понял он поварачивает какой-то компонент, это все что я нашел. Помогите разобраться.
Нужно определить смещенийе колес относительно своего исходного положения по оси Z(т.е. уровень сжатия пужин одвески). Опытным путем определил что по адресу CVehicle+0x07D4 (wheelsDistancesToGround1 так написано на gtamodding.ru) идут последовательно четыре float числа, принимающих значения от 0.0 до 1.0, из экспериментв увидел, что когда колесо висит в воздухе то один из параметров принимает значение 1.0, соответсвенно кождое колесо соответсвует одному из 4 этих чисел, следующие 16 байт (начинается с CVehicle+0x07E4) содержат также 4 float числа, изменяются также от 0.0 до 1.0 и при висящем колесе принимают 1.0. причем, когда сравнивал значения в первой четверке и во второй значении отличаются при одинаковом сжатии "пружин". Кто что знает? Заранее спасибо)
Ответа на свои вопросы, я не нашел поэтому здесь решил их задать. Как в функцию передать стринговый параметр? Ну и на страничке с CLEO 4 написано: В четвертой версии появились новые опкоды для работы со звуками, форматирования текста, была добавлена возможность выводить на экран тексты без использования внешних текстовых файлов (.gxt, .fxt) Как реализовать вывод на экран текста без доп. файлов?
Пытался передовать просто строчкой в кавычках, переменной... бестолку - игра вылетает
{$CLEO} :LABEL thread 'LABEL' wait 0 while true wait 0 if not Player.Defined($PLAYER_CHAR) then continue end if 00DF: actor $PLAYER_ACTOR driving then {любой код} 0AB1: call_scm_func @draw_data 1 'какойто текст, естественное не кириллица' end end 0A93: end_custom_thread :draw_data {код функции} 0AB2: ret 0
В одном из чужих скриптов нашел пример вызова функции, где как раз третий параметр используется в функции как строчка:
0AB1: call_scm_func @NONAME_1175 4 0@ 100.0 12@ 5784415
Это параметр: 5784415
Но к сожалению не понял, что к чему(
Пните в нужную сторону=)
Pages: 1