forked from aya/aya
Initial commit
This commit is contained in:
158
engine/3d/src/LightingParameters.hpp
Normal file
158
engine/3d/src/LightingParameters.hpp
Normal file
@@ -0,0 +1,158 @@
|
||||
/**
|
||||
@file LightingParameters.h
|
||||
|
||||
@maintainer Morgan McGuire, matrix@graphics3d.com
|
||||
@created 2002-10-05
|
||||
@edited 2005-06-01
|
||||
|
||||
Copyright 2000-2005, Morgan McGuire.
|
||||
All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef G3D_LIGHTINGPARAMETERS_H
|
||||
#define G3D_LIGHTINGPARAMETERS_H
|
||||
|
||||
#include "platform.hpp"
|
||||
#include "Color3.hpp"
|
||||
#include "Vector3.hpp"
|
||||
#include "CoordinateFrame.hpp"
|
||||
#include "GLight.hpp"
|
||||
|
||||
namespace G3D
|
||||
{
|
||||
|
||||
#define BROWN_UNIVERSITY_LATITUDE 41.7333f
|
||||
#define BROWN_UNIVERSITY_LONGITUDE 71.4333f
|
||||
|
||||
/* Initital star offset on Jan 1 1970 midnight */
|
||||
/* Definition of a sidereal day */
|
||||
#define SIDEREAL_DAY ((23 * HOUR) + (56 * MINUTE) + (4.071f * SECOND))
|
||||
|
||||
/**
|
||||
Provides a reasonable (but not 100% physically correct) set of lighting
|
||||
parameters based on the time of day. See also G3D::Lighting, which describes
|
||||
a rich lighting environment.
|
||||
*/
|
||||
class LightingParameters
|
||||
{
|
||||
public:
|
||||
/** Multiply this by all emissive values when rendering.
|
||||
Some algorithms (e.g. contrib/ArticulatedModel/ToneMap) scale
|
||||
down light intensity to preserve dynamic range.*/
|
||||
Color3 emissiveScale;
|
||||
|
||||
/** Modulate sky box color */
|
||||
Color3 skyAmbient;
|
||||
|
||||
/**
|
||||
Use this for objects that do not receive directional lighting
|
||||
(e.g. billboards).
|
||||
*/
|
||||
Color3 diffuseAmbient;
|
||||
|
||||
/**
|
||||
Directional light color.
|
||||
*/
|
||||
Color3 lightColor;
|
||||
Color3 ambient;
|
||||
|
||||
/** Only one light source, the sun or moon, is active at a given time. */
|
||||
Vector3 lightDirection;
|
||||
enum
|
||||
{
|
||||
SUN,
|
||||
MOON
|
||||
} source;
|
||||
|
||||
/** Using physically correct parameters. When false, the sun and moon
|
||||
travel in a perfectly east-west arc where +x = east and -x = west. */
|
||||
bool physicallyCorrect;
|
||||
|
||||
/** The vector <B>to</B> the sun */
|
||||
Vector3 trueSunPosition;
|
||||
Vector3 sunPosition;
|
||||
|
||||
/** The vector <B>to</B> the moon */
|
||||
Vector3 trueMoonPosition;
|
||||
Vector3 moonPosition;
|
||||
double moonPhase;
|
||||
|
||||
/** The coordinate frame and vector related to the starfield */
|
||||
CoordinateFrame starFrame;
|
||||
CoordinateFrame trueStarFrame;
|
||||
Vector3 starVec;
|
||||
|
||||
/* Geographic position */
|
||||
float geoLatitude;
|
||||
// float geoLongitude;
|
||||
|
||||
Color3 skyAmbient2; // used for some cheap sky gradient (secondary, horizon-level color) -- Max
|
||||
|
||||
LightingParameters();
|
||||
|
||||
/**
|
||||
Sets light parameters for the sun/moon based on the
|
||||
specified time since midnight, as well as geographic
|
||||
latitude for starfield orientation (positive for north
|
||||
of the equator and negative for south) and geographic
|
||||
longitude for sun positioning (postive for east of
|
||||
Greenwich, and negative for west). The latitude and
|
||||
longitude is set by default to that of Providence, RI,
|
||||
USA.
|
||||
*/
|
||||
LightingParameters(const GameTime _time, bool _physicallyCorrect = true, float _latitude = BROWN_UNIVERSITY_LATITUDE);
|
||||
|
||||
void setTime(const GameTime _time);
|
||||
void setLatitude(float _latitude);
|
||||
|
||||
/**
|
||||
Returns a directional light composed from the light direction
|
||||
and color.
|
||||
*/
|
||||
GLight directionalLight() const;
|
||||
};
|
||||
|
||||
|
||||
/** A rich environment lighting model that contains both global and local sources.
|
||||
See also LightingParameters, a class that describes a sun and moon lighting
|
||||
model. */
|
||||
class Lighting
|
||||
{
|
||||
private:
|
||||
Lighting()
|
||||
: emissiveScale(Color3::white())
|
||||
{
|
||||
}
|
||||
|
||||
public:
|
||||
/** Multiply this by all emissive values when rendering.
|
||||
Some algorithms (e.g. contrib/ArticulatedModel/ToneMap) scale
|
||||
down light intensity to preserve dynamic range.*/
|
||||
Color3 emissiveScale;
|
||||
|
||||
/** Light reflected from the sky (usually slightly blue) */
|
||||
Color3 ambientTop;
|
||||
|
||||
/** Light reflected from the ground. A simpler code path is taken
|
||||
if identical to ambientTop. */
|
||||
Color3 ambientBottom;
|
||||
|
||||
/** Color to modulate environment map by */
|
||||
Color3 environmentMapColor;
|
||||
|
||||
/** Local illumination sources that do not cast shadows. */
|
||||
Array<GLight> lightArray;
|
||||
|
||||
/** Local illumination sources that cast shadows. */
|
||||
Array<GLight> shadowedLightArray;
|
||||
|
||||
/** Creates a (dark) environment. */
|
||||
static Lighting* create()
|
||||
{
|
||||
return new Lighting();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace G3D
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user