void SoftwareRendererImp::draw_rect( Rect& rect ) { Color c; // draw as two triangles float x = rect.position.x; float y = rect.position.y; float w = rect.dimension.x; float h = rect.dimension.y; Vector2D p0 = transform(Vector2D( x , y )); Vector2D p1 = transform(Vector2D( x + w , y )); Vector2D p2 = transform(Vector2D( x , y + h )); Vector2D p3 = transform(Vector2D( x + w , y + h )); // draw fill c = rect.style.fillColor; if (c.a != 0 ) { rasterize_triangle( p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, c ); rasterize_triangle( p2.x, p2.y, p1.x, p1.y, p3.x, p3.y, c ); } // draw outline c = rect.style.strokeColor; if( c.a != 0 ) { rasterize_line( p0.x, p0.y, p1.x, p1.y, c ); rasterize_line( p1.x, p1.y, p3.x, p3.y, c ); rasterize_line( p3.x, p3.y, p2.x, p2.y, c ); rasterize_line( p2.x, p2.y, p0.x, p0.y, c ); } }
void SoftwareRendererImp::draw_polygon(Polygon& polygon) { Color c; // draw fill c = polygon.style.fillColor; if (c.a != 0) { // triangulate vector < Vector2D > triangles; triangulate(polygon, triangles); // draw as triangles for (size_t i = 0; i < triangles.size(); i += 3) { Vector2D p0 = transform(triangles[i + 0]); Vector2D p1 = transform(triangles[i + 1]); Vector2D p2 = transform(triangles[i + 2]); rasterize_triangle(p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, c); } } // draw outline c = polygon.style.strokeColor; if (c.a != 0) { int nPoints = polygon.points.size(); for (int i = 0; i < nPoints; i++) { Vector2D p0 = transform(polygon.points[(i + 0) % nPoints]); Vector2D p1 = transform(polygon.points[(i + 1) % nPoints]); rasterize_line(p0.x, p0.y, p1.x, p1.y, c); } } }
void SoftwareRendererImp::draw_polygon( Polygon& polygon ) { Color c; std::cout << polygon.transform << std::endl; // draw fill c = polygon.style.fillColor; if( c.a != 0 ) { // triangulate vector<Vector2D> triangles; triangulate( polygon, triangles ); // draw as triangles for (size_t i = 0; i < triangles.size(); i += 3) { Vector2D p0 = transform(triangles[i + 0]); Vector2D p1 = transform(triangles[i + 1]); Vector2D p2 = transform(triangles[i + 2]); //for debug /* if (p0.x <= 400 && p0.y <= 200) { printf("upper left polygon: (%f, %f, %f, %f, %f, %f)\n", p0.x, p0.y, p1.x, p1.y, p2.x, p2.y); } */ rasterize_triangle( p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, c ); } } // draw outline c = polygon.style.strokeColor; if( c.a != 0 ) { int nPoints = polygon.points.size(); for( int i = 0; i < nPoints; i++ ) { Vector2D p0 = transform(polygon.points[(i+0) % nPoints]); Vector2D p1 = transform(polygon.points[(i+1) % nPoints]); rasterize_line( p0.x, p0.y, p1.x, p1.y, c ); } } }