Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Алгоритм
Версия Warcraft:
1.31+
Библиотека геометрии, реализованная на Lua в ООП формате.
Из вкусного:
  • Functions - вспомогательные функции типа обрезки и вычисления разного вида интерполяций
  • Vector3 - класс 3D вектора с перегруженными мат. операторами, поддержкой 3D конверсии из игровых структур и обратно, интерполяциями, применениями сферических оффсетов, проверок нахождения в сфере и ящике, трансформаций матриц и другое
  • Matrix3 - класс 3x3 матрицы с множеством разных конструкторов типа осей вращения и оператором перемножения
  • Matrix4 - класс 4x4 матрицы, он самый простой - с операторами сравнения и перемножения
  • Box - класс для работы с кубоидами, содержащий методы получения объёма, расширения, включения, пересечения с другими фигурами и др.
  • Sphere - класс для работы со сферами, содержащий методы получения объёма, включения, пересечения с другими фигурами и др.
  • Ray - класс для работы с лучами и получение точек пересечения с объектами
  • Camera - класс для хранения данных о камере и возможностью конвертировать оконные координаты и координаты сцены между собой
+ методы toGrid для построения фигур из сетки вершин
Может работать в режиме обычного объекта или в режиме WLPM модуля (определяется автоматически).

Установка

  • Копировать код из /src и использовать глобалку wGeometry
  • ИЛИ используя WLPM и import("wGeometry"):
wlpm install https://github.com/Indaxia/lua-wGeometry

Использование

  local Vector3 = wGeometry.Vector3
  local Matrix3 = wGeometry.Matrix3
  local Matrix4 = wGeometry.Matrix4
  local Box = wGeometry.Box 
  local Sphere = wGeometry.Sphere 
  local Ray = wGeometry.Ray
  local Camera = wGeometry.Camera
  
  local a = Vector3:new(1, -1, 1.1)
  local b = Vector3:new(-1, 1, -1.1)
  print(a + b)
  
  local c = Vector3:copyFromUnit(udg_unit1)
  local d = Vector3:copyFromUnit(udg_unit1)
  
  c:hermite(d, 0.5):applyToUnit(udg_unit1)
  
  
  local m1 = Matrix3:new(
    0.5, 1., 0.5, 
    0.8, 0.2, 0.7, 
    0.9, 1., 0.
  )
  local m2 = Matrix3:newIdentity()
  print(m1 * m2)
  
  
  local m3 = Matrix4:new(
    0.5, 1., 0.5, 
    0.8, 0.2, 0.7, 
    0.9, 1., 0.
  )
  print(m4)

  local b = Box:new(
    Vector3:new(2,2,2),
    Vector3:new(4,6,3)
  )
  print b.containsVector(a)
  
  local s = Sphere:new(Vector3:new(2,2,2), 100)
  local r = Ray:new(Vector3:new(2,2,2), Vector3:new(0.3,0.3,0.4))
  print (r.intersectsSphere(s))
  
  local cam = Camera:new()
  local win = Vector3:new(0.5, 0.5, 1)
  local world = cam:windowToWorld(win)
  local win2 = cam:worldToWindow(world)
  cam:applyCameraToPlayer(Player(0))
См исходный файл для получения детальной документации.
Отдельная благодарность фреймворку monogame и J за DGUI.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
9
4 года назад
Отредактирован Зелёный ёж
0
Bergi_Bear:
com23, я думаю фпс под просядет, или просто всё застрянет, надо пробовать
К десинхрону это может привести?(просадка по фпс)
0
23
4 года назад
0
com23, как это если он только у хоста меняется данные а клиенты лишь сихронизирует что о фпс не могут и быть речи. фас это кадр который отрисовали но ни как данные сихронизации
0
29
4 года назад
0
pro100master:
com23, как это если он только у хоста меняется данные а клиенты лишь сихронизирует что о фпс не могут и быть речи. фас это кадр который отрисовали но ни как данные сихронизации
Не разбираешься в том как работает сеть в вк3 - не пиши.
com23:
Bergi_Bear:
com23, я думаю фпс под просядет, или просто всё застрянет, надо пробовать
К десинхрону это может привести?(просадка по фпс)
Не должно, остальные будут ждать отстающего и лаги будут у всех.
0
23
4 года назад
0
Doc, а да я не разбираюсь ну да!

Doc, фпс ни как не влияет на сеть и запомни навсегда. фпс отвечает за отрисовку а остальное механика
0
37
4 года назад
0
com23, не рекомендую писать подобие графического движка на луа) это и не всякий компилируемый язык выдержит

Чтобы не плодить матрицы, я советую сделать мутабельный вариант функции умножения
3
29
4 года назад
Отредактирован Doc
3
pro100master:
Doc, а да я не разбираюсь ну да!

Doc, фпс ни как не влияет на сеть и запомни навсегда. фпс отвечает за отрисовку а остальное механика
Гений, если не шаришь, лучше промолчать, запомни навсегда. Читаем что такое локстеп и убавляем гонор. Если логический тик в игре начнет занимать больше времени логического фрейма 1/30 секунды, симуляция одного клиента начнет отставать и остальным придется его ждать, появится окно ожидания игрока. Так что ты да не разбираешься, ты да, ну да.
0
23
4 года назад
0
Doc, ну да ну да я не разбираюсь.... твоя мысль моя. Не надо сказочки придумывать! Если клиент не получает от хоста то его пытается реконектить а остальным оповешая что он опаздывает так как пакет до него не дошли ибо пакет улетел как в никуда для более точного сихронизации..... а ну да я же тупой зачем я сетевые пишу 15 лет и ботов варкрафта
0
37
4 года назад
0
Добавил примеры того, как это можно юзать более плавно и ближе к реальности.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.