Определение стороны по координатам 4 векторов.

Версия Minecraft
1.12.2
476
9
39
Напарился намучился и пришел к тому что нужно самому определять сторону блока, так как игра думает, что это например юг, а на деле это восток.
Соответственно, есть 4 вектора в каждом координаты своей точки(x,y,z)
И нужно как-то правильно определить какая это сторона. То есть нужно определить не сторону точки/вектора, а всей плоскости построенной по точкам/векторам.
Я немного нуб в геометрии поэтому я тупо складываю все 4 вектора одной плоскости и на основе метода в классе EnumFacing.getFacingFromVector(x,y,z) вычисляю вектор. Уверен, что данный способ не катит и надо по-другому, но как?
 
Решение
Замутил новую проверку, с кучей вычислений, в области с блоками при прогрузке проседает фпс на 5-10, редко на 15.
Крч.
Алгоритм проверяет наибольшее количество "похожих" точек и на основе их уже смотрит в какую сторону они смотрят. Т.е как минимум 1 точка из 4 идёт в лес, когда рендерится склон. Особенно если он очень странно рендерится.
Надеюсь никто из этих блоков мир не будет генерировать. Воооооооооооооооот. Всем спасибо!)
1,976
68
220
> Плоскость построенная по 4м векторам... што?
Берёшь плоскость, находишь её нормаль, находишь угол между нормалью и вектором, указывающим в ноль и смотришь, чему он равен (0, +/-90, 180) и на основе этих данных определяешь сторону.
Ты это имел ввиду?
 

CumingSoon

Местный стендапер
1,634
12
269
Берёшь три точки. Делаешь 2 отрезка: аб и ас (т.е. а - одинаковая, а-б-с идут в порядке против часовой стрелки). Находишь векторное произведение(загугли формулу), нормализуешь. Получаешь нормаль. Таких нормалей у блока всего шесть, по ним можно определить сторону.
 
476
9
39
Крч: "всё фигня Вова."
 
476
9
39
Код показывай, либо объясняй конкретнее
Он теперь все стороны всех блоков рендерит. Я попробовал проще и высчитал середину плоскости и по ней определяю какая сторона. При том лайтмап не искажается. Так что я хз.
 
476
9
39
Определяю просто. Если +y больше всех остальных коорд(x,z) значит верх. Майн по дефолту так же определяет, точнее я через этот метод определяю сторону.
 
476
9
39
Грубо говоря есть куб. И какого-то сторона левая рендерится например впереди. И обратный эффект тоже.
Т.е вместо передней стороны, рендерится левая так как сторона смещенна, но игра об этом не знает и работает по старым данным. Ясен пень, что через метод shouldSideRendered нужную сторону не пускает. Проблема ещё в том, что верхняя сторона горкой. То есть мой метод поиска нужной стороны подумает, что это лево и запретит рендер, так как слева стоит непрозрачный блок. И проблема в том, что исчесляет он абсолютно рандомно. То есть сторона может быть на своем месте, а может и не быть. Вот.
 
476
9
39
Ещё может быть так что у меня левой стороны тупо нет, так как верхняя и левая образуют склон. Как объёмный треугольник. Хз тоже чего с этим сделать.
 
476
9
39
Замутил новую проверку, с кучей вычислений, в области с блоками при прогрузке проседает фпс на 5-10, редко на 15.
Крч.
Алгоритм проверяет наибольшее количество "похожих" точек и на основе их уже смотрит в какую сторону они смотрят. Т.е как минимум 1 точка из 4 идёт в лес, когда рендерится склон. Особенно если он очень странно рендерится.
Надеюсь никто из этих блоков мир не будет генерировать. Воооооооооооооооот. Всем спасибо!)
 
Сверху