packages feed

keid-core-0.1.0.0: src/Resource/Mesh/Utils.hs

module Resource.Mesh.Utils where

import RIO

import RIO.List.Partial (maximum)

import Geomancy (Transform, Vec4, vec4)
import Geomancy.Transform qualified as Transform

import Resource.Mesh.Types (AxisAligned(..), Measurements(..), middleAa, sizeAa)

aabbTranslate :: AxisAligned Measurements -> Transform
aabbTranslate measurements = Transform.translate aaX aaY aaZ
  where
    AxisAligned{..} = middleAa measurements

aabbScale :: AxisAligned Measurements -> Transform
aabbScale measurements = Transform.scale3 aaX aaY aaZ
  where
    AxisAligned{..} = sizeAa measurements

boundingSphere :: AxisAligned Measurements -> Vec4
boundingSphere measurements = vec4 aaX aaY aaZ radius
  where
    AxisAligned{..} = middleAa measurements
    radius = maximum (fmap mMax measurements)