std::vector<Point> Line::points() { std::vector<Point> pts; lineBresenham(m_start.xInt(), m_start.yInt(), m_end.xInt(), m_end.yInt(), pts); return pts; }
color* integerInt(vertex* sP, vertex* eP, int x, int y) { color* res = (color*)malloc(sizeof(color)); if (sP->x > eP->x) { vertex* tmp = eP; eP = sP; sP = tmp; } int spx = sP->x; int epx = eP->x; int spy = sP->y; int epy = sP->y; int dx = epx - spx; int dy = epy - spy; // If the triangle has a rise > run, // then interpolate on Y to get a nicer interpolation if (dy > dx) { // TODO make it interpolate on y instead of x if (sP->y > eP->y) { vertex* tmp = eP; eP = sP; sP = tmp; } int spy = sP->y; int epy = sP->y; res->red = (GLubyte)lineBresenham(spy, epy, y, sP->v_color.red, eP->v_color.red); res->green = (GLubyte)lineBresenham(spy, epy, y, sP->v_color.green, eP->v_color.green); res->blue = (GLubyte)lineBresenham(spy, epy, y, sP->v_color.blue, eP->v_color.blue); } else { res->red = (GLubyte)lineBresenham(spx, epx, x, sP->v_color.red, eP->v_color.red); res->green = (GLubyte)lineBresenham(spx, epx, x, sP->v_color.green, eP->v_color.green); res->blue = (GLubyte)lineBresenham(spx, epx, x, sP->v_color.blue, eP->v_color.blue); } //printf("(%d, %d, %d)\n", res->red, res->green , res->blue); return res; }