mirror of
https://git.coom.tech/drummyfish/small3dlib.git
synced 2024-11-21 20:39:57 +01:00
Rasterization looks correct
This commit is contained in:
parent
062bbcd4ce
commit
e081b9be74
2 changed files with 10 additions and 5 deletions
13
s3l.h
13
s3l.h
|
@ -734,8 +734,9 @@ void S3L_drawTriangle(
|
||||||
specifics of this algorithm are among others:
|
specifics of this algorithm are among others:
|
||||||
|
|
||||||
- drawing possibly a NON-CONTINUOUS line
|
- drawing possibly a NON-CONTINUOUS line
|
||||||
- NOT tracing the line exactly, but rather rasterizing on one (right)
|
- NOT tracing the line exactly, but rather rasterizing one the right
|
||||||
side of it, according to the pixel CENTERS
|
side of it, according to the pixel CENTERS, INCLUDING the pixel
|
||||||
|
centers
|
||||||
|
|
||||||
The principle is this:
|
The principle is this:
|
||||||
|
|
||||||
|
@ -756,6 +757,7 @@ void S3L_drawTriangle(
|
||||||
lDy, rDy, // dy (end point - start point)
|
lDy, rDy, // dy (end point - start point)
|
||||||
lInc, rInc, // direction in which to increment (1 or -1)
|
lInc, rInc, // direction in which to increment (1 or -1)
|
||||||
lErr, rErr, // current error (Bresenham)
|
lErr, rErr, // current error (Bresenham)
|
||||||
|
lErrCmp, rErrCmp, // helper for deciding comparison (> vs >=)
|
||||||
lErrAdd, rErrAdd, // error value to add in each Bresenham cycle
|
lErrAdd, rErrAdd, // error value to add in each Bresenham cycle
|
||||||
lErrSub, rErrSub; // error value to substract when moving in x direction
|
lErrSub, rErrSub; // error value to substract when moving in x direction
|
||||||
|
|
||||||
|
@ -782,13 +784,16 @@ void S3L_drawTriangle(
|
||||||
s##SideUnitStep *= -1;\
|
s##SideUnitStep *= -1;\
|
||||||
}\
|
}\
|
||||||
s##Inc = s##Dx >= 0 ? 1 : -1;\
|
s##Inc = s##Dx >= 0 ? 1 : -1;\
|
||||||
s##Err = (s##Dx < 0) ? 0 : s##Dy;\
|
if (s##Dx < 0)\
|
||||||
|
{s##Err = 0; s##ErrCmp = 0;}\
|
||||||
|
else\
|
||||||
|
{s##Err = s##Dy; s##ErrCmp = 1;}\
|
||||||
s##ErrAdd = S3L_abs(s##Dx);\
|
s##ErrAdd = S3L_abs(s##Dx);\
|
||||||
s##ErrSub = s##Dy != 0 ? s##Dy : 1; /* don't allow 0, could lead to an
|
s##ErrSub = s##Dy != 0 ? s##Dy : 1; /* don't allow 0, could lead to an
|
||||||
infinite substracting loop */
|
infinite substracting loop */
|
||||||
|
|
||||||
#define stepSide(s)\
|
#define stepSide(s)\
|
||||||
while (s##Err > s##Dy)\
|
while (s##Err - s##Dy >= s##ErrCmp)\
|
||||||
{\
|
{\
|
||||||
s##X += s##Inc;\
|
s##X += s##Inc;\
|
||||||
s##Err -= s##ErrSub;\
|
s##Err -= s##ErrSub;\
|
||||||
|
|
2
test.c
2
test.c
|
@ -289,7 +289,7 @@ uint16_t testRasterization()
|
||||||
dt(12,12,12);
|
dt(12,12,12);
|
||||||
dt(9,10,10);
|
dt(9,10,10);
|
||||||
dt(1,10,10);
|
dt(1,10,10);
|
||||||
// dt(9,6,1);
|
dt(9,6,1);
|
||||||
dt(0,6,10);
|
dt(0,6,10);
|
||||||
|
|
||||||
#undef dt
|
#undef dt
|
||||||
|
|
Loading…
Reference in a new issue