// inverse vp view transform. For ray casting... only one view // inverse for now. Need better design if more are needed. func ivp(at *lin.T, xrot, scr *lin.Q, vm *lin.M4) *lin.M4 { rot := scr.Inv(at.Rot) vm.SetQ(rot) return vm.TranslateMT(at.Loc.X, at.Loc.Y, at.Loc.Z) }
// XZ_XY perspective to ortho view transform. // Can help transform a 3D map to a 2D overlay. func XZ_XY(at *lin.T, scr *lin.Q, vm *lin.M4) *lin.M4 { rot := scr.SetAa(1, 0, 0, -lin.Rad(90)) l := at.Loc return vm.SetQ(rot).ScaleMS(1, 1, 0).TranslateTM(-l.X, -l.Y, -l.Z) }