mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-19 04:50:29 +00:00
Add linalg.matrix4_look_at_from_fru
This commit is contained in:
@@ -2033,6 +2033,55 @@ matrix4_look_at :: proc{
|
||||
}
|
||||
|
||||
|
||||
matrix4_look_at_from_fru_f16 :: proc(eye, f, r, u: Vector3f16, flip_z_axis := true) -> (m: Matrix4f16) {
|
||||
f, s, u := f, r, u
|
||||
f = normalize(f)
|
||||
s = normalize(s)
|
||||
u = normalize(u)
|
||||
fe := dot(f, eye)
|
||||
|
||||
return {
|
||||
{+s.x, +u.x, -f.x, 0},
|
||||
{+s.y, +u.y, -f.y, 0},
|
||||
{+s.z, +u.z, -f.z, 0},
|
||||
{-dot(s, eye), -dot(u, eye), +fe if flip_z_axis else -fe, 1},
|
||||
}
|
||||
}
|
||||
matrix4_look_at_from_fru_f32 :: proc(eye, f, r, u: Vector3f32, flip_z_axis := true) -> (m: Matrix4f32) {
|
||||
f, s, u := f, r, u
|
||||
f = normalize(f)
|
||||
s = normalize(s)
|
||||
u = normalize(u)
|
||||
fe := dot(f, eye)
|
||||
|
||||
return {
|
||||
{+s.x, +u.x, -f.x, 0},
|
||||
{+s.y, +u.y, -f.y, 0},
|
||||
{+s.z, +u.z, -f.z, 0},
|
||||
{-dot(s, eye), -dot(u, eye), +fe if flip_z_axis else -fe, 1},
|
||||
}
|
||||
}
|
||||
matrix4_look_at_from_fru_f64 :: proc(eye, f, r, u: Vector3f64, flip_z_axis := true) -> (m: Matrix4f64) {
|
||||
f, s, u := f, r, u
|
||||
f = normalize(f)
|
||||
s = normalize(s)
|
||||
u = normalize(u)
|
||||
fe := dot(f, eye)
|
||||
|
||||
return {
|
||||
{+s.x, +u.x, -f.x, 0},
|
||||
{+s.y, +u.y, -f.y, 0},
|
||||
{+s.z, +u.z, -f.z, 0},
|
||||
{-dot(s, eye), -dot(u, eye), +fe if flip_z_axis else -fe, 1},
|
||||
}
|
||||
}
|
||||
matrix4_look_at_from_fru :: proc{
|
||||
matrix4_look_at_from_fru_f16,
|
||||
matrix4_look_at_from_fru_f32,
|
||||
matrix4_look_at_from_fru_f64,
|
||||
}
|
||||
|
||||
|
||||
matrix4_perspective_f16 :: proc(fovy, aspect, near, far: f16, flip_z_axis := true) -> (m: Matrix4f16) {
|
||||
tan_half_fovy := math.tan(0.5 * fovy)
|
||||
m[0][0] = 1 / (aspect*tan_half_fovy)
|
||||
|
||||
Reference in New Issue
Block a user