Перейти к содержанию
  • Поворот группы предметов по вертикали как одного


    Очень долгое время ломаю голову над тем как это можно сделать в принципе, хотя бы в теории для начала.

     

    Я представляю это себе так: есть точки в пространстве, описывающие допустим дом, если мы вращаем дом то каждая точка совершает вращение относительно центра вращения, если это вращение было из идеального центра то каждая точка сдвигается на равную длинну в пространстве по вымышленному кругу. Если же движение не из центра, как в случае если мы взяли в руки карандаш за один конец и повернули его в пространстве то один конец двигался, а другой нет, это тоже нужно как-то обыгрывать, не понимаю как, но мне кажется в первую очередь, для реализации данной идеи нужно понимать где в пространстве центр точек предметов (центров их тел) именуемых в общем как дом (убежка)

     

    Даже если мы корректно реализуем поворот позиций относительно координатной плоскости мира, нужно поворачивать каждый предмет по YAW:

     

    Flight_dynamics_with_text.png

     

    может кто с мозгами дружит лучше подскажет чего?)


    Обратная связь

    Рекомендуемые комментарии



    Electr0

    Опубликовано

    оказалось это из за операций по отрисовке лучей, без них не лагает..

    Electr0

    Опубликовано

    найдена проблема с дверьми, у них коллапсирует логика поворота после таких телодвижений

    пишет [FS] Нельзя трогать дверь, пока она не будет полностью закрыта.

    KOllapsE

    Опубликовано

    Ну, @3LoU_BaNaN теперь будет доволен, наверно - можно вытащить своё убежище откуда угодно и расположить как угодно). Да и возможности стройки расширились - можно создавать структуры с круглыми формами, причём довольно ровно и нетрудозатратно, можно быстро создавать симметрию в убежище. В общем, эта пять :  D

    Electr0

    Опубликовано

    ну эксперимент с поворотом по осям X и Z провалился (да предметы располагаются корректно, но вот их углы ведут себя сумазбродно), а вот по просто поворачивать как на скриншотах можно легко

    Electr0

    Опубликовано

    можно поздравить толстушку, собранный плагин перевалил за 270 кб D

    KOllapsE

    Опубликовано

    9 минут назад, Electr0 сказал:

    ну эксперимент с поворотом по осям X и Z провалился (да предметы располагаются корректно, но вот их углы ведут себя сумазбродно), а вот по просто поворачивать как на скриншотах можно легко

    А они тоже используют rotate YAW, когда поворачиваются после перемещения? Если да, то мб надо использовать повороты как сейчас на стройке - то есть, объект перемещается, используя YAW, а потом поворачивается по старой системе, по какой-нибудь оси. Если нет, то мб и там надо использовать

    Electr0

    Опубликовано

    Тест на проблемной карте мост, где окружение повернуто относительно координатной плоскости на 45 градусов что вызывает визуально и ориентировочные проблемы с рождением предметов, убежка на 566 предметов:

    20160627213138_1.jpg

    20160627213154_1.jpg

     

    и другая:

    20160627214424_1.jpg

    20160627214428_1.jpg

    Electr0

    Опубликовано

    проблема с дверьми была из за отсутствия в протипной функции предварительной системы расчетов и запретов

    Electr0

    Опубликовано

    34 минуты назад, KOllapsE сказал:

    А они тоже используют rotate YAW, когда поворачиваются после перемещения? Если да, то мб надо использовать повороты как сейчас на стройке - то есть, объект перемещается, используя YAW, а потом поворачивается по старой системе, по какой-нибудь оси. Если нет, то мб и там надо использовать

    не, rotate yaw и все перечисленное до этого не работает в текущей реализации, я провожу вектор от точки А до Б потом поворачиваю его по функции базирующейся на теории http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions далее прибавляю к координате позиции стартового предмета получившийся повернутый вектор и тем самым получаю конечную позицию повернутого предмета, что касается поворотов просто прибавляю по оси Y на величину поворота вектора указываемую в аргументе к функции поворота

    KOllapsE

    Опубликовано

    1 минуту назад, Electr0 сказал:

    не, rotate yaw и все перечисленное до этого не работает в текущей реализации

    Ну-у-у, тогда стоит уделить внимание тому, почему по Y магия работает, а по X и Z - нет

    Electr0

    Опубликовано

    1 минуту назад, KOllapsE сказал:

    Ну-у-у, тогда стоит уделить внимание тому, почему по Y магия работает, а по X и Z - нет

    попробуй по поворачивать повернутый предмет по осям X Z увидишь что результаты очень разные, в отличие от по Y, даже не знаю можно ли это обойти)

    Electr0

    Опубликовано

    система отката повтора групповых действий отказывается корректно откатывать/повторять данный тип действия, придется регистрировать новый тип действия, т.к. тип действия передвинуть не запоминает углы. гемор ><, ненавижу сдвиги стеков

    Electr0

    Опубликовано

    администраторы Mega survival приглашаются на тестирование прототипа, для выявления не найденных недочетов и других возможных поломок после поворотов группы предметов как одного

    Electr0

    Опубликовано

    Только что, KOllapsE сказал:

    а что, прототип уже на Меге? 0_0

    нет нужно закрытое тестирование, пока что жду желающих, там довольно критичные возможные исключения, но пока что то что нашел закрыл уже

    Electr0

    Опубликовано

    Значение Статус изменено на: Тестируется

    KOllapsE

    Опубликовано

    47 минут назад, Electr0 сказал:

    попробуй по поворачивать повернутый предмет по осям X Z увидишь что результаты очень разные, в отличие от по Y, даже не знаю можно ли это обойти)

    Не пойму никак - просто брать и поворачивать? Каждому объекту вроде и добавляется угол, как должно.

    Наверно, надо обратить внимание на пункт меню стройки "по часовой". Если остальные повороты просто добавляют заданные значения к углам, то повороты по часовой делают с углами непонятно что на первый взгляд, но объект всегда поворачивается вокруг синей оси и именно на заданный угол. Т.е. они правильно используют http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions относительно XYZ объекта 

    1.jpg

    2.jpg

    3.jpg

     

    Если с проблемой поворотов Х и Z ничего не выгорит, то есть такой вариант: проверить, можно ли будет использовать его не только для поворотов самого объекта, но и другие объекты относительно него поворачивать, а так же сделать поворот типа "по часовой" для красной Х и зелёной У оси. Если да, то можно будет делать так: запомнить и обнулить углы всех, кроме одного, предметов, повернуть относительно какой-либо его оси все предметы, а потом к углам каждого предмета добавить запомненные ранее. Есть минусы - игрокам поворачивать будет менее удобно, потому что оси первого объекта могут быть расположены не параллельно соответствующим осям карты и надо будет сначала поворачивать его; всё ранее сделанное по поворотам будет впустую. Но повороты будут). В общем, на крайний случай вариант.

    Electr0

    Опубликовано

    проблема в том что если хорошенько по заворачивать по осям Y X Z, то потом при поворотах по осям X Z ты не можешь предсказать как повернется предмет, если по оси Y ты точно можешь знать что просто повернется вокруг себя по горизонтали, то в этих случаях нифига), и да куб плохой пример он симетричный, возьми забор, на нем хорошо видно проблему сваливания двух векторов в одну ось ее вроде именуют gimbal lock, на видео показан этот эффект, в моем случае и так сяк бывает, нельзя предсказать результат, пока не могу придумать решение:

     

    Electr0

    Опубликовано

    и да, 

    13 минуты назад, KOllapsE сказал:

    Т.е. они правильно используют http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions относительно XYZ объекта 

     мы не относительно, а реально поворачиваем объект по осям X Y Z, ту гео информацию что ты видишь показывает по реальным осям объекта, тоесть ты видишь как они изменяются относительно мира

    Electr0

    Опубликовано

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

    KOllapsE

    Опубликовано

    4 минуты назад, Electr0 сказал:

     мы не относительно, а реально поворачиваем объект по осям X Y Z

    Я имею в виду, что поворот по часовой привязан к системе координат объекта, а не карты. И это можно использовать, раз уж есть такое на руках.

     

    23 минуты назад, Electr0 сказал:

    проблема в том что если хорошенько по заворачивать по осям Y X Z, то потом при поворотах по осям X Z ты не можешь предсказать как повернется предмет, если по оси Y ты точно можешь знать что просто повернется вокруг себя по горизонтали, то в этих случаях нифига).

    Я так понимаю, сейчас при поворотах используется xyz или zyx иерархия. Решение для правильных поворотов по Z и X - менять иерархию в зависимости от того, по какой оси мы хотим поворачивать объекты. Хотим по Х - используем zxy, что будет с остальными осями нам всё равно, мы их не используем в тот момент. Если после этого поворачиваем по Z - используем yzx. Только вот осуществимо ли это сейчас и не распухнет ли плагин ещё в пару-тройку раз? : D

    777.JPG

    Electr0

    Опубликовано

    1 минуту назад, KOllapsE сказал:

    Я имею в виду, что поворот по часовой привязан к системе координат объекта, а не карты. И это можно использовать, раз уж есть такое на руках.

     

    Я так понимаю, сейчас при поворотах используется xyz или zyx иерархия. Решение для правильных поворотов по Z и X - менять иерархию в зависимости от того, по какой оси мы хотим поворачивать объекты. Хотим по Х - используем zxy, что будет с остальными осями нам всё равно, мы их не используем в тот момент. Если после этого поворачиваем по Z - используем yzx. Только вот осуществимо ли это сейчас и не распухнет ли плагин ещё в пару-тройку раз? : D

    777.JPG

    не думаю что разбухнет, но я не знаю как это сделать D

    Electr0

    Опубликовано

    не очень понимаю что это даст.., ты предлагаешь поворачивать обе оси сразу?

    KOllapsE

    Опубликовано

    Только что, Electr0 сказал:

    не очень понимаю что это даст..

    Ну, сейчас же повороты по У всегда осуществляются правильно, как ни крути?) Хотим повернуть по У - и получаем нужный результат. Теперь меняем иерархию на zxy - и поворачиваем по Х всегда правильно. Т.е. опять получаем нужный результат. Используя нужную в зависимости от случая иерархию можно будет всегда получать правильные повороты.




    Присоединяйтесь к обсуждению

    Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

    Гость
    К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
    Добавить комментарий...

    ×   Вставлено с форматированием.   Вставить как обычный текст

      Разрешено использовать не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Обозначения статусов

    В обработке = Мы работаем над вашим отзывом.

    Будет сделано = Ваша идея добавлена к плану будущих изменений.

    Тестируется = Изменения внесены, но требуют тестирования.

    Сделано = Ваша идея реализована!

    Отклонено = Отзыв некорректный, бред, либо уже реализовано. Если у вас есть дополнительная информация напишите комментарий и мы снова откроем этот вопрос.

×
×
  • Создать...