Добавлен ScorpioT1000,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Алгоритм
Версия Warcraft:
1.31+
Библиотека геометрии, реализованная на Lua в ООП формате.
Из вкусного:
- Functions - вспомогательные функции типа обрезки и вычисления разного вида интерполяций
- Vector3 - класс 3D вектора с перегруженными мат. операторами, поддержкой 3D конверсии из игровых структур и обратно, интерполяциями, применениями сферических оффсетов, проверок нахождения в сфере и ящике, трансформаций матриц и другое
- Matrix3 - класс 3x3 матрицы с множеством разных конструкторов типа осей вращения и оператором перемножения
- Matrix4 - класс 4x4 матрицы, он самый простой - с операторами сравнения и перемножения
- Box - класс для работы с кубоидами, содержащий методы получения объёма, расширения, включения, пересечения с другими фигурами и др.
- Sphere - класс для работы со сферами, содержащий методы получения объёма, включения, пересечения с другими фигурами и др.
- Ray - класс для работы с лучами и получение точек пересечения с объектами
- Camera - класс для хранения данных о камере и возможностью конвертировать оконные координаты и координаты сцены между собой
Может работать в режиме обычного объекта или в режиме WLPM модуля (определяется автоматически).
Установка
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))
См исходный файл для получения детальной документации.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ScorpioT1000
Новая версия - добавлен Bounding Box
Отредактирован ScorpioT1000
Новая версия 0.5
Отредактирован MpW
эх плюсанул. некоторые вещи понятны. А большая часть нет. Как-то не понятно. Наверное это для программистов, шарящих в такое. Эх векторы. это php и опенсурс вещи где их взять и чем их открыть. Если бы на наш язык перевести
Это бы заработало в массы народу если бы были практические применения в игре. Всякие примерные наработки.
Отредактирован ScorpioT1000
Референс как правильно, ещё пример, ещё один
Отредактирован ScorpioT1000
Отредактирован ScorpioT1000