forked from vv/efemra
1
0
Fork 0
efemra/src/math/quat.zig

30 lines
643 B
Zig

const Vec4f = @import("vec.zig").Vec4f;
pub const Quat = struct {
const Self = @This();
v: Vec4f,
pub inline fn mulDir(q: Self, dir: Vec4f) Vec4f {
const uv = q.v.cross3(dir);
const uuv = q.v.cross3(uv);
var y = uv.mulvs(q.v.w);
y = y.add(uuv);
y = y.mulvs(2);
y = y.add(dir);
return y;
}
pub inline fn fwd(q: Self) Vec4f {
const dir = Vec4f{ .x = 0, .y = 0, .z = -1, .w = 0 };
return q.mulDir(dir);
}
pub inline fn up(q: Self) Vec4f {
const dir = Vec4f{ .x = 0, .y = 1, .z = 0, .w = 0 };
return q.mulDir(dir);
}
};