Added color to rasterized polygons

This commit is contained in:
Michaël Lemaire 2014-08-16 13:34:55 +02:00
parent bc34a2b823
commit b86669c5a0
5 changed files with 14 additions and 6 deletions

View file

@ -31,13 +31,15 @@ struct paysages::software::RenderScanlines
int right; int right;
}; };
Rasterizer::Rasterizer(SoftwareRenderer* renderer, int client_id): Rasterizer::Rasterizer(SoftwareRenderer* renderer, int client_id, const Color &color):
renderer(renderer), client_id(client_id) renderer(renderer), client_id(client_id)
{ {
this->color = new Color(color);
} }
Rasterizer::~Rasterizer() Rasterizer::~Rasterizer()
{ {
delete color;
} }
void Rasterizer::pushProjectedTriangle(CanvasPortion *canvas, const Vector3 &pixel1, const Vector3 &pixel2, const Vector3 &pixel3, const Vector3 &location1, const Vector3 &location2, const Vector3 &location3) void Rasterizer::pushProjectedTriangle(CanvasPortion *canvas, const Vector3 &pixel1, const Vector3 &pixel2, const Vector3 &pixel3, const Vector3 &location1, const Vector3 &location2, const Vector3 &location3)
@ -329,7 +331,12 @@ void Rasterizer::renderScanLines(CanvasPortion *canvas, RenderScanlines* scanlin
scanInterpolate(renderer->render_camera, &down, &diff, fy / dy, &current); scanInterpolate(renderer->render_camera, &down, &diff, fy / dy, &current);
CanvasFragment fragment(current.pixel.z, Vector3(current.location.x, current.location.y, current.location.z), current.client); CanvasFragment fragment(current.pixel.z, Vector3(current.location.x, current.location.y, current.location.z), current.client);
fragment.setColor((cury == starty || cury == endy) ? COLOR_GREY : COLOR_WHITE);
Color frag_color = *color;
if (cury == starty || cury == endy)
frag_color.mask(Color(0.0, 0.0, 0.0, 0.3));
fragment.setColor(frag_color);
canvas->pushFragment(current.x, current.y, fragment); canvas->pushFragment(current.x, current.y, fragment);
} }
} }

View file

@ -15,7 +15,7 @@ typedef struct RenderScanlines RenderScanlines;
class SOFTWARESHARED_EXPORT Rasterizer class SOFTWARESHARED_EXPORT Rasterizer
{ {
public: public:
Rasterizer(SoftwareRenderer *renderer, int client_id); Rasterizer(SoftwareRenderer *renderer, int client_id, const Color &color);
virtual ~Rasterizer(); virtual ~Rasterizer();
inline SoftwareRenderer *getRenderer() const {return renderer;} inline SoftwareRenderer *getRenderer() const {return renderer;}
@ -30,6 +30,7 @@ protected:
void pushDisplacedTriangle(CanvasPortion *canvas, const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, const Vector3 &ov1, const Vector3 &ov2, const Vector3 &ov3); void pushDisplacedTriangle(CanvasPortion *canvas, const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, const Vector3 &ov1, const Vector3 &ov2, const Vector3 &ov3);
void pushDisplacedQuad(CanvasPortion *canvas, const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, const Vector3 &v4, const Vector3 &ov1, const Vector3 &ov2, const Vector3 &ov3, const Vector3 &ov4); void pushDisplacedQuad(CanvasPortion *canvas, const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, const Vector3 &v4, const Vector3 &ov1, const Vector3 &ov2, const Vector3 &ov3, const Vector3 &ov4);
Color* color;
SoftwareRenderer *renderer; SoftwareRenderer *renderer;
int client_id; int client_id;

View file

@ -11,7 +11,7 @@
#define SPHERE_SIZE 20000.0 #define SPHERE_SIZE 20000.0
SkyRasterizer::SkyRasterizer(SoftwareRenderer* renderer, int client_id): SkyRasterizer::SkyRasterizer(SoftwareRenderer* renderer, int client_id):
Rasterizer(renderer, client_id) Rasterizer(renderer, client_id, Color(0.3, 0.7, 1.0))
{ {
} }

View file

@ -11,7 +11,7 @@
#include "CanvasPortion.h" #include "CanvasPortion.h"
TerrainRasterizer::TerrainRasterizer(SoftwareRenderer* renderer, int client_id): TerrainRasterizer::TerrainRasterizer(SoftwareRenderer* renderer, int client_id):
Rasterizer(renderer, client_id) Rasterizer(renderer, client_id, Color(0.5, 0.3, 0.3))
{ {
} }

View file

@ -5,7 +5,7 @@
#include "ParallelQueue.h" #include "ParallelQueue.h"
WaterRasterizer::WaterRasterizer(SoftwareRenderer* renderer, int client_id): WaterRasterizer::WaterRasterizer(SoftwareRenderer* renderer, int client_id):
Rasterizer(renderer, client_id) Rasterizer(renderer, client_id, Color(0.1, 0.3, 0.6))
{ {
} }