2025-07-06 02:49:38 +01:00
|
|
|
structure Ndc =
|
|
|
|
|
struct
|
|
|
|
|
(* ndc = normalised device coordinates *)
|
2025-07-06 03:21:18 +01:00
|
|
|
|
2025-07-06 02:49:38 +01:00
|
|
|
fun ltrbToVertex (left, top, right, bottom) =
|
|
|
|
|
#[ left, bottom
|
|
|
|
|
, right, bottom
|
|
|
|
|
, left, top
|
|
|
|
|
|
|
|
|
|
, left, top
|
|
|
|
|
, right, bottom
|
|
|
|
|
, right, top
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
fun ltrbToVertexRgb (left, top, right, bottom, r, g, b) =
|
|
|
|
|
#[ left, bottom, r, g, b
|
|
|
|
|
, right, bottom, r, g, b
|
|
|
|
|
, left, top, r, g, b
|
|
|
|
|
|
|
|
|
|
, left, top, r, g, b
|
|
|
|
|
, right, bottom, r, g, b
|
|
|
|
|
, right, top, r, g, b
|
|
|
|
|
]
|
2025-07-06 03:21:18 +01:00
|
|
|
|
|
|
|
|
fun fromPixelX (xpos, windowWidth, windowHeight) =
|
|
|
|
|
let
|
2025-07-11 03:48:04 +01:00
|
|
|
val halfWidth = Real32.fromInt windowWidth / 2.0
|
2025-07-06 03:21:18 +01:00
|
|
|
val xpos = xpos - halfWidth
|
|
|
|
|
in
|
2025-07-11 03:48:04 +01:00
|
|
|
xpos / halfWidth
|
2025-07-06 03:21:18 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun fromPixelY (ypos, windowWidth, windowHeight) =
|
|
|
|
|
let
|
2025-07-11 03:48:04 +01:00
|
|
|
val halfHeight = Real32.fromInt windowHeight / 2.0
|
2025-07-06 03:21:18 +01:00
|
|
|
val ypos = ~(ypos - halfHeight)
|
|
|
|
|
in
|
2025-07-11 03:48:04 +01:00
|
|
|
ypos / halfHeight
|
2025-07-06 03:21:18 +01:00
|
|
|
end
|
2025-07-06 02:49:38 +01:00
|
|
|
end
|