2013-12-01 18:24:53 +00:00
|
|
|
#ifndef CLOUDSRENDERER_H
|
|
|
|
#define CLOUDSRENDERER_H
|
|
|
|
|
|
|
|
#include "software_global.h"
|
|
|
|
|
2013-12-17 22:45:09 +00:00
|
|
|
#include "LightFilter.h"
|
|
|
|
|
2015-11-18 18:37:00 +00:00
|
|
|
#include <vector>
|
|
|
|
|
2013-12-01 18:24:53 +00:00
|
|
|
namespace paysages {
|
|
|
|
namespace software {
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Software renderer of a group of cloud layers.
|
|
|
|
*/
|
2015-11-09 21:30:46 +00:00
|
|
|
class SOFTWARESHARED_EXPORT CloudsRenderer : public LightFilter {
|
|
|
|
public:
|
|
|
|
CloudsRenderer(SoftwareRenderer *parent);
|
2013-12-01 18:24:53 +00:00
|
|
|
virtual ~CloudsRenderer();
|
|
|
|
|
2015-09-13 16:58:11 +00:00
|
|
|
/**
|
|
|
|
* Set the quality factor (0.0-1.0) for clouds rendering.
|
|
|
|
*/
|
|
|
|
void setQuality(double factor);
|
|
|
|
|
2015-08-19 17:28:36 +00:00
|
|
|
/**
|
|
|
|
* Enable or disable the whole cloud rendering.
|
|
|
|
*/
|
|
|
|
void setEnabled(bool enabled);
|
|
|
|
|
2013-12-01 18:24:53 +00:00
|
|
|
/*!
|
2013-12-04 21:52:18 +00:00
|
|
|
* \brief Update the renderer with the bound scenery.
|
|
|
|
*
|
|
|
|
* Don't call this if another thread is currently using this renderer.
|
2013-12-01 18:24:53 +00:00
|
|
|
*/
|
2013-12-17 22:45:09 +00:00
|
|
|
virtual void update();
|
2013-12-01 18:24:53 +00:00
|
|
|
|
|
|
|
/*!
|
2013-12-04 21:52:18 +00:00
|
|
|
* \brief Get the layer renderer for a given layer.
|
2013-12-01 18:24:53 +00:00
|
|
|
*
|
|
|
|
* The returned renderer is managed by this object and should not be deleted.
|
|
|
|
*/
|
2015-11-09 21:30:46 +00:00
|
|
|
virtual BaseCloudLayerRenderer *getLayerRenderer(unsigned int layer);
|
2013-12-01 18:24:53 +00:00
|
|
|
|
|
|
|
/*!
|
2013-12-04 21:52:18 +00:00
|
|
|
* \brief Get the cloud model for a given layer.
|
|
|
|
*
|
|
|
|
* The returned model is managed by this object and should not be deleted.
|
|
|
|
*/
|
2015-11-09 21:30:46 +00:00
|
|
|
virtual BaseCloudsModel *getLayerModel(unsigned int layer);
|
2013-12-04 21:52:18 +00:00
|
|
|
|
2013-12-20 16:30:27 +00:00
|
|
|
/*!
|
|
|
|
* \brief Override de default density model for a given layer.
|
|
|
|
*
|
|
|
|
* This must be called after each update().
|
|
|
|
* Ownership of the model is taken.
|
|
|
|
*/
|
2015-11-09 21:30:46 +00:00
|
|
|
virtual void setLayerModel(unsigned int layer, BaseCloudsModel *model, bool delete_old = true);
|
2013-12-20 16:30:27 +00:00
|
|
|
|
2013-12-04 21:52:18 +00:00
|
|
|
/*!
|
|
|
|
* \brief Get the composited color, as applied on a base color and location.
|
2013-12-01 18:24:53 +00:00
|
|
|
*/
|
|
|
|
virtual Color getColor(const Vector3 &eye, const Vector3 &location, const Color &base);
|
|
|
|
|
|
|
|
/*!
|
2013-12-04 21:52:18 +00:00
|
|
|
* \brief Alter a light, as if passed through all layers.
|
2013-12-01 18:24:53 +00:00
|
|
|
*
|
|
|
|
* Return true if the light was altered.
|
|
|
|
*/
|
2013-12-17 22:45:09 +00:00
|
|
|
virtual bool applyLightFilter(LightComponent &light, const Vector3 &at) override;
|
2015-09-29 20:31:25 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the highest altitude of all layers.
|
|
|
|
*/
|
|
|
|
double getHighestAltitude();
|
2015-11-09 21:30:46 +00:00
|
|
|
|
|
|
|
private:
|
2015-09-13 16:58:11 +00:00
|
|
|
double quality;
|
|
|
|
|
2015-08-19 17:28:36 +00:00
|
|
|
bool enabled;
|
2015-11-09 21:30:46 +00:00
|
|
|
SoftwareRenderer *parent;
|
2013-12-04 21:52:18 +00:00
|
|
|
|
2015-12-10 23:36:50 +00:00
|
|
|
vector<BaseCloudLayerRenderer *> layer_renderers;
|
2015-11-09 21:30:46 +00:00
|
|
|
BaseCloudLayerRenderer *fake_renderer;
|
2013-12-04 21:52:18 +00:00
|
|
|
|
2015-12-10 23:36:50 +00:00
|
|
|
vector<BaseCloudsModel *> layer_models;
|
2015-11-09 21:30:46 +00:00
|
|
|
BaseCloudsModel *fake_model;
|
2013-12-01 18:24:53 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // CLOUDSRENDERER_H
|