65 lines
1.5 KiB
Plaintext
65 lines
1.5 KiB
Plaintext
sqrtf :: #foreign (value: F32): F32
|
|
|
|
Vec2I :: struct;; x: S64; y: S64
|
|
Vec2 :: struct;; x: F32; y: F32
|
|
Vec3 :: struct;; x: F32; y: F32; z: F32
|
|
|
|
Vec3_Length :: (a: Vec3): F32
|
|
result := sqrtf(a.x*a.x + a.y*a.y + a.z*a.z)
|
|
return result
|
|
|
|
Vec3_Cross :: (a: Vec3, b: Vec3): Vec3
|
|
result := Vec3{
|
|
a.y * b.z - a.z * b.y,
|
|
a.z * b.x - a.x * b.z,
|
|
a.x * b.y - a.y * b.x,
|
|
}
|
|
return result
|
|
|
|
Vec3_Normalize :: (a: Vec3): Vec3
|
|
length := Vec3_Length(a)
|
|
result := Vec3{
|
|
a.x / length,
|
|
a.y / length,
|
|
a.z / length,
|
|
}
|
|
return result
|
|
|
|
Vec3_ConvertToARGB :: (a: Vec3): U32
|
|
a.x = F32_Clamp(0, a.x, 1)
|
|
a.y = F32_Clamp(0, a.y, 1)
|
|
a.z = F32_Clamp(0, a.z, 1)
|
|
r := (a.x * 255)->U32 << 16
|
|
g := (a.y * 255)->U32 << 8
|
|
b := (a.z * 255)->U32 << 0
|
|
result := r | g | b
|
|
return result
|
|
|
|
Vec3_Dot :: (a: Vec3, b: Vec3): F32
|
|
result := a.x*b.x + a.y*b.y + a.z*b.z
|
|
return result
|
|
Vec3_Mul :: (a: Vec3, b: Vec3): Vec3
|
|
result := Vec3{a.x*b.x, a.y*b.y, a.z*b.z}
|
|
return result
|
|
Vec3_MulF32 :: (a: Vec3, b: F32): Vec3
|
|
result := Vec3{a.x*b, a.y*b, a.z*b}
|
|
return result
|
|
Vec3_Add :: (a: Vec3, b: Vec3): Vec3
|
|
result := Vec3{a.x+b.x, a.y+b.y, a.z+b.z}
|
|
return result
|
|
Vec3_Div :: (a: Vec3, b: Vec3): Vec3
|
|
result := Vec3{a.x/b.x, a.y/b.y, a.z/b.z}
|
|
return result
|
|
Vec3_Sub :: (a: Vec3, b: Vec3): Vec3
|
|
result := Vec3{a.x-b.x, a.y-b.y, a.z-b.z}
|
|
return result
|
|
|
|
F32_Clamp :: (min: F32, value: F32, max: F32): F32
|
|
if value > max;; return max
|
|
if value < min;; return min
|
|
return value
|
|
|
|
F32_Absolute :: (val: F32): F32
|
|
if val < 0;; return -val
|
|
return val
|