Z сортировка для орбит

техническая поддержка по Construct 2

Сообщение Z сортировка для орбит
» 01 окт 2020, 16:06

Думаю как добавить z сортировку в механику орбит.

В С2 есть сортировка объектов по Z.
Изображение
Можно добавить все объекты в семью и сортировать по семейной переменной.

Вопрос в том, как представлять z орбит.
Для простоты представим любую эллиптическую орбиту, как правильную окружность, которую мы видим под углом. Боковой наклон нас не интересует, следовательно положение по z будет зависеть от радиуса и двух углов - угла окружности и угла наклона к наблюдателю, которого в исходнике пока нет.
Или вычислять сам угол здесь не обязательно?

Задача - добавить z сортировку в орбитальный исходник.

орбиты Zsort.capx
(208.48 КБ) Скачиваний: 72


Решение

орбиты Zsort - 2.5D upd3.capx
(208.72 КБ) Скачиваний: 54
Последний раз редактировалось repkino 04 окт 2020, 12:54, всего редактировалось 2 раз(а).
Аватара пользователя

Игродел
Сообщений: 1294
Я тут с 31 май 2017
Репутация 250 [ ? ]

Сообщение Z сортировка для орбит
» 01 окт 2020, 19:26

орбиты Zsort_2.capx
(209.08 КБ) Скачиваний: 70

примерного эффекта добиться удалось, но появляется несколько точек, в которых объекты проходят сквозь друг-друга, чтобы избежать этого нужно грубо говоря учитывать размеры 3-ёх мерного объекта, 2-ух мерную проекцию которого сортируем по оси z
(верни спавн спутников обратно к 25, станет понятнее о чём я)
 
Изображение
Аватара пользователя

cliva
Сообщений: 818
Я тут с 07 май 2017
Двиг: CC,C2
Лицензия: full
Репутация 317 [ ? ]

Сообщение Z сортировка для орбит
» 02 окт 2020, 02:05

cliva писал(а):примерного эффекта добиться удалось

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

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

Что такое сортировка по Z в С2? Как я понимаю, это сортировка от нижнего к верхнему, в произвольной шкале чисел. Т.е. мы можем представить, что целая единица глубины по Z равна одному пикселу, и получим декартову модель сцены. Для простоты возьмём глубину сцены равной ширине локации. Например, параллелепипед 1280х720х1280.
Дальняя точка глубины 0, ближняя - 1280, экран, всё, что больше 1280 мы уже не видим.
Орбиты возьмём как правильные окружности с постоянным радиусом. Если они в форме эллипса, значит просто наклонены к наблюдателю в ортогональной проекции.

Изображение

Так как в исходнике для образования эллипса они меняют радиус, нужно взять отношение изменённого радиуса к наибольшему и вычислить угол наклона. Минимальный и максимальный радиус нам известен - мы сами его задаём в исходнике как H и W. Подозреваю, что всё это легко описывается синусами-косинусами, нужно только принять точки отсчёта. Точкой отсчёта напрашивается центр окружности, задаем ему произвольное Z внутри сцены и прибавляем отнимаем катеты наклона от этого значения.
Аватара пользователя

Игродел
Сообщений: 1294
Я тут с 31 май 2017
Репутация 250 [ ? ]

Сообщение Z сортировка для орбит
» 03 окт 2020, 13:04

орбиты Zsort3.capx
(209.34 КБ) Скачиваний: 65

Возможно это решение уже ближе к тому, которое требуется, я же правильно понимаю что W и H являются коэффициентами наклона через z по x и y соответственно?
 
Изображение
Аватара пользователя

cliva
Сообщений: 818
Я тут с 07 май 2017
Двиг: CC,C2
Лицензия: full
Репутация 317 [ ? ]

Сообщение Z сортировка для орбит
» 03 окт 2020, 14:36

cliva, ищешь лёгкие пути )
Sine - это значение прибавляемое к гипотенузе Z-катета, там вместо sine может быть что-то другое, что будет менять угол наклона орбиты.

В общем, сделал пространственную проекцию по теореме Пифагора, с глубиной сцены.
Взял W за проекционный радиус окружности и как максимальное значение для H.
То есть, H не может быть больше W, и при изменении радиуса окружности W должно быть родительским значением для H.

sqrt(Self.W^2 - (sqrt((cos(orb.ang)*Self.W)^2 + (sin(orb.ang)*Self.H)^2))^2)

Упростить бы это ещё, но с математикой не дружу :pardon:

upd.1 более точное позиционирование по Z относительно центра

орбиты Zsort 2.5D upd1.capx
(208.74 КБ) Скачиваний: 61
Аватара пользователя

Игродел
Сообщений: 1294
Я тут с 31 май 2017
Репутация 250 [ ? ]

Сообщение Z сортировка для орбит
» 03 окт 2020, 16:18

Упростил выражение для исходника "орбиты Zsort 2.5D.capx" (до upd.1)
орбиты Zsort - 2.5D_2.capx
(208.74 КБ) Скачиваний: 66

в данном случае возведение подкоренного выражения в квадрат даёт подкоренное выражение, поэтому и корень и квадрат ни к чему + заменил тернарный оператор на (-1)^n
 
Изображение
Аватара пользователя

cliva
Сообщений: 818
Я тут с 07 май 2017
Двиг: CC,C2
Лицензия: full
Репутация 317 [ ? ]

Сообщение Z сортировка для орбит
» 03 окт 2020, 16:57

cliva, :ok:

Тут, короче, ещё подсказывают как сократить формулу

Вроде работает, посмотри, такое сокращение корректно?
было
(-1)^int(Self.ang/180) * sqrt(Self.W^2-((cos(orb.ang)*Self.W)^2+(sin(orb.ang)*Self.H)^2))
стало
(-1)^int(Self.ang/180) * sqrt(sin(orb.ang)^2*(Self.W^2-Self.H^2))
Последний раз редактировалось repkino 04 окт 2020, 12:53, всего редактировалось 1 раз.
Аватара пользователя

Игродел
Сообщений: 1294
Я тут с 31 май 2017
Репутация 250 [ ? ]

Сообщение Z сортировка для орбит
» 03 окт 2020, 17:51

Да, (cos(orb.ang)*Self.W)^2 преобразовали в (1-sin(orb.ang)^2)*(Self.W^2) и дальше раскрытие скобок и группировка членов даёт сокращение до такого вида
 
Изображение
Аватара пользователя

cliva
Сообщений: 818
Я тут с 07 май 2017
Двиг: CC,C2
Лицензия: full
Репутация 317 [ ? ]

Сообщение Z сортировка для орбит
» 03 окт 2020, 18:29

cliva, ок )

Добавил результат в стартовое сообщение.
Аватара пользователя

Игродел
Сообщений: 1294
Я тут с 31 май 2017
Репутация 250 [ ? ]

Сообщение Z сортировка для орбит
» 05 окт 2020, 23:29

repkino, Чёт вы всё усложнили). По сути глубина на орбите будет ровняться:

при условии что орбита вытянута по ширине:
sin(phi)
при условии что орбита вытянута по высоте:
cos(phi)

Где phi - угол между центром орбиты и объектом (в радианах).

Вернётся вектор (число от -1 до 1).
Аватара пользователя

Игродел
Сообщений: 962
Я тут с 12 окт 2013
Репутация 256 [ ? ]



Вернуться в Вопрос-Ответ по Construct 2

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх