paysages3d/src/tests/Rasterizer_Test.cpp
Michaël Lemaire 3fc8b1c98f Added automatic tessellation near camera frustum culling
This allows the camera nearer the ground
and fixes holes in lower quality renders
2015-10-08 19:20:44 +02:00

55 lines
1.5 KiB
C++

#include "BaseTestCase.h"
#include "Rasterizer.h"
#include "SoftwareRenderer.h"
#include "Scenery.h"
#include "Vector3.h"
#include "CameraDefinition.h"
#include "Color.h"
#include "CanvasPortion.h"
class FakeRasterizer: public Rasterizer
{
public:
FakeRasterizer(SoftwareRenderer *renderer): Rasterizer(renderer, NULL, 0, COLOR_WHITE)
{
}
virtual Color shadeFragment(const CanvasFragment &) const override
{
return COLOR_RED;
}
virtual int prepareRasterization() override
{
return 0;
}
virtual void rasterizeToCanvas(CanvasPortion *) override
{
}
};
TEST(Rasterizer, autoSplitNearFrustum)
{
Scenery scenery;
scenery.getCamera()->setLocation(Vector3(0.0, 5.0, 0.0));
scenery.getCamera()->setTarget(Vector3(0.0, 5.0, 1.0));
SoftwareRenderer renderer(&scenery);
FakeRasterizer rast(&renderer);
CanvasPortion portion;
portion.setSize(300, 300);
portion.preparePixels();
rast.pushTriangle(&portion, Vector3(0.0, 0.0, 8.0), Vector3(0.0, 0.0, 10.0), Vector3(2.0, 0.0, 8.0));
EXPECT_EQ(1, rast.getTriangleCount());
rast.resetTriangleCount();
rast.setAutoCutLimit(15.0);
rast.pushTriangle(&portion, Vector3(0.0, 0.0, 0.0), Vector3(-10.0, 0.0, 10.0), Vector3(10.0, 0.0, 10.0));
EXPECT_EQ(0, rast.getTriangleCount());
rast.resetTriangleCount();
rast.setAutoCutLimit(9.0);
rast.pushTriangle(&portion, Vector3(0.0, 0.0, 0.0), Vector3(-10.0, 0.0, 10.0), Vector3(10.0, 0.0, 10.0));
EXPECT_EQ(3, rast.getTriangleCount());
}