// vf view transform implementation. func vf(v *view, vm *lin.M4) *lin.M4 { rot := v.q0.SetAa(1, 0, 0, lin.Rad(-v.up)) rot.Mult(rot, v.dir) return vm.SetQ(rot).TranslateTM(-v.loc.X, -v.loc.Y, -v.loc.Z) }
// xz_xy view transform implementation. func xz_xy(v *view, vm *lin.M4) *lin.M4 { rot := v.q0.SetAa(1, 0, 0, -lin.Rad(90)) return vm.SetQ(rot).ScaleMS(1, 1, 0).TranslateTM(-v.loc.X, -v.loc.Y, -v.loc.Z) }
// vp view transform implementation. func vp(v *view, vm *lin.M4) *lin.M4 { vm.SetQ(v.dir) return vm.TranslateTM(-v.loc.X, -v.loc.Y, -v.loc.Z) }