There should be a simpler way to do this without scanning pixels on the screen.
Let me think ...
Here, try this:
See source to examine method I am using or
To load this cart in Pico-8 in immediate mode type,
And I'm certain there's an even simpler way to do this, especially for those who have posted 3D games in the past.
Well, I get by with a little help from my friends. You know the tune ? :)
It is the truth, however. Years ago someone showed me how to draw a line from x1,y1 to x2,y2. And the code I wrote HERE:
Makes use of that.
So I gave it some thought and wondered what would happen if I drew a line for all the vertices from x2,y2 to x3,y3 using a ramp of x1,y1 ?
And it works ! Well, sorta ... It leaves little holes if the thickness of the line drawn is just 1 is why I overlap it with x+1 beside it.
Here now, this is something we can all find useful. Fully documented code showing how to draw a line between two points both x1,y1 and x2,y2.
Here is the source-code instead of loading it up if you choose.
-- simple draw line with dots -- written by dw817 (10-27-22) -- start a loop repeat -- clear screen cls() -- choose integer x1-coordinate x1=rnd(128)\1 -- choose integer y1-coordinate y1=rnd(116)\1+12 -- choose integer x2-coordinate x2=rnd(128)\1 -- choose integer y2-coordinate y2=rnd(116)\1+12 -- Show them as red and blue -- dots pset(x1,y1,8) pset(x2,y2,12) -- visually show the coords for -- the starting point ?"1=("..x1..","..y1..")",0,0,6 -- visually show the coords for -- the ending point ?"2=("..x2..","..y2..")" -- get distance of x-points distx=x1-x2 -- get distance of y-points disty=y1-y2 -- get abs distance of x-points absdistx=abs(distx) -- get abs distance of y-points absdisty=abs(disty) -- pick the biggest absolute -- distance of both points=max(1,max(absdistx,absdisty)) -- calculate the slope for x slopex=distx/points -- calculate the slope for y slopey=disty/points -- set our plotter x to x1 drawx=x1 -- set our plotter y to y1 drawy=y1 -- loop to draw dots for i=0,points do -- draw dot only if it is not -- the first one so our red -- pixel will still appear if i>0 then pset(drawx,drawy,13) end -- next point for drawx plot drawx=drawx-slopex -- next point for drawy plot drawy=drawy-slopey -- give a tiny pause to see flip() -- end of our drawing loop end -- loop forever until forever
@dw817 That's smart and much efficient than my code 😁
Thank you, @PotatoImaginator. Yet I know there are some other Piconians that could run rings around both of us.
I wish they would appear and post some truly genius compact triangle-drawing sourcecode we could both understand and learn from.
Actually drawing a filled POLYGON would be even better.
@dw817 I actually tried that and failed 😅
I bookmarked https://www.lexaloffle.com/bbs/?tid=31478 a while back. Maybe it'll help.
I've never got round to drawing triangles in anger yet.
[Please log in to post a comment]