summaryrefslogtreecommitdiff
path: root/tb/models/gfx_pineda.py
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-05-31 10:16:41 -0600
committerAlejandro Soto <alejandro@34project.org>2024-05-31 10:16:41 -0600
commit6d593bf16416b453ecb3aa4fdca5c4205febc9ce (patch)
tree4a83deb9c3eb04a53dcda344d64956b0d2e95e39 /tb/models/gfx_pineda.py
parent6476845b669146d7c4184af9c96081dd2a760ab4 (diff)
tb/models: fix triangle winding in gfx_pineda
Diffstat (limited to '')
-rw-r--r--tb/models/gfx_pineda.py6
1 files changed, 6 insertions, 0 deletions
diff --git a/tb/models/gfx_pineda.py b/tb/models/gfx_pineda.py
index 0e673d7..7f8ccd3 100644
--- a/tb/models/gfx_pineda.py
+++ b/tb/models/gfx_pineda.py
@@ -35,6 +35,12 @@ def edge_fn(p, q, sx, sy):
def raster(p0, p1, p2, msaa=True):
global fb
+ # https://math.stackexchange.com/questions/1324179/how-to-tell-if-3-connected-points-are-connected-clockwise-or-counter-clockwise
+ A = p1[0][0] * p0[0][1] + p2[0][0] * p1[0][1] + p0[0][0] * p2[0][1]
+ B = p0[0][0] * p1[0][1] + p1[0][0] * p2[0][1] + p2[0][0] * p0[0][1]
+ if A > B:
+ p1, p2 = p2, p1
+
minx, miny, maxx, maxy = bounding(p0, p1, p2)
sx, sy = minx // 16 * 16, miny // 16 * 16