diff --git a/dotscape b/dotscape index 846eb78..2381b10 100755 Binary files a/dotscape and b/dotscape differ diff --git a/fcore/ndc.sml b/fcore/ndc.sml index 947fbb9..db73c5b 100644 --- a/fcore/ndc.sml +++ b/fcore/ndc.sml @@ -25,16 +25,14 @@ struct fun fromPixelX (xpos, windowWidth, windowHeight) = let val halfWidth = Real32.fromInt windowWidth / 2.0 - val xpos = xpos - halfWidth in - xpos / halfWidth + (xpos - halfWidth) / halfWidth end fun fromPixelY (ypos, windowWidth, windowHeight) = let val halfHeight = Real32.fromInt windowHeight / 2.0 - val ypos = ~(ypos - halfHeight) in - ypos / halfHeight + ~((ypos - halfHeight) / halfHeight) end end diff --git a/fcore/quad-tree.sml b/fcore/quad-tree.sml index 7aafc78..61b27ee 100644 --- a/fcore/quad-tree.sml +++ b/fcore/quad-tree.sml @@ -500,67 +500,55 @@ struct fun intToRealString num = let - val result = Real32.fromInt num - val result = Real32.toString result + val result = Real.fromInt num + val result = Real.toString result in if String.isSubstring "." result then result else result ^ ".0" end fun colToRealString col = let - val result = Real32.fromInt col / 255.0 - val result = Real32.toString result + val result = Real.fromInt col / 255.0 + val result = Real.toString result in if String.isSubstring "." result then result else result ^ ".0" end + fun makeXString x = + let val x = intToRealString x + in "xToNdc (xOffset, " ^ x ^ ", scale, halfWidth)" + end + + fun makeEndXString (startX, endX) = + let val endX = intToRealString endX + in "endXToNdc (xOffset, " ^ startX ^ ", " ^ endX ^ ", scale, halfWidth)" + end + + fun makeYString y = + let val y = intToRealString y + in "yToNdc (yOffset, " ^ y ^ ", scale, halfHeight)" + end + + fun makeEndYString (startY, endY) = + let val endY = intToRealString endY + in "endYToNdc (yOffset, " ^ startY ^ ", " ^ endY ^ ", scale, halfHeight)" + end + fun toExportStringFolder ({x, ex, y, ey, data = {r, g, b, a}}, acc) = let - val x = intToRealString x - val y = intToRealString y - val ex = intToRealString ex - val ey = intToRealString ey + val x = makeXString x + val y = makeYString y + val ex = makeEndXString (x, ex) + val ey = makeYString ey val r = colToRealString r val g = colToRealString g val b = colToRealString b - val x = String.concat ["(((x + ", x, ") - halfWidth) / halfWidth)"] - val y = String.concat ["((~(y + ", y, ") - halfHeight) / halfHeight)"] - - val ex = String.concat - [ "(((((" - , "(" - , ex - , "+ x)" - , " - " - , x - , ") " - , "* scale) + " - , x - , ") - halfWidth) / halfWidth)" - ] - - val ey = String.concat - [ "(" - , "(" - , "(" - , "(" - , "(" - , "(" - , ey - , "+ y)" - , " - " - , y - , ")" - , "* scale) + " - , y - , ") - halfHeight) / halfHeight)" - ] - in (* based on triangle order formed by `Ndc.ltrbToVertexRgb` function *) - x :: ey :: r :: g :: b :: ex :: ey :: r :: g :: b :: x :: y :: r :: g :: b - :: x :: y :: r :: g :: b :: ex :: ey :: r :: g :: b :: ex :: y :: r :: g - :: b :: acc + val item = String.concatWith ",\n" + [x, ey, ex, ey, x, y, x, y, ex, ey, ex, y] + in + item :: acc end fun toExportString (squares, canvasWidth, canvasHeight) = @@ -571,19 +559,35 @@ struct val coords = BinTree.foldr (toExportStringFolder, bintree, []) val coords = String.concatWith ",\n" coords - - val header = String.concat + in + String.concat [ "structure AAA = \nstruct\n" - , " fun lerp (x, y, scale, windowWidth, windowHeight) =\n" + + , " fun xToNdc (xOffset, xpos, scale, halfWidth) =\n" + , " ((xpos * scale + xOffset) - halfWidth) / halfWidth\n\n" + + , " fun endXToNdc (xOffset, startX, endX, scale, halfWidth) =\n" + , " (((endX - startX) * scale + xOffset) - halfWidth) / halfWidth\n\n" + + , " fun yToNdc (yOffset, ypos, scale, halfHeight) =\n" + , " ~(((ypos * scale + yOffset) - halfHeight) / halfHeight)\n\n" + + , " fun endYToNdc (yOffset, startY, endY, scale, halfHeight) =\n" + , " ~((((endY - startY) * scale + yOffset) - halfHeight) / halfHeight)\n\n" + + , " fun lerp (xOffset, yOffset, scale, windowWidth, windowHeight) =\n" , " let\n" - , " val halfWidth = Real32.fromInt windowWidth / 2.0\n" - , " val halfHeight = Real32.fromInt windowHeight / 2.0\n" + , " val windowWidth = Real32.fromInt windowWidth\n" + , " val halfWidth = windowWidth / 2.0\n" + , " val windowHeight = Real32.fromInt windowHeight\n" + , " val halfHeight = windowHeight / 2.0\n" , " in\n" , " #[\n" + , coords + , "\n" + , " ]\n" + , " end\n" + , "end\n" ] - - val footer = String.concat ["\n ]\n", " end\n", "end\n"] - in - String.concat [header, coords, footer] end end diff --git a/green.dsc b/green.dsc index 05c34d3..3b4c9d4 100644 --- a/green.dsc +++ b/green.dsc @@ -1 +1 @@ -4 4 { {0 0 1 0 0 0 0 1 } {1 0 1 1 0 0 0 1 } {2 1 2 4 0 0 0 1 } {2 3 3 4 0 0 0 1 } } \ No newline at end of file +50 50 { {0 0 4 4 0 0 0 1 } {0 45 4 50 0 0 0 1 } {45 0 49 4 0 0 0 1 } {45 45 49 50 0 0 0 1 } } diff --git a/green.sml b/green.sml new file mode 100644 index 0000000..f92b84f --- /dev/null +++ b/green.sml @@ -0,0 +1,73 @@ +structure AAA = +struct + fun xToNdc (xOffset, xpos, scale, halfWidth) = + ((xpos * scale + xOffset) - halfWidth) / halfWidth + + fun endXToNdc (xOffset, startX, endX, scale, halfWidth) = + (((endX - startX) * scale + xOffset) - halfWidth) / halfWidth + + fun yToNdc (yOffset, ypos, scale, halfHeight) = + ~(((ypos * scale + yOffset) - halfHeight) / halfHeight) + + fun endYToNdc (yOffset, startY, endY, scale, halfHeight) = + ~((((endY - startY) * scale + yOffset) - halfHeight) / halfHeight) + + fun lerp (xOffset, yOffset, scale, windowWidth, windowHeight) = + let + val windowWidth = Real32.fromInt windowWidth + val windowHeight = Real32.fromInt windowHeight + val halfWidth = windowWidth / 2.0 + val halfHeight = windowHeight / 2.0 + in + #[ +xToNdc (xOffset, 0.0, scale, halfWidth), +yToNdc (yOffset, 4.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth), +yToNdc (yOffset, 4.0, scale, halfHeight), +xToNdc (xOffset, 0.0, scale, halfWidth), +yToNdc (yOffset, 0.0, scale, halfHeight), +xToNdc (xOffset, 0.0, scale, halfWidth), +yToNdc (yOffset, 0.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth), +yToNdc (yOffset, 4.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth), +yToNdc (yOffset, 0.0, scale, halfHeight), +xToNdc (xOffset, 0.0, scale, halfWidth), +yToNdc (yOffset, 50.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth), +yToNdc (yOffset, 50.0, scale, halfHeight), +xToNdc (xOffset, 0.0, scale, halfWidth), +yToNdc (yOffset, 45.0, scale, halfHeight), +xToNdc (xOffset, 0.0, scale, halfWidth), +yToNdc (yOffset, 45.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth), +yToNdc (yOffset, 50.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 0.0, scale, halfWidth), 4.0, scale, halfWidth), +yToNdc (yOffset, 45.0, scale, halfHeight), +xToNdc (xOffset, 45.0, scale, halfWidth), +yToNdc (yOffset, 4.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth), +yToNdc (yOffset, 4.0, scale, halfHeight), +xToNdc (xOffset, 45.0, scale, halfWidth), +yToNdc (yOffset, 0.0, scale, halfHeight), +xToNdc (xOffset, 45.0, scale, halfWidth), +yToNdc (yOffset, 0.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth), +yToNdc (yOffset, 4.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth), +yToNdc (yOffset, 0.0, scale, halfHeight), +xToNdc (xOffset, 45.0, scale, halfWidth), +yToNdc (yOffset, 50.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth), +yToNdc (yOffset, 50.0, scale, halfHeight), +xToNdc (xOffset, 45.0, scale, halfWidth), +yToNdc (yOffset, 45.0, scale, halfHeight), +xToNdc (xOffset, 45.0, scale, halfWidth), +yToNdc (yOffset, 45.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth), +yToNdc (yOffset, 50.0, scale, halfHeight), +endXToNdc (xOffset, xToNdc (xOffset, 45.0, scale, halfWidth), 49.0, scale, halfWidth), +yToNdc (yOffset, 45.0, scale, halfHeight) + ] + end +end