-
Публикаций
201 -
Зарегистрирован
-
Посещение
-
Дней в лидерах
4
Тип публикации
Профили
Форум
Баг Трекер
Предложения
Список изменений
Файлы
Блоги
Магазин
Галерея
Комментарии к Запись, опубликованные пользователем KOllapsE
-
-
4 минуты назад, Electr0 сказал:
мы не относительно, а реально поворачиваем объект по осям X Y Z
Я имею в виду, что поворот по часовой привязан к системе координат объекта, а не карты. И это можно использовать, раз уж есть такое на руках.
23 минуты назад, Electr0 сказал:проблема в том что если хорошенько по заворачивать по осям Y X Z, то потом при поворотах по осям X Z ты не можешь предсказать как повернется предмет, если по оси Y ты точно можешь знать что просто повернется вокруг себя по горизонтали, то в этих случаях нифига).
Я так понимаю, сейчас при поворотах используется xyz или zyx иерархия. Решение для правильных поворотов по Z и X - менять иерархию в зависимости от того, по какой оси мы хотим поворачивать объекты. Хотим по Х - используем zxy, что будет с остальными осями нам всё равно, мы их не используем в тот момент. Если после этого поворачиваем по Z - используем yzx. Только вот осуществимо ли это сейчас и не распухнет ли плагин ещё в пару-тройку раз? : D
-
47 минут назад, Electr0 сказал:
попробуй по поворачивать повернутый предмет по осям X Z увидишь что результаты очень разные, в отличие от по Y, даже не знаю можно ли это обойти)
Не пойму никак - просто брать и поворачивать? Каждому объекту вроде и добавляется угол, как должно.
Наверно, надо обратить внимание на пункт меню стройки "по часовой". Если остальные повороты просто добавляют заданные значения к углам, то повороты по часовой делают с углами непонятно что на первый взгляд, но объект всегда поворачивается вокруг синей оси и именно на заданный угол. Т.е. они правильно используют http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions относительно XYZ объекта
Если с проблемой поворотов Х и Z ничего не выгорит, то есть такой вариант: проверить, можно ли будет использовать его не только для поворотов самого объекта, но и другие объекты относительно него поворачивать, а так же сделать поворот типа "по часовой" для красной Х и зелёной У оси. Если да, то можно будет делать так: запомнить и обнулить углы всех, кроме одного, предметов, повернуть относительно какой-либо его оси все предметы, а потом к углам каждого предмета добавить запомненные ранее. Есть минусы - игрокам поворачивать будет менее удобно, потому что оси первого объекта могут быть расположены не параллельно соответствующим осям карты и надо будет сначала поворачивать его; всё ранее сделанное по поворотам будет впустую. Но повороты будут). В общем, на крайний случай вариант.
-
а что, прототип уже на Меге? 0_0
-
1 минуту назад, Electr0 сказал:
не, rotate yaw и все перечисленное до этого не работает в текущей реализации
Ну-у-у, тогда стоит уделить внимание тому, почему по Y магия работает, а по X и Z - нет
-
9 минут назад, Electr0 сказал:
ну эксперимент с поворотом по осям X и Z провалился (да предметы располагаются корректно, но вот их углы ведут себя сумазбродно), а вот по просто поворачивать как на скриншотах можно легко
А они тоже используют rotate YAW, когда поворачиваются после перемещения? Если да, то мб надо использовать повороты как сейчас на стройке - то есть, объект перемещается, используя YAW, а потом поворачивается по старой системе, по какой-нибудь оси. Если нет, то мб и там надо использовать
-
Ну, @3LoU_BaNaN теперь будет доволен, наверно - можно вытащить своё убежище откуда угодно и расположить как угодно). Да и возможности стройки расширились - можно создавать структуры с круглыми формами, причём довольно ровно и нетрудозатратно, можно быстро создавать симметрию в убежище. В общем, эта пять : D
-
-
3 минуты назад, Electr0 сказал:
Return Value
Dot product of the two vectors.
но зачем мне один float, когда координата состоит из 3 float'ов
Сорь, я на алиедмод напрямую попасть не могу - блочит что-то, есть подозрение на провайдера, а мб много плагинов там накачал :D. Через онлайн прокси мне такой вид выдало
Не видно, что слева. Я думал, он координаты той точки выдаст, три флоата, как положено :С Или я что-то не понял?
-
-
28 минут назад, KOllapsE сказал:
Что-то не соответствует полученный угол своему вектору. Если совместить начало TempVec:: -53.144775 -174.051757 -0.238098 с осью координат, то до его конца не будут такие углы fTempVecAng:: 0.074962 253.020523 0.000000. Если работать с двумя осями только (Z почти ноль в обоих случаях), то координаты Х относятся к У примерно как 1:3. Ну не может тогда угол по Х быть почти нулём.
@Electr0, обрати внимание, пожалуйста. Либо я что-то не так понял, либо угол неправильный. Там точно угол для вектора из точки А в точку Б?
-
@Electr0 фишка в том, что дублируется АВ (два АВ получается). Потом одному из них изменяется градус. Полученный вектор и будет АС. Это просто повёрнутый АВ
-
5 часов назад, Electr0 сказал:
Вектор между точками А и б (функция MakeVectorFromPoints. там просто вычитание позиции А из Б):
fTempVec:: -53.144775 -174.051757 -0.238098Угол из вектора между этими точками ( функция GetVectorAngles):
fTempVecAng:: 0.074962 253.020523 0.000000Что-то не соответствует полученный угол своему вектору. Если совместить начало TempVec:: -53.144775 -174.051757 -0.238098 с осью координат, то до его конца не будут такие углы fTempVecAng:: 0.074962 253.020523 0.000000. Если работать с двумя осями только (Z почти ноль в обоих случаях), то координаты Х относятся к У примерно как 1:3. Ну не может тогда угол по Х быть почти нулём.
-
1 час назад, KOllapsE сказал:
В том отрывке кода просто берут и указывают дистанцию (Float:distance = 50)
Если можно из точки А 2696.005126 4924.954589 -976.147644 под углом fTempVecAng:: 0.074962 253.020523 90.00000 сделать дистанцию 181,984718, то это и будет точка С, куда потом второй объект перемещать
Я вот что подумал: а зачем вообще узнавать, где этот конец вектора АС? Мб можно по вектору АС на расстояние 181,984718 сразу перемещать второй объект? Если нельзя так, то ещё вариант:
Есть вектор АВ - от первого объекта ко второму. Копируем его и оставляем как был (два вектора в одном, так сказать). Далее получаем вектор АС изменением углов одного вектора АВ на сколько нужно. Есть два вектора - АВ от первого объекта ко второму и АС - от первого объекта к точке, где должен оказаться второй. Вычитаем из АС вектор АВ функцией "Subtracts a vector from another vector". ВС = АС - АВ. После этого используем функцию "Calculates the dot product of two vectors" для векторов АС и ВС - получаем ту самую точку С, куда надо переместить второй объект!!!
-
Только что, Electr0 сказал:
пробовал, но там искажение какое-то появляется, в общем длинна конца другая совсем, и сам угол не правильный.
А можно скрин посмотреть, что вышло-то? По идее всё правильно ведь
-
5 минут назад, Electr0 сказал:
там не то ><, там просто присваивает указанную ось от объекта по которому выравниваем, а в нашем случае надо как-то узнать позицию конца вектора под углом 90 град, понятия не имею как ее узнать
В том отрывке кода просто берут и указывают дистанцию (Float:distance = 50)
45 минут назад, Electr0 сказал://--------------------------------------------------------- // get position just in front of you // and the angles you are facing in horizontal //--------------------------------------------------------- GetClientFrontLocationData( client, Float:position[3], Float:angles[3], Float:distance = 50.0 ) { new player = GetPlayerIndex( client ); decl Float:_origin[3], Float:_angles[3]; GetClientAbsOrigin( player, _origin ); GetClientEyeAngles( player, _angles ); decl Float:direction[3]; GetAngleVectors( _angles, direction, NULL_VECTOR, NULL_VECTOR ); position[0] = _origin[0] + direction[0] * distance; position[1] = _origin[1] + direction[1] * distance; position[2] = _origin[2]; angles[0] = 0.0; angles[1] = _angles[1]; angles[2] = 0.0; }
Если можно из точки А 2696.005126 4924.954589 -976.147644 под углом fTempVecAng:: 0.074962 253.020523 90.00000 сделать дистанцию 181,984718, то это и будет точка С, куда потом второй объект перемещать
-
Только что, Electr0 сказал:
если бы я еще знал как это правильно сделать
Есть же выравнивание в стройке и оно работает (по X, Y, или Z)
-
1 минуту назад, Electr0 сказал:
это что ? типа длинна вектора?, а это не равно дистанции между объектом А и объектом Б?
ну да, это и будет дистанция между А и В
Надо, чтобы АС сохранил длину АВ для того, чтобы сохранилось расстояние между объектами, затем эта длина нужна. Ну или можно не считать длину, если есть возможность забабахать вектор такой же длины, просто с другим углом. Calculates a vector's length вроде подходит
-
А потом оба объекта повернуть по той же оси, что и вектор АВ до этого и получится, что были повёрнуты два объекта с сохранением расстояния друг до друга и правильно повёрнутыми осями
-
1 минуту назад, Electr0 сказал:
до сих пор не вижу объяснение что за чем там считается
Берём fTempVec:: -53.144775 -174.051757 -0.23809. и считаем длину вектора АВ
26 минут назад, KOllapsE сказал:КОРЕНЬ(53,144775^2+174,051757^2+0,238098^2)=181,9847189
Берём fTempVecAng:: 0.074962 253.020523 0.000000 - как повёрнут сейчас АВ. Мы хотим повернуть на 90 градусов вверх (не вдупляю сейчас, по какой оси это будет, но чтобы подвижный конец карандаша повернулся вокруг неподвижного ровно вверх или вниз). Добавляем ему 90 градусов по Z (это же система координат карты, а не объекта, так что всё ок)
32 минуты назад, KOllapsE сказал:fTempVecAng:: 0.074962 253.020523 90.00000
После этого надо переместить вектор с длиной 181,9847189 и градусами 0.074962 253.020523 90.00000 так, чтобы он исходил из точки А. Его конец и будет точкой, куда надо переместить второй объект, чтобы второй объект повернулся относительно первого на 90 градусов
-
@Electr0 я тот коммент менял три раза, мб потому непонятно : D
-
-
18 минут назад, Electr0 сказал:
Угол из вектора между этими точками ( функция GetVectorAngles):
fTempVecAng:: 0.074962 253.020523 0.000000А что дальше?,
Создать повёрнутый вектор, например, fTempVecAng:: 0.074962 253.020523 90.000000 у которого будет длина такая же как у этого fTempVec:: -53.144775 -174.051757 -0.23809.
КОРЕНЬ(53,144775^2+174,051757^2+0,238098^2)=181,9847189
Если всё ок, то так и можно поворачивать
P.S. и поместить этот вектор ту да же, откуда первый был [FS] Позиция: 2696.005126 4924.954589 -976.147644
-
@Electr0, а можно использовать "Returns angles from a vector" отсюда https://sm.alliedmods.net/new-api/vector , затем добавлять нужный градус в полученные значения, а затем создавать новый вектор с новыми углами? Ну или старому углы поменять
-
@Electr0, слушай, а в саурспауне, или на чём будет там код писаться, есть операции с векторами (векторное вычитание хотя бы)? Я тут пробую математически описать поворот по координатам, векторные операции упростили бы всё.
Поворот группы предметов по вертикали как одного
в °• Mega Survival
Опубликовано:
Ну, сейчас же повороты по У всегда осуществляются правильно, как ни крути?) Хотим повернуть по У - и получаем нужный результат. Теперь меняем иерархию на zxy - и поворачиваем по Х всегда правильно. Т.е. опять получаем нужный результат. Используя нужную в зависимости от случая иерархию можно будет всегда получать правильные повороты.