anchor.diff:          height (r3 + r2) b >= 0.0 &&
           height (r3 - r2) b >= 0.0        
   
  +    let contains (point : V3d) (viewProj : Trafo3d) =
  +        let fw = viewProj.Forward
  +        let r0 = fw.R0
  +        let r1 = fw.R1
  +        let r2 = fw.R2
  +        let r3 = fw.R3
  +        let p = V4d(point, 1.0)
  +
  +        Vec.dot (r3 + r0) p >= 0.0 &&
  +        Vec.dot (r3 - r0) p >= 0.0 &&
  +        Vec.dot (r3 + r1) p >= 0.0 &&
  +        Vec.dot (r3 - r1) p >= 0.0 &&
  +        Vec.dot (r3 + r2) p >= 0.0 &&
  +        Vec.dot (r3 - r2) p >= 0.0       
  +
       let toHull3d (viewProj : Trafo3d) =
           let r0 = viewProj.Forward.R0
           let r1 = viewProj.Forward.R1
  
positive.code: open Aardvark.Base
  open System.Runtime.CompilerServices
  
  type CameraView private(sky : V3d, location : V3d, forward : V3d, up : V3d, right : V3d) =
      let viewTrafo = lazy ( Trafo3d.ViewTrafo(location, right, up, -forward) )
  
      member x.Sky = sky
  
negative.code: 
  
          Hull3d [|
              r3 + r0 |> toPlane  // left
              r3 - r0 |> toPlane  // right
              r3 + r1 |> toPlane  // bottom
              r3 - r1 |> toPlane  // top
              r3 + r2 |> toPlane  // near
              r3 - r2 |> toPlane  // far
          |]
  
      let inline toFastHull3d (viewProj : Trafo3d) =
          FastHull3d(toHull3d viewProj)
  
  
      let intersectsDX (b : Box3d) (viewProj : Trafo3d) =
          let fw = viewProj.Forward
  