You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

208 lines
6.0 KiB
Lua

local math3d = require "math3d"
local ref1 = math3d.ref()
ref1.m = {
s = 10,
r = {
axis = {1, 0, 0},
r = math.rad(60)
},
t = {1, 2, 3}
}
local ref2 = math3d.ref()
ref2.v = math3d.vector(1, 2, 3, 4)
print("ref1", ref1)
print("ref1 value", math3d.tostring(math3d.matrix(ref1)))
print(ref2)
print("ref2 value", math3d.tostring(math3d.vector(ref2)))
ref2.v = math3d.pack("dddd", 1, 2, 3, 4)
print(ref2)
ref2.v = math3d.vector(ref2, 1)
print("ref2", ref2)
for i = 1, 4 do
print("ref1 Line", i, math3d.tostring(ref1[i]))
end
for i = 1, 4 do
print("ref2 index", i, math3d.index(ref2, i))
end
print "===SRT==="
ref1.m = {
s = 1,
r = {0, math.rad(60), 0},
t = {1, 2, 3}
}
print(ref1)
local s, r, t = math3d.srt(ref1)
print("S = ", math3d.tostring(s))
print("R = ", math3d.tostring(r))
print("T = ", math3d.tostring(t))
local function print_srt()
print("S = ", math3d.tostring(ref1.s))
print("R = ", math3d.tostring(ref1.r))
print("T = ", math3d.tostring(ref1.t))
end
print_srt()
ref1.s = 1
print_srt()
ref1.s = {3, 2, 1}
print_srt()
print "===QUAT==="
local q = math3d.quaternion {0, math.rad(60, 0), 0}
print(math3d.tostring(q))
local ref3 = math3d.ref()
ref3.m = math3d.quaternion {
axis = {1, 0, 0},
r = math.rad(60)
} -- init mat with quat
print(ref3)
ref3.q = ref3 -- convert mat to quat
print(ref3)
print "===FUNC==="
print(ref2)
ref2.v = math3d.add(ref2, ref2, ref2)
print(ref2)
ref2.v = math3d.mul(ref2, 2.5)
print("length", ref2, "=", math3d.length(ref2))
print("floor", ref2, "=", math3d.tostring(math3d.floor(ref2)))
print("dot", ref2, ref2, "=", math3d.dot(ref2, ref2))
print("cross", ref2, ref2, "=", math3d.tostring(math3d.cross(ref2, ref2)))
local point = math3d.vector(1, 2, 3, 1)
print("transformH", ref1, point, "=", math3d.tostring(math3d.transformH(ref1, point)))
print("normalize", ref2, "=", math3d.tostring(math3d.normalize(ref2)))
print("normalize", ref3, "=", math3d.tostring(math3d.normalize(ref3)))
print("transpose", ref1, "=", math3d.tostring(math3d.transpose(ref1)))
print("inverse", ref1, "=", math3d.tostring(math3d.inverse(ref1)))
print("inverse", ref2, "=", math3d.tostring(math3d.inverse(ref2)))
print("inverse", ref3, "=", math3d.tostring(math3d.inverse(ref3)))
print("reciprocal", ref2, "=", math3d.tostring(math3d.reciprocal(ref2)))
print "===MULADD==="
do
local v1, v2 = math3d.vector(1, 2, 3, 0), math3d.vector(1, 0, 0, 0)
local p = math3d.vector(4, 1, 0, 1)
local r = math3d.muladd(v1, v2, p)
print("muladd:", math3d.tostring(v1), math3d.tostring(v2), math3d.tostring(p), "=", math3d.tostring(r))
end
print "===VIEW&PROJECTION MATRIX==="
do
local eyepos = math3d.vector {0, 5, -10}
local at = math3d.vector {0, 0, 0}
local direction = math3d.normalize(math3d.vector {1, 1, 1})
local updir = math3d.vector {0, 1, 0}
local mat1 = math3d.lookat(eyepos, at, updir)
local mat2 = math3d.lookto(eyepos, direction, updir)
print("lookat matrix:", math3d.tostring(mat1), "eyepos:", math3d.tostring(eyepos), "at:", math3d.tostring(at))
print("lookto matrix:", math3d.tostring(mat2), "eyepos:", math3d.tostring(eyepos), "direction:",
math3d.tostring(direction))
local frustum = {
l = -1,
r = 1,
t = -1,
b = 1,
n = 0.1,
f = 100
}
local perspective_mat = math3d.projmat(frustum)
local frustum_ortho = {
l = -1,
r = 1,
t = -1,
b = 1,
n = 0.1,
f = 100,
ortho = true
}
local ortho_mat = math3d.projmat(frustum_ortho)
print("perspective matrix:", math3d.tostring(perspective_mat))
print("ortho matrix:", math3d.tostring(ortho_mat))
end
print "===ROTATE VECTOR==="
do
local v = math3d.vector {1, 2, 1}
local qq = math3d.quaternion {
axis = math3d.vector {0, 1, 0},
r = math.pi * 0.5
}
local vv = math3d.transform(qq, v, 0)
print("rotate vector with quaternion", math3d.tostring(v), "=", math3d.tostring(vv))
local mat = math3d.matrix {
s = 1,
r = q,
t = math3d.vector {0, 0, 0, 1}
}
local vv2 = math3d.transform(mat, v, 0)
print("transform vector with matrix", math3d.tostring(v), "=", math3d.tostring(vv2))
local p = math3d.vector {1, 2, 1, 1}
local mat2 = math3d.matrix {
s = 1,
r = q,
t = math3d.vector {0, 0, 5, 1}
}
local r_p = math3d.transform(mat2, p, nil)
print("transform point with matrix", math3d.tostring(p), "=", math3d.tostring(r_p))
end
print "===construct coordinate from forward vector==="
do
local forward = math3d.normalize(math3d.vector {1, 1, 1})
local right, up = math3d.base_axes(forward)
print("forward:", math3d.tostring(forward), "right:", math3d.tostring(right), "up:", math3d.tostring(up))
end
print "===PROJ===="
local projmat = math3d.projmat {
fov = 90,
aspect = 1,
n = 1,
f = 1000
}
print("PROJ", math3d.tostring(projmat))
print "===ADAPTER==="
local adapter = require "math3d.adapter"
local testfunc = require "math3d.adapter.test"
local vector = adapter.vector(testfunc.vector, 1) -- convert arguments to vector pointer from 1
local matrix1 = adapter.matrix(testfunc.matrix1, 1, 1) -- convert 1 mat
local matrix2 = adapter.matrix(testfunc.matrix2, 1, 2) -- convert 2 mat
local matrix = adapter.matrix(testfunc.matrix2, 1) -- convert all mat
local var = adapter.variant(testfunc.vector, testfunc.matrix1, 1)
local format = adapter.format(testfunc.variant, testfunc.format, 2)
local mvq = adapter.getter(testfunc.getmvq, "mvq") -- getmvq will return matrix, vector, quat
local matrix2_v = adapter.format(testfunc.matrix2, "mm", 1)
local retvec = adapter.output_vector(testfunc.retvec, 1)
print(vector(ref2, math3d.vector {1, 2, 3}))
print(matrix1(ref1))
print(matrix2(ref1, ref1))
print(matrix2_v(ref1, ref1))
print(matrix(ref1, ref1))
print(var(ref1))
print(var(ref2))
print(format("mv", ref1, ref2))
local m, v, qv = mvq()
print(math3d.tostring(m), math3d.tostring(v), math3d.tostring(qv))
local v1, v2 = retvec()
print(math3d.tostring(v1), math3d.tostring(v2))