diff --git a/src/rendering/rasterize.h b/src/rendering/rasterize.h new file mode 100644 index 0000000000000000000000000000000000000000..4269c626eb7c30177fc6d91884c11b4cc74a69d4 --- /dev/null +++ b/src/rendering/rasterize.h @@ -0,0 +1,52 @@ +#ifndef _RASTERIZE_H +#define _RASTERIZE_H + +#include "3x3matrix.h" +#include "2x2matrix.h" +#include "lcd.h" +#include <math.h> +#include <avr/pgmspace.h> +#include "ili934x.h" +#define TRANSPARENTCOLOR 63519 + +_2x1Matrix transpose_map(_3x3Matrix m1, _3x1Matrix m2); + +typedef struct { + _2x1Matrix p0, p1, p2; +} tri2d; + +typedef struct { + _2x1Matrix p0, p1, p2, p3; //This makes me sad to implement it this way, so please don't use invalid rectangles. +} rect2d; + +typedef struct { + _3x1Matrix p0, p1, p2; +} tri3d; + +typedef struct { + _3x1Matrix gr, anchor; +} plane3d; + +rectangle getXYBound2d(tri2d t); +rectangle getXYBound3d(tri3d t); +void affineRasterize(_2x2Matrix m, PGM_P imgdata, rectangle imgRegion, int16_t dispX, int16_t dispY); +void perspectiveRasterize(tri3d t, tri2d tuv, PGM_P imgdata, rectangle imgRegion); +void perspectiveRasterizeComposite(tri3d t, tri2d tuv, PGM_P imgdata, rectangle imgRegion, float composite); +void UVMapRasterize(tri3d t0, tri2d t1); + +rectangle getXYBound2dRect(rect2d t); +rectangle getXYBound3d(tri3d t); +float triSign (_2x1Matrix p0, _2x1Matrix p1, _2x1Matrix p2); +plane3d getPlane(tri3d t); +float getZ(float x, float y, plane3d p); +unsigned char inTriangle(float x, float y, tri2d); +tri2d transpose2dTri(tri2d t, _2x2Matrix m); +rect2d transpose2dRect(rect2d t, _2x2Matrix m); +tri3d transpose3dTri(tri3d t, _3x3Matrix m); +tri3d seperate(_3x3Matrix m); +_3x3Matrix combine2d(_2x1Matrix m1, _2x1Matrix m2, _2x1Matrix m3); +_2x1Matrix transpose_2x3(_3x3Matrix m1, _2x1Matrix m2); + +uint16_t maxInt(uint16_t v1, uint16_t v2); + +#endif //_RASTERIZE_H