paysages3d/src/render/software/TerrainRenderer.h
Michaël Lemaire 9a096ec329 Merge branch 'master' into vegetation
Conflicts:
	src/basics/Disk.cpp
	src/basics/Disk.h
	src/basics/SpaceSegment.cpp
	src/definition/DefinitionNode.cpp
	src/definition/DefinitionNode.h
	src/definition/Scenery.cpp
	src/definition/Scenery.h
	src/definition/SurfaceMaterial.cpp
	src/definition/SurfaceMaterial.h
	src/definition/TextureLayerDefinition.cpp
	src/definition/definition_global.h
	src/interface/commandline/tests.cpp
	src/render/opengl/OpenGLRenderer.cpp
	src/render/software/SoftwareCanvasRenderer.cpp
	src/render/software/SoftwareCanvasRenderer.h
	src/render/software/SoftwareRenderer.h
	src/render/software/TerrainRasterizer.cpp
	src/render/software/TerrainRasterizer.h
	src/render/software/TerrainRenderer.h
	src/render/software/software_global.h
2015-11-09 22:38:00 +01:00

51 lines
1.4 KiB
C++

#ifndef TERRAINRENDERER_H
#define TERRAINRENDERER_H
#include "software_global.h"
#include "LightFilter.h"
#include "Vector3.h"
#include "Color.h"
namespace paysages {
namespace software {
class SOFTWARESHARED_EXPORT TerrainRenderer : public LightFilter {
public:
typedef struct {
Vector3 location;
Vector3 normal;
} TerrainResult;
public:
TerrainRenderer(SoftwareRenderer *parent);
virtual ~TerrainRenderer();
virtual void update();
void setQuality(bool quad_normals, double ray_precision, double shadow_precision);
void setQuality(double factor);
virtual RayCastingResult castRay(const Vector3 &start, const Vector3 &direction);
virtual double getHeight(double x, double z, bool with_painting, bool water_offset = true);
virtual TerrainResult getResult(double x, double z, bool with_painting, bool with_textures);
virtual Color getFinalColor(const Vector3 &location, double precision);
virtual bool applyLightFilter(LightComponent &light, const Vector3 &at) override;
/**
* Estimate a probable range of altitudes, given a rectangle area.
*/
void estimateMinMaxHeight(double x1, double z1, double x2, double z2, double *ymin, double *ymax);
private:
SoftwareRenderer *parent;
TerrainRayWalker *walker_ray;
TerrainRayWalker *walker_shadows;
bool quad_normals;
};
}
}
#endif // TERRAINRENDERER_H