30 lines
643 B
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);
|
|
}
|
|
};
|