mirror of
https://github.com/leozide/leocad
synced 2025-01-14 08:01:45 +01:00
POVRay lights - lcLight
This commit is contained in:
parent
415354bfe8
commit
201d7e870c
2 changed files with 279 additions and 56 deletions
240
common/light.cpp
240
common/light.cpp
|
@ -50,6 +50,8 @@ void lcLight::Initialize(const lcVector3& Position, const lcVector3& TargetPosit
|
|||
{
|
||||
SetLightState(LightType);
|
||||
|
||||
mPOVRayLight = false;
|
||||
mShadowless = false;
|
||||
mEnableCutoff = false;
|
||||
mPosition = Position;
|
||||
mTargetPosition = TargetPosition;
|
||||
|
@ -57,15 +59,21 @@ void lcLight::Initialize(const lcVector3& Position, const lcVector3& TargetPosit
|
|||
mDiffuseColor = lcVector4(0.8f, 0.8f, 0.8f, 1.0f);
|
||||
mSpecularColor = lcVector4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
mAttenuation = lcVector3(1.0f, 0.0f, 0.0f);
|
||||
mLightColor = lcVector3(1.0f, 1.0f, 1.0f); //RGB - White
|
||||
mLightColor = lcVector3(1.0f, 1.0f, 1.0f); /*RGB - White*/
|
||||
mLightType = LightType ? LightType : int(LC_POINTLIGHT);
|
||||
mLightFactor[0] = LightType ? LightType == LC_SUNLIGHT ? 11.4f : 0.25f : 0.0f;
|
||||
mLightFactor[1] = LightType == LC_AREALIGHT ? 0.25f : LightType == LC_SPOTLIGHT ? 0.150f : 0.0f;
|
||||
mLightDiffuse = 1.0f;
|
||||
mLightSpecular = 1.0f;
|
||||
mSpotExponent = 10.0f;
|
||||
mPOVRayExponent = 1.0f;
|
||||
mSpotSize = 75.0f;
|
||||
mLightShape = 0 /*Square*/;
|
||||
mSpotCutoff = LightType ? LightType != LC_SUNLIGHT ? 40.0f : 0.0f : 30.0f;
|
||||
mSpotExponent = 10.0f; /*Energy/Power*/
|
||||
mSpotFalloff = 45.0f;
|
||||
mSpotTightness = 0;
|
||||
mAreaGrid = lcVector2(10.0f, 10.0f);
|
||||
mAreaSize = lcVector2(200.0f, 200.0f);
|
||||
mLightShape = LC_LIGHT_SHAPE_SQUARE;
|
||||
|
||||
mPositionKeys.ChangeKey(mPosition, 1, true);
|
||||
mTargetPositionKeys.ChangeKey(mTargetPosition, 1, true);
|
||||
|
@ -77,10 +85,14 @@ void lcLight::Initialize(const lcVector3& Position, const lcVector3& TargetPosit
|
|||
mLightColorKeys.ChangeKey(mLightColor, 1, true);
|
||||
mLightTypeKeys.ChangeKey(mLightType, 1, true);
|
||||
mLightFactorKeys.ChangeKey(mLightFactor, 1, true);
|
||||
mLightDiffuseKeys.ChangeKey(mLightDiffuse, 1, true);
|
||||
mLightSpecularKeys.ChangeKey(mLightSpecular, 1, true);
|
||||
mSpotCutoffKeys.ChangeKey(mSpotCutoff, 1, true);
|
||||
mSpotFalloffKeys.ChangeKey(mSpotFalloff, 1, true);
|
||||
mSpotExponentKeys.ChangeKey(mSpotExponent, 1, true);
|
||||
mLightSpotSizeKeys.ChangeKey(mSpotSize, 1, true);
|
||||
mSpotSizeKeys.ChangeKey(mSpotSize, 1, true);
|
||||
mSpotTightnessKeys.ChangeKey(mSpotTightness, 1, true);
|
||||
mAreaGridKeys.ChangeKey(mAreaGrid, 1, true);
|
||||
}
|
||||
|
||||
lcLight::~lcLight()
|
||||
|
@ -91,46 +103,66 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
|
|||
{
|
||||
const QLatin1String LineEnding("\r\n");
|
||||
|
||||
if (mPOVRayLight)
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT POV_RAY") << LineEnding;
|
||||
|
||||
if (mShadowless)
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT SHADOWLESS") << LineEnding;
|
||||
|
||||
if (mPositionKeys.GetSize() > 1)
|
||||
mPositionKeys.SaveKeysLDraw(Stream, "LIGHT POSITION_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT POSITION ") << mPosition[0] << ' ' << mPosition[1] << ' ' << mPosition[2] << LineEnding;
|
||||
|
||||
if (mLightType != LC_POINTLIGHT && !(mLightType == LC_AREALIGHT && mPOVRayLight))
|
||||
{
|
||||
if (mTargetPositionKeys.GetSize() > 1)
|
||||
mTargetPositionKeys.SaveKeysLDraw(Stream, "LIGHT TARGET_POSITION_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT TARGET_POSITION ") << mTargetPosition[0] << ' ' << mTargetPosition[1] << ' ' << mTargetPosition[2] << LineEnding;
|
||||
}
|
||||
|
||||
if (mLightColorKeys.GetSize() > 1)
|
||||
mLightColorKeys.SaveKeysLDraw(Stream, "LIGHT COLOR_RGB_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT COLOR_RGB ") << mLightColor[0] << ' ' << mLightColor[1] << ' ' << mLightColor[2] << LineEnding;
|
||||
|
||||
if (!mPOVRayLight)
|
||||
{
|
||||
if (mLightDiffuseKeys.GetSize() > 1)
|
||||
mLightDiffuseKeys.SaveKeysLDraw(Stream, "LIGHT DIFFUSE_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT DIFFUSE ") << mLightDiffuse << LineEnding;
|
||||
|
||||
if (mLightSpecularKeys.GetSize() > 1)
|
||||
mLightSpecularKeys.SaveKeysLDraw(Stream, "LIGHT SPECULAR_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT SPECULAR ") << mLightSpecular << LineEnding;
|
||||
}
|
||||
|
||||
if (mLightType == LC_SUNLIGHT)
|
||||
{
|
||||
if (mSpotExponentKeys.GetSize() > 1)
|
||||
mSpotExponentKeys.SaveKeysLDraw(Stream, "LIGHT STRENGTH_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT STRENGTH ") << mSpotExponent << LineEnding;
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT STRENGTH ") << (mPOVRayLight ? mPOVRayExponent : mSpotExponent) << LineEnding;
|
||||
|
||||
if (!mPOVRayLight)
|
||||
{
|
||||
if (mLightFactorKeys.GetSize() > 1)
|
||||
mLightFactorKeys.SaveKeysLDraw(Stream, "LIGHT ANGLE_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT ANGLE ") << mLightFactor[0] << LineEnding;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mSpotExponentKeys.GetSize() > 1)
|
||||
mSpotExponentKeys.SaveKeysLDraw(Stream, "LIGHT POWER_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT POWER ") << mSpotExponent << LineEnding;
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT POWER ") << (mPOVRayLight ? mPOVRayExponent : mSpotExponent) << LineEnding;
|
||||
|
||||
if (mEnableCutoff)
|
||||
if (mEnableCutoff && !mPOVRayLight)
|
||||
{
|
||||
if (mSpotCutoffKeys.GetSize() > 1)
|
||||
mSpotCutoffKeys.SaveKeysLDraw(Stream, "LIGHT CUTOFF_DISTANCE_KEY ");
|
||||
|
@ -141,34 +173,70 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
|
|||
switch (mLightType)
|
||||
{
|
||||
case LC_POINTLIGHT:
|
||||
if (!mPOVRayLight)
|
||||
{
|
||||
if (mLightFactorKeys.GetSize() > 1)
|
||||
mLightFactorKeys.SaveKeysLDraw(Stream, "LIGHT RADIUS_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT RADIUS ") << mLightFactor[0] << LineEnding;
|
||||
}
|
||||
break;
|
||||
case LC_SPOTLIGHT:
|
||||
if (mPOVRayLight)
|
||||
{
|
||||
if (mLightFactorKeys.GetSize() > 1)
|
||||
mLightFactorKeys.SaveKeysLDraw(Stream, "LIGHT RADIUS_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT RADIUS ") << (mSpotSize - mSpotFalloff) << LineEnding;
|
||||
if (mSpotFalloffKeys.GetSize() > 1)
|
||||
mSpotFalloffKeys.SaveKeysLDraw(Stream, "LIGHT SPOT_FALLOFF_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT SPOT_FALLOFF ") << mSpotFalloff << LineEnding;
|
||||
if (mSpotTightnessKeys.GetSize() > 1)
|
||||
mSpotTightnessKeys.SaveKeysLDraw(Stream, "SPOT_TIGHTNESS_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT SPOT_TIGHTNESS ") << mSpotTightness << LineEnding;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mSpotSizeKeys.GetSize() > 1)
|
||||
mSpotSizeKeys.SaveKeysLDraw(Stream, "LIGHT SPOT_SIZE_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT SPOT_SIZE ") << mSpotSize << LineEnding;
|
||||
|
||||
if (mLightFactorKeys.GetSize() > 1)
|
||||
mLightFactorKeys.SaveKeysLDraw(Stream, "LIGHT RADIUS_AND_SPOT_BLEND_KEY ");
|
||||
else
|
||||
{
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT RADIUS ") << (mPOVRayLight ? SpotRadius : mLightFactor[0]) << LineEnding;
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT RADIUS ") << mLightFactor[0] << LineEnding;
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT SPOT_BLEND ") << mLightFactor[1] << LineEnding;
|
||||
}
|
||||
if (mLightSpotSizeKeys.GetSize() > 1)
|
||||
mLightSpotSizeKeys.SaveKeysLDraw(Stream, "LIGHT SPOT_SIZE_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT SPOT_SIZE ") << mSpotSize << LineEnding;
|
||||
}
|
||||
break;
|
||||
case LC_AREALIGHT:
|
||||
if (mPOVRayLight)
|
||||
{
|
||||
if (mAreaGridKeys.GetSize() > 1)
|
||||
mAreaGridKeys.SaveKeysLDraw(Stream, "LIGHT AREA_GRID_KEY ");
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT AREA_ROWS ") << mAreaGrid[0] << QLatin1String(" AREA_COLUMNS ") << mAreaGrid[1] << LineEnding;
|
||||
}
|
||||
if (mLightFactorKeys.GetSize() > 1)
|
||||
mLightFactorKeys.SaveKeysLDraw(Stream, "LIGHT SIZE_KEY ");
|
||||
else
|
||||
{
|
||||
if (mLightShape == LC_LIGHT_SHAPE_RECTANGLE || mLightShape == LC_LIGHT_SHAPE_ELLIPSE)
|
||||
if (mPOVRayLight)
|
||||
{
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT WIDTH ") << mAreaSize[0] << QLatin1String(" HEIGHT ") << mAreaSize[1] << LineEnding;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mLightShape == LC_LIGHT_SHAPE_RECTANGLE || mLightShape == LC_LIGHT_SHAPE_ELLIPSE || mLightFactor[1] > 0)
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT WIDTH ") << mLightFactor[0] << QLatin1String(" HEIGHT ") << mLightFactor[1] << LineEnding;
|
||||
else
|
||||
Stream << QLatin1String("0 !LEOCAD LIGHT SIZE ") << mLightFactor[0] << LineEnding;
|
||||
}
|
||||
}
|
||||
if (mLightShapeKeys.GetSize() > 1)
|
||||
mLightShapeKeys.SaveKeysLDraw(Stream, "LIGHT SHAPE_KEY ");
|
||||
else
|
||||
|
@ -182,7 +250,7 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
|
|||
Shape = QLatin1String("Square ");
|
||||
break;
|
||||
case LC_LIGHT_SHAPE_DISK:
|
||||
Shape = QLatin1String("Disk ");
|
||||
Shape = mPOVRayLight ? QLatin1String("Circle ") : QLatin1String("Disk ");
|
||||
break;
|
||||
case LC_LIGHT_SHAPE_RECTANGLE:
|
||||
Shape = QLatin1String("Rectangle ");
|
||||
|
@ -278,11 +346,29 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
|
|||
mLightColorKeys.ChangeKey(mLightColor, 1, true);
|
||||
}
|
||||
else if (Token == QLatin1String("POWER") || Token == QLatin1String("STRENGTH"))
|
||||
{
|
||||
if (mPOVRayLight)
|
||||
{
|
||||
Stream >> mPOVRayExponent;
|
||||
mSpotExponentKeys.ChangeKey(mPOVRayExponent, 1, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Stream >> mSpotExponent;
|
||||
mSpotExponentKeys.ChangeKey(mSpotExponent, 1, true);
|
||||
}
|
||||
}
|
||||
else if (Token == QLatin1String("RADIUS") || Token == QLatin1String("SIZE") || Token == QLatin1String("WIDTH") || (mHeightSet = Token == QLatin1String("HEIGHT")) || (mSpotBlendSet = Token == QLatin1String("SPOT_BLEND")) || (mAngleSet = Token == QLatin1String("ANGLE")))
|
||||
{
|
||||
if (mPOVRayLight)
|
||||
{
|
||||
if (Token == QLatin1String("WIDTH"))
|
||||
Stream >> mAreaSize[0];
|
||||
else if (Token == QLatin1String("HEIGHT"))
|
||||
Stream >> mAreaSize[1];
|
||||
mLightFactorKeys.ChangeKey(mAreaSize, 1, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Token == QLatin1String("HEIGHT") || Token == QLatin1String("SPOT_BLEND"))
|
||||
Stream >> mLightFactor[1];
|
||||
|
@ -290,10 +376,35 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
|
|||
Stream >> mLightFactor[0];
|
||||
mLightFactorKeys.ChangeKey(mLightFactor, 1, true);
|
||||
}
|
||||
}
|
||||
else if (Token == QLatin1String("AREA_ROWS"))
|
||||
{
|
||||
mPOVRayLight = true;
|
||||
Stream >> mAreaGrid[0];
|
||||
mAreaGridKeys.ChangeKey(mAreaGrid, 1, true);
|
||||
}
|
||||
else if (Token == QLatin1String("AREA_COLUMNS"))
|
||||
{
|
||||
mPOVRayLight = true;
|
||||
Stream >> mAreaGrid[1];
|
||||
mAreaGridKeys.ChangeKey(mAreaGrid, 1, true);
|
||||
}
|
||||
else if (Token == QLatin1String("SPOT_FALLOFF"))
|
||||
{
|
||||
mPOVRayLight = true;
|
||||
Stream >> mSpotFalloff;
|
||||
mSpotFalloffKeys.ChangeKey(mSpotFalloff, 1, true);
|
||||
}
|
||||
else if (Token == QLatin1String("SPOT_TIGHTNESS"))
|
||||
{
|
||||
mPOVRayLight = true;
|
||||
Stream >> mSpotTightness;
|
||||
mSpotTightnessKeys.ChangeKey(mSpotTightness, 1, true);
|
||||
}
|
||||
else if (Token == QLatin1String("SPOT_SIZE"))
|
||||
{
|
||||
Stream >> mSpotSize;
|
||||
mLightSpotSizeKeys.ChangeKey(mSpotSize, 1, true);
|
||||
mSpotSizeKeys.ChangeKey(mSpotSize, 1, true);
|
||||
}
|
||||
else if (Token == QLatin1String("SHAPE"))
|
||||
{
|
||||
|
@ -310,6 +421,11 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
|
|||
mLightShape = LC_LIGHT_SHAPE_ELLIPSE;
|
||||
mLightShapeKeys.ChangeKey(mLightShape, 1, true);
|
||||
}
|
||||
else if (Token == QLatin1String("DIFFUSE"))
|
||||
{
|
||||
Stream >>mLightDiffuse;
|
||||
mLightDiffuseKeys.ChangeKey(mLightDiffuse, 1, true);
|
||||
}
|
||||
else if (Token == QLatin1String("SPECULAR"))
|
||||
{
|
||||
Stream >>mLightSpecular;
|
||||
|
@ -347,6 +463,14 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
|
|||
Stream >> mTargetPosition[0] >> mTargetPosition[1] >> mTargetPosition[2];
|
||||
mTargetPositionKeys.ChangeKey(mTargetPosition, 1, true);
|
||||
}
|
||||
else if (Token == QLatin1String("POV_RAY"))
|
||||
{
|
||||
mPOVRayLight = true;
|
||||
}
|
||||
else if (Token == QLatin1String("SHADOWLESS"))
|
||||
{
|
||||
mShadowless = true;
|
||||
}
|
||||
else if (Token == QLatin1String("COLOR_RGB_KEY"))
|
||||
mLightColorKeys.LoadKeysLDraw(Stream);
|
||||
else if ((Token == QLatin1String("POWER_KEY")) || (Token == QLatin1String("STRENGTH_KEY")))
|
||||
|
@ -354,9 +478,17 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
|
|||
else if ((Token == QLatin1String("ANGLE_KEY")) || (Token == QLatin1String("RADIUS_KEY")) || (Token == QLatin1String("SIZE_KEY")) || (Token == QLatin1String("RADIUS_AND_SPOT_BLEND_KEY")))
|
||||
mLightFactorKeys.LoadKeysLDraw(Stream);
|
||||
else if (Token == QLatin1String("SPOT_SIZE_KEY"))
|
||||
mLightSpotSizeKeys.LoadKeysLDraw(Stream);
|
||||
mSpotSizeKeys.LoadKeysLDraw(Stream);
|
||||
else if (Token == QLatin1String("SPOT_FALLOFF_KEY"))
|
||||
mSpotFalloffKeys.LoadKeysLDraw(Stream);
|
||||
else if (Token == QLatin1String("SPOT_TIGHTNESS_KEY"))
|
||||
mSpotTightnessKeys.LoadKeysLDraw(Stream);
|
||||
else if (Token == QLatin1String("AREA_GRID_KEY"))
|
||||
mAreaGridKeys.LoadKeysLDraw(Stream);
|
||||
else if (Token == QLatin1String("SHAPE_KEY"))
|
||||
mLightShapeKeys.LoadKeysLDraw(Stream);
|
||||
else if (Token == QLatin1String("DIFFUSE_KEY"))
|
||||
mLightDiffuseKeys.LoadKeysLDraw(Stream);
|
||||
else if (Token == QLatin1String("SPECULAR_KEY"))
|
||||
mLightSpecularKeys.LoadKeysLDraw(Stream);
|
||||
else if (Token == QLatin1String("CUTOFF_DISTANCE_KEY"))
|
||||
|
@ -439,20 +571,55 @@ void lcLight::UpdateLight(lcStep Step, lcLightProperties Props, int Property)
|
|||
mLightColorKeys.ChangeKey(mLightColor, Step, false);
|
||||
break;
|
||||
case LC_LIGHT_FACTOR:
|
||||
if (Props.mPOVRayLight && mLightType == LC_AREALIGHT)
|
||||
{
|
||||
mAreaSize = Props.mLightFactor;
|
||||
mLightFactorKeys.ChangeKey(mAreaSize, 1, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
mLightFactor = Props.mLightFactor;
|
||||
mLightFactorKeys.ChangeKey(mLightFactor, Step, false);
|
||||
mLightFactorKeys.ChangeKey(mLightFactor, 1, true);
|
||||
}
|
||||
break;
|
||||
case LC_LIGHT_DIFFUSE:
|
||||
mLightDiffuse = Props.mLightDiffuse;
|
||||
mLightDiffuseKeys.ChangeKey(mLightDiffuse, Step, false);
|
||||
break;
|
||||
case LC_LIGHT_SPECULAR:
|
||||
mLightSpecular = Props.mLightSpecular;
|
||||
mLightSpecularKeys.ChangeKey(mLightSpecular, Step, false);
|
||||
break;
|
||||
case LC_LIGHT_SHADOWLESS:
|
||||
mShadowless = Props.mShadowless;
|
||||
break;
|
||||
case LC_LIGHT_EXPONENT:
|
||||
if (Props.mPOVRayLight)
|
||||
{
|
||||
mPOVRayExponent = Props.mSpotExponent;
|
||||
mSpotExponentKeys.ChangeKey(mPOVRayExponent, Step, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
mSpotExponent = Props.mSpotExponent;
|
||||
mSpotExponentKeys.ChangeKey(mSpotExponent, Step, false);
|
||||
}
|
||||
break;
|
||||
case LC_LIGHT_AREA_GRID:
|
||||
mAreaGrid = Props.mAreaGrid;
|
||||
mAreaGridKeys.ChangeKey(mAreaGrid, Step, false);
|
||||
break;
|
||||
case LC_LIGHT_SPOT_SIZE:
|
||||
mSpotSize = Props.mSpotSize;
|
||||
mLightSpotSizeKeys.ChangeKey(mSpotSize, Step, false);
|
||||
mSpotSizeKeys.ChangeKey(mSpotSize, Step, false);
|
||||
break;
|
||||
case LC_LIGHT_SPOT_FALLOFF:
|
||||
mSpotFalloff = Props.mSpotFalloff;
|
||||
mSpotFalloffKeys.ChangeKey(mSpotFalloff, Step, false);
|
||||
break;
|
||||
case LC_LIGHT_SPOT_TIGHTNESS:
|
||||
mSpotTightness = Props.mSpotTightness;
|
||||
mSpotTightnessKeys.ChangeKey(mSpotTightness, Step, false);
|
||||
break;
|
||||
case LC_LIGHT_CUTOFF:
|
||||
mSpotCutoff = Props.mSpotCutoff;
|
||||
|
@ -461,6 +628,9 @@ void lcLight::UpdateLight(lcStep Step, lcLightProperties Props, int Property)
|
|||
case LC_LIGHT_USE_CUTOFF:
|
||||
mEnableCutoff = Props.mEnableCutoff;
|
||||
break;
|
||||
case LC_LIGHT_POVRAY:
|
||||
mPOVRayLight = Props.mPOVRayLight;
|
||||
break;
|
||||
}
|
||||
UpdatePosition(Step);
|
||||
}
|
||||
|
@ -591,10 +761,14 @@ void lcLight::InsertTime(lcStep Start, lcStep Time)
|
|||
mLightColorKeys.InsertTime(Start, Time);
|
||||
mLightTypeKeys.InsertTime(Start, Time);
|
||||
mLightFactorKeys.InsertTime(Start, Time);
|
||||
mLightDiffuseKeys.InsertTime(Start, Time);
|
||||
mLightSpecularKeys.InsertTime(Start, Time);
|
||||
mLightSpotSizeKeys.InsertTime(Start, Time);
|
||||
mSpotSizeKeys.InsertTime(Start, Time);
|
||||
mSpotCutoffKeys.InsertTime(Start, Time);
|
||||
mSpotExponentKeys.InsertTime(Start, Time);
|
||||
mSpotFalloffKeys.InsertTime(Start, Time);
|
||||
mSpotTightnessKeys.InsertTime(Start, Time);
|
||||
mAreaGridKeys.InsertTime(Start, Time);
|
||||
}
|
||||
|
||||
void lcLight::RemoveTime(lcStep Start, lcStep Time)
|
||||
|
@ -609,10 +783,14 @@ void lcLight::RemoveTime(lcStep Start, lcStep Time)
|
|||
mLightColorKeys.RemoveTime(Start, Time);
|
||||
mLightTypeKeys.RemoveTime(Start, Time);
|
||||
mLightFactorKeys.RemoveTime(Start, Time);
|
||||
mLightDiffuseKeys.RemoveTime(Start, Time);
|
||||
mLightSpecularKeys.RemoveTime(Start, Time);
|
||||
mLightSpotSizeKeys.RemoveTime(Start, Time);
|
||||
mSpotSizeKeys.RemoveTime(Start, Time);
|
||||
mSpotCutoffKeys.RemoveTime(Start, Time);
|
||||
mSpotExponentKeys.RemoveTime(Start, Time);
|
||||
mSpotFalloffKeys.RemoveTime(Start, Time);
|
||||
mSpotTightnessKeys.RemoveTime(Start, Time);
|
||||
mAreaGridKeys.RemoveTime(Start, Time);
|
||||
}
|
||||
|
||||
void lcLight::UpdatePosition(lcStep Step)
|
||||
|
@ -627,10 +805,14 @@ void lcLight::UpdatePosition(lcStep Step)
|
|||
mLightColor = mLightColorKeys.CalculateKey(Step);
|
||||
mLightType = mLightTypeKeys.CalculateKey(Step);
|
||||
mLightFactor = mLightFactorKeys.CalculateKey(Step);
|
||||
mLightDiffuse = mLightDiffuseKeys.CalculateKey(Step);
|
||||
mLightSpecular = mLightSpecularKeys.CalculateKey(Step);
|
||||
mSpotSize = mLightSpotSizeKeys.CalculateKey(Step);
|
||||
mSpotSize = mSpotSizeKeys.CalculateKey(Step);
|
||||
mSpotCutoff = mSpotCutoffKeys.CalculateKey(Step);
|
||||
mSpotExponent = mSpotExponentKeys.CalculateKey(Step);
|
||||
mSpotFalloff = mSpotFalloffKeys.CalculateKey(Step);
|
||||
mSpotTightness = mSpotTightnessKeys.CalculateKey(Step);
|
||||
mAreaGrid = mAreaGridKeys.CalculateKey(Step);
|
||||
|
||||
if (IsPointLight())
|
||||
{
|
||||
|
@ -1146,17 +1328,29 @@ void lcLight::RemoveKeyFrames()
|
|||
mLightTypeKeys.RemoveAll();
|
||||
mLightTypeKeys.ChangeKey(mLightType, 1, true);
|
||||
|
||||
mLightDiffuseKeys.RemoveAll();
|
||||
mLightDiffuseKeys.ChangeKey(mLightDiffuse, 1, true);
|
||||
|
||||
mLightSpecularKeys.RemoveAll();
|
||||
mLightSpecularKeys.ChangeKey(mLightSpecular, 1, true);
|
||||
|
||||
mLightSpotSizeKeys.RemoveAll();
|
||||
mLightSpotSizeKeys.ChangeKey(mSpotSize, 1, false);
|
||||
mSpotSizeKeys.RemoveAll();
|
||||
mSpotSizeKeys.ChangeKey(mSpotSize, 1, false);
|
||||
|
||||
mSpotCutoffKeys.RemoveAll();
|
||||
mSpotCutoffKeys.ChangeKey(mSpotCutoff, 1, true);
|
||||
|
||||
mSpotExponentKeys.RemoveAll();
|
||||
mSpotExponentKeys.ChangeKey(mSpotExponent, 1, true);
|
||||
|
||||
mSpotFalloffKeys.RemoveAll();
|
||||
mSpotFalloffKeys.ChangeKey(mSpotFalloff, 1, true);
|
||||
|
||||
mSpotTightnessKeys.RemoveAll();
|
||||
mSpotTightnessKeys.ChangeKey(mSpotTightness, 1, true);
|
||||
|
||||
mAreaGridKeys.RemoveAll();
|
||||
mAreaGridKeys.ChangeKey(mAreaGrid, 1, true);
|
||||
}
|
||||
|
||||
bool lcLight::Setup(int LightIndex)
|
||||
|
|
|
@ -45,22 +45,34 @@ enum lcLightProperty
|
|||
LC_LIGHT_COLOR,
|
||||
LC_LIGHT_TYPE,
|
||||
LC_LIGHT_FACTOR,
|
||||
LC_LIGHT_DIFFUSE,
|
||||
LC_LIGHT_SPECULAR,
|
||||
LC_LIGHT_SHADOWLESS,
|
||||
LC_LIGHT_EXPONENT,
|
||||
LC_LIGHT_AREA_GRID,
|
||||
LC_LIGHT_SPOT_SIZE,
|
||||
LC_LIGHT_SPOT_FALLOFF,
|
||||
LC_LIGHT_SPOT_TIGHTNESS,
|
||||
LC_LIGHT_CUTOFF,
|
||||
LC_LIGHT_USE_CUTOFF
|
||||
LC_LIGHT_USE_CUTOFF,
|
||||
LC_LIGHT_POVRAY
|
||||
};
|
||||
|
||||
struct lcLightProperties
|
||||
{
|
||||
lcVector3 mLightColor;
|
||||
lcVector2 mLightFactor;
|
||||
lcVector2 mAreaGrid;
|
||||
float mLightDiffuse;
|
||||
float mLightSpecular;
|
||||
float mSpotExponent;
|
||||
float mSpotCutoff;
|
||||
float mSpotFalloff;
|
||||
float mSpotTightness;
|
||||
float mSpotSize;
|
||||
bool mEnableCutoff;
|
||||
bool mShadowless;
|
||||
bool mPOVRayLight;
|
||||
int mLightShape;
|
||||
};
|
||||
|
||||
|
@ -251,16 +263,21 @@ public:
|
|||
lcLightProperties props;
|
||||
props.mLightColor = mLightColor;
|
||||
props.mLightFactor = mLightFactor;
|
||||
props.mLightDiffuse = mLightDiffuse;
|
||||
props.mLightSpecular = mLightSpecular;
|
||||
props.mSpotExponent = mSpotExponent;
|
||||
props.mSpotCutoff = mSpotCutoff;
|
||||
props.mSpotFalloff = mSpotFalloff;
|
||||
props.mSpotTightness = mSpotTightness;
|
||||
props.mSpotSize = mSpotSize;
|
||||
props.mPOVRayLight = mPOVRayLight;
|
||||
props.mEnableCutoff = mEnableCutoff;
|
||||
props.mShadowless = mShadowless;
|
||||
props.mAreaGrid = mAreaGrid;
|
||||
props.mLightShape = mLightShape;
|
||||
return props;
|
||||
}
|
||||
|
||||
// Temporary parameters
|
||||
lcMatrix44 mWorldLight;
|
||||
lcVector3 mPosition;
|
||||
lcVector3 mTargetPosition;
|
||||
|
@ -270,17 +287,25 @@ public:
|
|||
lcVector3 mAttenuation;
|
||||
lcVector3 mLightColor;
|
||||
lcVector2 mLightFactor;
|
||||
lcVector2 mAreaGrid;
|
||||
lcVector2 mAreaSize;
|
||||
bool mAngleSet;
|
||||
bool mSpotBlendSet;
|
||||
bool mSpotCutoffSet;
|
||||
bool mHeightSet;
|
||||
bool mEnableCutoff;
|
||||
bool mPOVRayLight;
|
||||
bool mShadowless;
|
||||
int mLightType;
|
||||
int mLightShape;
|
||||
float mLightDiffuse;
|
||||
float mLightSpecular;
|
||||
float mSpotSize;
|
||||
float mSpotCutoff;
|
||||
float mSpotFalloff;
|
||||
float mSpotTightness;
|
||||
float mSpotExponent;
|
||||
float mPOVRayExponent;
|
||||
QString mName;
|
||||
|
||||
protected:
|
||||
|
@ -292,12 +317,16 @@ protected:
|
|||
lcObjectKeyArray<lcVector3> mAttenuationKeys;
|
||||
lcObjectKeyArray<lcVector3> mLightColorKeys;
|
||||
lcObjectKeyArray<lcVector2> mLightFactorKeys;
|
||||
lcObjectKeyArray<lcVector2> mAreaGridKeys;
|
||||
lcObjectKeyArray<int> mLightTypeKeys;
|
||||
lcObjectKeyArray<int> mLightShapeKeys;
|
||||
lcObjectKeyArray<float> mLightSpecularKeys;
|
||||
lcObjectKeyArray<float> mLightSpotSizeKeys;
|
||||
lcObjectKeyArray<float> mLightDiffuseKeys;
|
||||
lcObjectKeyArray<float> mSpotSizeKeys;
|
||||
lcObjectKeyArray<float> mSpotCutoffKeys;
|
||||
lcObjectKeyArray<float> mSpotFalloffKeys;
|
||||
lcObjectKeyArray<float> mSpotExponentKeys;
|
||||
lcObjectKeyArray<float> mSpotTightnessKeys;
|
||||
|
||||
void Initialize(const lcVector3& Position, const lcVector3& TargetPosition, int LightType);
|
||||
|
||||
|
|
Loading…
Reference in a new issue