Closed Qwertyus3D closed 1 year ago
Баг присутствовал и в старых версиях программы (когда ещё только angles поддерживалось, и отрисовка углов работала только при выделении энтити).
@Qwertyus3D можно пример ?
Я когда делал, есть различные ентити у которых некоторые значения тупо не поддерживаются, их игнорит поворот или частично игнорит. Надо смотреть совпадает ли координаты и визуально в игре.
Согласен, есть энтити, поворот которых по определённой оси не поддерживается. Но тогда они и не должны поворачиваться по указанной оси совсем. А если поворот действует, то он должен работать корректно. А он работает, но некорректно. Можно просто любую энтить с angles посмотреть и убедиться в этом. Если нужен конкретный пример, то я обнаружил это на примере трупа учёного на с2а5, который лежит на камне под дамбой. В игре указанные значения поворачивают энтить так, как нужно (-8 по Y выравнивает положение тела относительно склона камня, подошвами ног вниз). А в BSPGuy отображается неверное направление (выглядит так, как будто левая сторона модели будет задрана вверх). При значениях -8 90 0 визуально происходит вращение по Х, а не по Y, из-за того, что модель развёрнута на 90 градусов по Z. Но по оси X модель продолжает поворачиваться так, как если бы поворота по Z не было.
@Qwertyus3D В движке может быть жестко закодированные значения типа -1 -2 (повернут вверх, повернут вниз), это зависит от движка, я не знаю всех вариантов
Это не то. Там именно угол. И это происходит с любой энтитью. Любая энтить даёт наклон по Y в фиксированном направлении. Вокруг своей оси разрешено поворачивать все энтити, кроме спрайтов (для них не актуален поворот вокруг вертикальной оси, т. к. спрайт всегда смотрит на игрока). Pitch должен раскачивать модель влево-вправо в зависимости от того, какой поворот модель получает вокруг своей оси. А в программе поворот по Pitch имеет строго фиксированное направление, как ни крути модель вокруг оси. Просто всегда в одну и ту же сторону наклон.
Если совсем тупо объяснять, то Pitch в программе визуально наклоняет любую модель относительно глобальной оси координат. Как если бы был предусмотрен наклон только в одном направлении.
@Qwertyus3D я не знаю где на каких картах кто находится тем более трупы ученых каких-то)
можно конкретный пример на какой карте, какая entity работает не так как должна?
@UnrealKaraulov Да я же писал выше:
Если нужен конкретный пример, то я обнаружил это на примере трупа учёного на с2а5, который лежит на камне под дамбой.
И это происходит с любой энтитью. Любая энтить даёт наклон по Y в фиксированном направлении.
Т. е. любую энтить можно взять и попробовать прописать ей разные значения angles. Первое значение из трёх 0 0 0 - это и есть Pitch. И он любую энтить в редакторе наклонит строго в одном и том же направлении, какие значения не задавай для Yaw и Roll.
Я себе сделал FGD, который учитывает реальные размеры моделей в игре, с ним тело учёного в редакторе выглядит так:
Там угол по Pitch -8 задан, а в редакторе это выглядит, как будто модель приподнята по Roll. Левая сторона приподнята вверх, вместо того, что должна быть нижняя часть (со стороны направляющей) опущена вниз.
В игре всё выглядит, как положено (немного не идеально, но правильно в целом): Тело лежит вдоль склона, левая сторона не задрана.
Повторюсь, дело вообще не в этой модели. Любую энтить можно попробовать крутить в редакторе, и с любой энтитью будет то же самое. Pitch будет игнорировать то, на какой угол энтить повёрнута по Yaw и Roll. И будет наклонять всегда в одну и ту же сторону.
Понятно просто я вроде как проверял с брашевыми ентити проблем не было. Ну попробую изменить вариант поворота матрицы, взял щас несколько из GLM исходникам
Вот пример func_breakable почти 100% совпадение.
Чтобы увидеть проблему, нужно задать более выраженное значение Yaw. 20 - это маленький угол, из-за чего и возникает иллюзия, что всё нормально. Нужно ставить 90/180/270, тогда будет видно различие. Когда мы поворачиваем энтить на прямой угол, наклон по Pitch должен очевидно происходить в другом направлении. Но этого не происходит. Независимо от Yaw, наклон по Pitch будет в одну и ту же сторону. Я уже не знаю, как ещё объяснить.
И вообще, зачем вращать то, что вращать не требуется? Зачем вращать func_breakable? У этой энтити вообще не поддерживается angles. Надо вращать те энтити, у которых angles предусмотрены.
И вообще, зачем вращать то, что вращать не требуется? Зачем вращать func_breakable? У этой энтити вообще не поддерживается angles. Надо вращать те энтити, у которых angles предусмотрены.
ну как видно на скрине, поддерживаются
На скрине видно ANGLES NOT SUPPORTED :D
Только Y не поддерживается в breakable
@Qwertyus3D вот например значения angles для игрока:
@Qwertyus3D это значит что не работает что ли?)
@Qwertyus3D вот все 3 YAW PITCH ROLL выставил
и практически 100% совпадает
"Работает" и "работает правильно" - это 2 разные вещи. Проверить на энтите, которая полноценно поддерживает angles, что мешает? И задать угол 90/180/270 по Yaw? А по Pitch 45. Я пытаюсь объяснить, как проверять, это же не просто так я писал. Смотреть надо не на то, наклоняется энтить или нет, а как она наклоняется в зависимости от заданного значения Yaw.
Для этого даже в игру не нужно лезть. Прямо в самой программе видно, что наклон по Pitch относительно выбранного значения Yaw неверный.
@Qwertyus3D так я же кидаю скрины, info_player_start, все значения ставлю и в игре сущность наклонена именно под таким углом как и в редакторе.
почему-то в rotate надо -pitch тогда работает как на скрине
Вот энтить лежит без поворотов 0 0 0: Вот мы наклоняем её по Pitch на 45 0 0: При этом видно, что вниз наклоняется та сторона, на которой расположена направляющая. Вот мы повернули энтить по Yaw на 0 90 0: Вот мы к повороту по Yaw добавляем наклон по Pitch: 45 90 0: Что получилось? Энтить наклонилась тупо в ту же сторону. Вместо того, чтобы ушла под землю та сторона, на которой была направляющая, а противоположная сторона поднялась, мы видим, что энтить завалилась на бок в том же направлении, без учёта поворота модели по Yaw.
@Qwertyus3D так, я изменил что-то и кажется это заработало... :)
Причем я уже раз 20 пытался так сделать и никак не работало, перебрал может 10 функций rotate matrix )
@Qwertyus3D https://github.com/UnrealKaraulov/newbspguy/commit/bd13889c0962f8a7d29597ec0293459a09a7f008
тут проблема решена или я опять глюк словил?))
тут еще какие-то косяки с func_ сущностями, у них или PITCH или YAW , одновременно и то и то не работает. не могу понять в чем дело :) причем редактор поддерживает, а в игре нет.
Да не важно сейчас, что в игре. Важно, что сам редактор какую-то ересь показывает, это же очевидно.
Да не важно сейчас, что в игре. Важно, что сам редактор какую-то ересь показывает, это же очевидно.
зачем вообще отображать в редакторе то что не будет соответствовать увиденному в игре?
мне нужно что бы объекты располагались так как будут в игре
но что-то все равно не так, не понимаю что
Я продемонстрировал сейчас скринами в точности то, что я показывал скринами из игры. В игре правильно всё, как должно быть по логике, а редактор показывает неправильное положение.
раньше работало правильно в игре, теперь игрок смотрит вниз, а в редакторе нет
Модель должна вращаться вокруг своей оси координат. А она вместо этого по Pitch вращается тупо в одном направлении. Вот что неправильно.
Для редактора Pitch - это наклон в одну конкретную сторону. Точка.
@Qwertyus3D мне надо что бы соответствовало игре, иначе если в редакторе изменишь углы модельки, а в игре она окажется в е@#$нях то что это за редактор?)
Так это и не соответствует игре вообще.
Для игры вращение относительно центра энтити либо разрешено, либо нет. Но нет такого, чтобы энтити наклонялись в одну конкретную сторону. Такого в игре не происходит никогда.
Как если бы Pitch был условно наклоном на север, и всё. На север можно наклонять, а на юг, запад и восток - нельзя. Вот как это "работает" в редакторе.
Попробовал последний билд Update BspRenderer.cpp. Нет, ерунда там. Всё также заваливает модель в одном направлении, не учитывая того, повёрнута она или нет.
Только крутит теперь в противоположную сторону, что вообще неверно.
Хотя, если судить по игре, то без разворота энтити по Yaw "ноги" модели уходят вниз при отрицательном значении. Вообще-то это правильно, по идее. Т. к. в игре наблюдается такой же эффект. Проблема только, что Pitch продолжает наклонять модели только в одном направлении.
Первое значение из трёх 0 0 0 - это и есть Pitch.
Это с сайта Valve "angles are X, Y and Z also known as Roll, Pitch and Yaw."
@Qwertyus3D с последним обновлением https://github.com/UnrealKaraulov/newbspguy/commit/4d70f5663df25bdcb1b38343893251564ead2508 у меня адекватно работают брашевые entity как в редакторе так и в игре, info_player_start тоже адекватно стало показывать направление взгляда игрока, как в редакторе так и в игре одинаковые углы.
Но тот мертвый ученый наклонен не под тем углом все равно :) может у него правила наклона другие и отличаются от других сущностей... ?:)
Это с сайта Valve "angles are X, Y and Z also known as Roll, Pitch and Yaw."
OMG, ну а FGD что показывает на любой энтите с поддержкой angles??? X, Y и Z это безусловно Roll, Pitch и Yaw. Только порядок значений такой:
Pitch Yaw Roll (Y Z X) (angles)
Это в любой справке по энтитям прописано...
https://twhl.info/wiki/page/monster_barney
https://simple.wikipedia.org/wiki/Pitch,_yaw,_and_roll
Pitch - наклон, Yaw - поворот, Roll - вращение. Я всю дорогу толкую о том, что энтить наклоняется строго в определённом направлении, независимо от угла поворота или вращения. Последний апдейт частично исправил ситуацию, но поломал поддержку angle, потому что для angle берётся значение Z, среднее из трёх, но редактор теперь думает иначе и не поворачивает энтить на указанный угол вообще.
Ещё раз. У энтити есть направляющая. Yaw (Z) вращает энтить вокруг вертикальной оси, меняя её расположение, как по компасу. Pitch (Y) производит наклон энтити. При правильной механике, если значение Pitch отрицательное, направляющая должна наклониться вниз, а при положительном значении - подняться вверх. И это должно работать с учётом того, как энтить повернулась по Yaw (Z). Но! Для модели игрока в Голдсорсе имеется баг, и отрицательное значение, наоборот, разворачивает модель игрока взглядом вверх. Называется это Stupid Quake Bug: https://www.reddit.com/r/HalfLife/comments/6jjhbd/xash_guy_on_stupid_quake_bug/
Дядя Миша в Ксаше это исправил. Но в случае с моделью учёного как раз проблема в том, что в последнем билде наклон производится в противоположную сторону. А так, действительно, углы сейчас работают корректно. Pitch наконец-то учитывает положение модели по Yaw. Но поломалась поддержка angle. В общем, сейчас исправить нужно:
Revert engine "hardcoded" angles for bspmodels Angle заработал, но направление Pitch осталось тем же, фикса не было? Или только для браш-моделей что-то изменилось?
Revert engine "hardcoded" angles for bspmodels Angle заработал, но направление Pitch осталось тем же, фикса не было? Или только для браш-моделей что-то изменилось?
не знаю в каких случаях нужно отражать, т.к в большинстве случаев работает именно так как в игре, если делать минус PITCH то большинство моделей и сущностей ломается, только у покойника с c2a5 наклон исправляется)
пока ничего сделать лучше чем есть не могу :)
Есть предложение добавить опцию инверсии Pitch, подобно опциям оптимизации. Чтобы можно было самому указывать, каким энтитям нужна инверсия. Хотя, по моему мнению, правило общее, и должно применяться к любой студиомодели. Потому что учёный - это частный случай студиомодели.
Вот я задал углы в редакторе моделям солдат:
А в игре строго наоборот:
Вот задал противоположный угол Pitch для двух func_door: В игре эти углы влияют на то в какую сторону смещается дверь при открывании.
Вот что в игре: При положительном значении дверь уезжает вниз (ближняя), а при отрицательном - поднимается вверх (дальняя).
Я так понимаю, проблема в том, что брашевые энтити следуют одним принципам наклона (положительное значение задаёт направление вниз), а студиомодели / точечные энтити - другим (положительное значение задаёт направление вверх).
@Qwertyus3D как на счет infoplayer ?
@Qwertyus3D func_door не поддерживает angles d
Вот подтверждение, энтитя func_door_rotating (с официальной поддержкой angles) в редакторе:
Вот она же в игре: Углы совпадают. А для студиомоделей - нет. Это и есть Stupid Quake Bug.
Программа некорректно отрисовывает angles. А именно, поворот по Pitch не учитывает значения Yaw. Независимо от поворота по Yaw Pitch всегда наклоняет энтить в одном направлении. Т. е., например, при Yaw 90 поворот по Pitch визуально суммируется со значением Roll (т. е. как бы тоже крутит по оси Roll). При Yaw 180 поворот по Pitch наклоняет объект в противоположном направлении относительно правильного. При Yaw 270 значение Pitch визуально вычитается из значения Roll (т. е. как бы крутит по той же оси, но в противоположном направлении). Т. е. только когда Yaw = 0, тогда поворот по Pitch корректный.