Split light size into different variables per type.

This commit is contained in:
Leonardo Zide
2024-04-07 12:48:41 -07:00
parent 5d5274b2b4
commit 3528817d22
10 changed files with 206 additions and 117 deletions
+12 -12
View File
@@ -647,9 +647,9 @@ QVariant lcCamera::GetPropertyValue(lcObjectPropertyId PropertyId) const
case lcObjectPropertyId::LightCastShadow:
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
@@ -711,9 +711,9 @@ bool lcCamera::SetPropertyValue(lcObjectPropertyId PropertyId, lcStep Step, bool
case lcObjectPropertyId::LightCastShadow:
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
@@ -774,9 +774,9 @@ bool lcCamera::HasKeyFrame(lcObjectPropertyId PropertyId, lcStep Time) const
case lcObjectPropertyId::LightCastShadow:
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
@@ -837,9 +837,9 @@ bool lcCamera::SetKeyFrame(lcObjectPropertyId PropertyId, lcStep Time, bool KeyF
case lcObjectPropertyId::LightCastShadow:
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
+33 -3
View File
@@ -3180,12 +3180,42 @@ void lcModel::SetSpotLightPOVRayTightness(lcLight* Light, float Tightness)
UpdateAllViews();
}
void lcModel::SetLightSize(lcLight* Light, lcVector2 LightAreaSize)
void lcModel::SetLightPointBlenderRadius(lcLight* Light, float Radius)
{
Light->SetSize(LightAreaSize, mCurrentStep, gMainWindow->GetAddKeys());
Light->SetPointBlenderRadius(Radius, mCurrentStep, gMainWindow->GetAddKeys());
Light->UpdatePosition(mCurrentStep);
SaveCheckpoint(tr("Changing Light Size"));
SaveCheckpoint(tr("Changing Point Light Blender Radius"));
gMainWindow->UpdateSelectedObjects(false);
UpdateAllViews();
}
void lcModel::SetLightSpotBlenderRadius(lcLight* Light, float Radius)
{
Light->SetSpotBlenderRadius(Radius, mCurrentStep, gMainWindow->GetAddKeys());
Light->UpdatePosition(mCurrentStep);
SaveCheckpoint(tr("Changing Light Spot Light Blender Radius"));
gMainWindow->UpdateSelectedObjects(false);
UpdateAllViews();
}
void lcModel::SetLightDirectionalBlenderAngle(lcLight* Light, float Angle)
{
Light->SetDirectionalBlenderAngle(Angle, mCurrentStep, gMainWindow->GetAddKeys());
Light->UpdatePosition(mCurrentStep);
SaveCheckpoint(tr("Changing Directional Light Blender Angle"));
gMainWindow->UpdateSelectedObjects(false);
UpdateAllViews();
}
void lcModel::SetLightAreaSize(lcLight* Light, lcVector2 LightAreaSize)
{
Light->SetAreaSize(LightAreaSize, mCurrentStep, gMainWindow->GetAddKeys());
Light->UpdatePosition(mCurrentStep);
SaveCheckpoint(tr("Changing Light Area Size"));
gMainWindow->UpdateSelectedObjects(false);
UpdateAllViews();
}
+4 -1
View File
@@ -376,7 +376,10 @@ public:
void SetSpotLightConeAngle(lcLight* Light, float Angle);
void SetSpotLightPenumbraAngle(lcLight* Light, float Angle);
void SetSpotLightPOVRayTightness(lcLight* Light, float Tightness);
void SetLightSize(lcLight* Light, lcVector2 LightAreaSize);
void SetLightPointBlenderRadius(lcLight* Light, float Radius);
void SetLightSpotBlenderRadius(lcLight* Light, float Radius);
void SetLightDirectionalBlenderAngle(lcLight* Light, float Angle);
void SetLightAreaSize(lcLight* Light, lcVector2 LightAreaSize);
void SetLightBlenderPower(lcLight* Light, float Power);
void SetLightPOVRayPower(lcLight* Light, float Power);
+3 -3
View File
@@ -30,9 +30,9 @@ enum class lcObjectPropertyId
LightCastShadow,
LightPOVRayFadeDistance,
LightPOVRayFadePower,
LightPointSize,
LightSpotSize,
LightDirectionalSize,
LightPointBlenderRadius,
LightSpotBlenderRadius,
LightDirectionalBlenderAngle,
LightAreaSize,
LightAreaSizeX,
LightAreaSizeY,
+35 -19
View File
@@ -388,19 +388,31 @@ void lcPropertiesWidget::FloatChanged()
{
Model->SetLightPOVRayFadePower(Light, Value);
}
else if (PropertyId == lcObjectPropertyId::LightPointSize || PropertyId == lcObjectPropertyId::LightSpotSize || PropertyId == lcObjectPropertyId::LightDirectionalSize || PropertyId == lcObjectPropertyId::LightAreaSizeX)
else if (PropertyId == lcObjectPropertyId::LightPointBlenderRadius)
{
lcVector2 LightSize = Light->GetSize();
Model->SetLightPointBlenderRadius(Light, Value);
}
else if (PropertyId == lcObjectPropertyId::LightSpotBlenderRadius)
{
Model->SetLightSpotBlenderRadius(Light, Value);
}
else if (PropertyId == lcObjectPropertyId::LightDirectionalBlenderAngle)
{
Model->SetLightDirectionalBlenderAngle(Light, Value);
}
else if (PropertyId == lcObjectPropertyId::LightAreaSizeX)
{
lcVector2 LightSize = Light->GetAreaSize();
LightSize[0] = Value;
Model->SetLightSize(Light, LightSize);
Model->SetLightAreaSize(Light, LightSize);
}
else if (PropertyId == lcObjectPropertyId::LightAreaSizeY)
{
lcVector2 LightSize = Light->GetSize();
lcVector2 LightSize = Light->GetAreaSize();
LightSize[1] = Value;
Model->SetLightSize(Light, LightSize);
Model->SetLightAreaSize(Light, LightSize);
}
else if (PropertyId == lcObjectPropertyId::LightSpotConeAngle)
{
@@ -1043,14 +1055,14 @@ void lcPropertiesWidget::CreateWidgets()
AddSpacing();
AddFloatProperty(lcObjectPropertyId::LightPointSize, tr("Radius"), tr("Shadow soft size (Blender only)"), true, 0.0f, FLT_MAX);
AddFloatProperty(lcObjectPropertyId::LightPointBlenderRadius, tr("Radius"), tr("Shadow soft size (Blender only)"), true, 0.0f, FLT_MAX);
AddFloatProperty(lcObjectPropertyId::LightSpotSize, tr("Radius"), tr("Shadow soft size (Blender only)"), true, 0.0f, FLT_MAX);
AddFloatProperty(lcObjectPropertyId::LightSpotBlenderRadius, tr("Radius"), tr("Shadow soft size (Blender only)"), true, 0.0f, FLT_MAX);
AddFloatProperty(lcObjectPropertyId::LightSpotConeAngle, tr("Spot Cone Angle"), tr("Angle in degrees of the spot light's beam"), true, 0.0f, 179.9f);
AddFloatProperty(lcObjectPropertyId::LightSpotPenumbraAngle, tr("Spot Penumbra Angle"), tr("Angle in degrees over which the intensity of the spot light falls off to zero"), true, 0.0f, 179.9f);
AddFloatProperty(lcObjectPropertyId::LightSpotPOVRayTightness, tr("Spot Tightness"), tr("Additional exponential spot light edge softening (POV-Ray only)"), true, 0.0f, FLT_MAX);
AddFloatProperty(lcObjectPropertyId::LightDirectionalSize, tr("Angle"), tr("Angular diameter of the light (Blender only)"), true, 0.0f, 180.0f);
AddFloatProperty(lcObjectPropertyId::LightDirectionalBlenderAngle, tr("Angle"), tr("Angular diameter of the light (Blender only)"), true, 0.0f, 180.0f);
AddStringListProperty(lcObjectPropertyId::LightAreaShape, tr("Area Shape"), tr("The shape of the area light"), false, lcLight::GetAreaShapeStrings());
AddFloatProperty(lcObjectPropertyId::LightAreaSizeX, tr("Size X"), tr("The width of the area light"), true, 0.0f, FLT_MAX);
@@ -1262,7 +1274,8 @@ void lcPropertiesWidget::SetLight(const lcArray<lcObject*>& Selection, lcObject*
lcLightType LightType = lcLightType::Count;
lcLightAreaShape LightAreaShape = lcLightAreaShape::Count;
lcVector2 LightSize(0.0f, 0.0f);
float PointBlenderRadius = 0.0f, SpotBlenderRadius = 0.0f, DirectionalBlenderAngle = 0.0f;
lcVector2 AreaSize(0.0f, 0.0f);
float BlenderPower = 0.0f, POVRayPower = 0.0f;
float FadeDistance = 0.0f;
float FadePower = 0.0f;
@@ -1284,7 +1297,10 @@ void lcPropertiesWidget::SetLight(const lcArray<lcObject*>& Selection, lcObject*
SpotConeAngle = Light->GetSpotConeAngle();
SpotPenumbraAngle = Light->GetSpotPenumbraAngle();
SpotTightness = Light->GetSpotPOVRayTightness();
LightSize = Light->GetSize();
PointBlenderRadius = Light->GetPointBlenderRadius();
SpotBlenderRadius = Light->GetSpotBlenderRadius();
DirectionalBlenderAngle = Light->GetDirectionalBlenderAngle();
AreaSize = Light->GetAreaSize();
}
else
{
@@ -1333,30 +1349,30 @@ void lcPropertiesWidget::SetLight(const lcArray<lcObject*>& Selection, lcObject*
UpdateFloat(lcObjectPropertyId::LightPOVRayFadePower, FadePower);
const bool IsPointLight = (LightType == lcLightType::Point);
SetPropertyVisible(lcObjectPropertyId::LightPointSize, IsPointLight);
SetPropertyVisible(lcObjectPropertyId::LightPointBlenderRadius, IsPointLight);
if (IsPointLight)
UpdateFloat(lcObjectPropertyId::LightPointSize, LightSize.x);
UpdateFloat(lcObjectPropertyId::LightPointBlenderRadius, PointBlenderRadius);
const bool IsSpotLight = (LightType == lcLightType::Spot);
SetPropertyVisible(lcObjectPropertyId::LightSpotSize, IsSpotLight);
SetPropertyVisible(lcObjectPropertyId::LightSpotBlenderRadius, IsSpotLight);
SetPropertyVisible(lcObjectPropertyId::LightSpotConeAngle, IsSpotLight);
SetPropertyVisible(lcObjectPropertyId::LightSpotPenumbraAngle, IsSpotLight);
SetPropertyVisible(lcObjectPropertyId::LightSpotPOVRayTightness, IsSpotLight);
if (IsSpotLight)
{
UpdateFloat(lcObjectPropertyId::LightSpotSize, LightSize.x);
UpdateFloat(lcObjectPropertyId::LightSpotBlenderRadius, SpotBlenderRadius);
UpdateFloat(lcObjectPropertyId::LightSpotConeAngle, SpotConeAngle);
UpdateFloat(lcObjectPropertyId::LightSpotPenumbraAngle, SpotPenumbraAngle);
UpdateFloat(lcObjectPropertyId::LightSpotPOVRayTightness, SpotTightness);
}
const bool IsDirectionalLight = (LightType == lcLightType::Directional);
SetPropertyVisible(lcObjectPropertyId::LightDirectionalSize, IsDirectionalLight);
SetPropertyVisible(lcObjectPropertyId::LightDirectionalBlenderAngle, IsDirectionalLight);
if (IsDirectionalLight)
UpdateFloat(lcObjectPropertyId::LightDirectionalSize, LightSize.x);
UpdateFloat(lcObjectPropertyId::LightDirectionalBlenderAngle, DirectionalBlenderAngle);
const bool IsAreaLight = (LightType == lcLightType::Area);
SetPropertyVisible(lcObjectPropertyId::LightAreaShape, IsAreaLight);
@@ -1372,9 +1388,9 @@ void lcPropertiesWidget::SetLight(const lcArray<lcObject*>& Selection, lcObject*
if (IsAreaLight)
{
UpdateStringList(lcObjectPropertyId::LightAreaShape);
UpdateFloat(lcObjectPropertyId::LightAreaSize, LightSize.x);
UpdateFloat(lcObjectPropertyId::LightAreaSizeX, LightSize.x);
UpdateFloat(lcObjectPropertyId::LightAreaSizeY, LightSize.y);
UpdateFloat(lcObjectPropertyId::LightAreaSize, AreaSize.x);
UpdateFloat(lcObjectPropertyId::LightAreaSizeX, AreaSize.x);
UpdateFloat(lcObjectPropertyId::LightAreaSizeY, AreaSize.y);
UpdateInteger(lcObjectPropertyId::LightAreaPOVRayGridX);
UpdateInteger(lcObjectPropertyId::LightAreaPOVRayGridY);
}
+74 -56
View File
@@ -25,37 +25,9 @@ lcLight::lcLight(const lcVector3& Position, lcLightType LightType)
{
mPosition.SetValue(Position);
UpdateLightType();
UpdatePosition(1);
}
void lcLight::UpdateLightType()
{
lcVector2 Size(0.0f, 0.0f);
switch (mLightType)
{
case lcLightType::Point:
case lcLightType::Spot:
break;
case lcLightType::Directional:
Size = lcVector2(0.00918f * LC_DTOR, 0.0f);
break;
case lcLightType::Area:
Size = lcVector2(200.0f, 200.0f);
break;
case lcLightType::Count:
break;
}
mSize.RemoveAllKeys();
mSize.SetValue(Size);
}
QString lcLight::GetLightTypeString(lcLightType LightType)
{
switch (LightType)
@@ -132,7 +104,10 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
mPosition.Save(Stream, "LIGHT", "POSITION", true);
mRotation.Save(Stream, "LIGHT", "ROTATION", true);
mColor.Save(Stream, "LIGHT", "COLOR", true);
mSize.Save(Stream, "LIGHT", "SIZE", true);
mPointBlenderRadius.Save(Stream, "LIGHT", "BLENDER_POINT_RADIUS", true);
mSpotBlenderRadius.Save(Stream, "LIGHT", "BLENDER_SPOT_RADIUS", true);
mDirectionalBlenderAngle.Save(Stream, "LIGHT", "BLENDER_DIRECTIONAL_ANGLE", true);
mAreaSize.Save(Stream, "LIGHT", "AREA_SIZE", true);
mBlenderPower.Save(Stream, "LIGHT", "BLENDER_POWER", true);
mPOVRayPower.Save(Stream, "LIGHT", "POVRAY_POWER", true);
mPOVRayFadeDistance.Save(Stream, "LIGHT", "POVRAY_FADE_DISTANCE", true);
@@ -237,7 +212,13 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
continue;
else if (mColor.Load(Stream, Token, "COLOR"))
continue;
else if (mSize.Load(Stream, Token, "SIZE"))
else if (mPointBlenderRadius.Load(Stream, Token, "BLENDER_POINT_RADIUS"))
continue;
else if (mSpotBlenderRadius.Load(Stream, Token, "BLENDER_SPOT_RADIUS"))
continue;
else if (mDirectionalBlenderAngle.Load(Stream, Token, "BLENDER_DIRECTIONAL_ANGLE"))
continue;
else if (mAreaSize.Load(Stream, Token, "AREA_SIZE"))
continue;
else if (mBlenderPower.Load(Stream, Token, "BLENDER_POWER"))
continue;
@@ -353,7 +334,7 @@ void lcLight::RayTest(lcObjectRayTest& ObjectRayTest) const
float x = lcDot(IntersectionDirection, XAxis);
float y = lcDot(IntersectionDirection, YAxis);
const lcVector2& Size = mSize;
const lcVector2& Size = mAreaSize;
if (fabsf(x) < Size.x / 2.0f && fabsf(y) < Size.y / 2.0f)
{
@@ -507,8 +488,6 @@ bool lcLight::SetLightType(lcLightType LightType)
mLightType = LightType;
UpdateLightType();
return true;
}
@@ -563,12 +542,27 @@ bool lcLight::SetAreaPOVRayGrid(lcVector2i AreaGrid, lcStep Step, bool AddKey)
return true;
}
void lcLight::SetSize(lcVector2 Size, lcStep Step, bool AddKey)
void lcLight::SetPointBlenderRadius(float Radius, lcStep Step, bool AddKey)
{
if (mLightType == lcLightType::Area && (mAreaShape == lcLightAreaShape::Square || mAreaShape == lcLightAreaShape::Disk))
mPointBlenderRadius.ChangeKey(Radius, Step, AddKey);
}
void lcLight::SetSpotBlenderRadius(float Radius, lcStep Step, bool AddKey)
{
mSpotBlenderRadius.ChangeKey(Radius, Step, AddKey);
}
void lcLight::SetDirectionalBlenderAngle(float Angle, lcStep Step, bool AddKey)
{
mDirectionalBlenderAngle.ChangeKey(Angle, Step, AddKey);
}
void lcLight::SetAreaSize(lcVector2 Size, lcStep Step, bool AddKey)
{
if (mAreaShape == lcLightAreaShape::Square || mAreaShape == lcLightAreaShape::Disk)
Size[1] = Size[0];
mSize.ChangeKey(Size, Step, AddKey);
mAreaSize.ChangeKey(Size, Step, AddKey);
}
void lcLight::SetBlenderPower(float Power, lcStep Step, bool AddKey)
@@ -601,7 +595,10 @@ void lcLight::InsertTime(lcStep Start, lcStep Time)
mSpotPenumbraAngle.InsertTime(Start, Time);
mSpotPOVRayTightness.InsertTime(Start, Time);
mAreaPOVRayGrid.InsertTime(Start, Time);
mSize.InsertTime(Start, Time);
mPointBlenderRadius.InsertTime(Start, Time);
mSpotBlenderRadius.InsertTime(Start, Time);
mDirectionalBlenderAngle.InsertTime(Start, Time);
mAreaSize.InsertTime(Start, Time);
mBlenderPower.InsertTime(Start, Time);
mPOVRayPower.InsertTime(Start, Time);
mPOVRayFadeDistance.InsertTime(Start, Time);
@@ -617,7 +614,10 @@ void lcLight::RemoveTime(lcStep Start, lcStep Time)
mSpotPenumbraAngle.RemoveTime(Start, Time);
mSpotPOVRayTightness.RemoveTime(Start, Time);
mAreaPOVRayGrid.RemoveTime(Start, Time);
mSize.RemoveTime(Start, Time);
mPointBlenderRadius.RemoveTime(Start, Time);
mSpotBlenderRadius.RemoveTime(Start, Time);
mDirectionalBlenderAngle.RemoveTime(Start, Time);
mAreaSize.RemoveTime(Start, Time);
mBlenderPower.RemoveTime(Start, Time);
mPOVRayPower.RemoveTime(Start, Time);
mPOVRayFadeDistance.RemoveTime(Start, Time);
@@ -633,7 +633,10 @@ void lcLight::UpdatePosition(lcStep Step)
mSpotPenumbraAngle.Update(Step);
mSpotPOVRayTightness.Update(Step);
mAreaPOVRayGrid.Update(Step);
mSize.Update(Step);
mPointBlenderRadius.Update(Step);
mSpotBlenderRadius.Update(Step);
mDirectionalBlenderAngle.Update(Step);
mAreaSize.Update(Step);
mBlenderPower.Update(Step);
mPOVRayPower.Update(Step);
mPOVRayFadeDistance.Update(Step);
@@ -744,7 +747,7 @@ void lcLight::DrawAreaLight(lcContext* Context) const
{
float Verts[4 * 3];
float* CurVert = Verts;
const lcVector2& Size = mSize;
const lcVector2& Size = mAreaSize;
*CurVert++ = -Size.x / 2.0f;
*CurVert++ = -Size.y / 2.0f;
@@ -784,7 +787,7 @@ void lcLight::DrawAreaLight(lcContext* Context) const
for (int EdgeIndex = 0; EdgeIndex < CircleEdges; EdgeIndex++)
{
const lcVector2& Size = mSize;
const lcVector2& Size = mAreaSize;
float c = cosf((float)EdgeIndex / CircleEdges * LC_2PI) * Size.x / 2.0f;
float s = sinf((float)EdgeIndex / CircleEdges * LC_2PI) * Size.y / 2.0f;
@@ -1101,9 +1104,9 @@ QVariant lcLight::GetPropertyValue(lcObjectPropertyId PropertyId) const
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
@@ -1176,9 +1179,9 @@ bool lcLight::SetPropertyValue(lcObjectPropertyId PropertyId, lcStep Step, bool
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
@@ -1253,13 +1256,19 @@ bool lcLight::HasKeyFrame(lcObjectPropertyId PropertyId, lcStep Time) const
case lcObjectPropertyId::LightPOVRayFadePower:
return mPOVRayFadePower.HasKeyFrame(Time);
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
return mPointBlenderRadius.HasKeyFrame(Time);
case lcObjectPropertyId::LightSpotBlenderRadius:
return mSpotBlenderRadius.HasKeyFrame(Time);
case lcObjectPropertyId::LightDirectionalBlenderAngle:
return mDirectionalBlenderAngle.HasKeyFrame(Time);
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
return mSize.HasKeyFrame(Time);
return mAreaSize.HasKeyFrame(Time);
case lcObjectPropertyId::LightSpotConeAngle:
return mSpotConeAngle.HasKeyFrame(Time);
@@ -1338,13 +1347,19 @@ bool lcLight::SetKeyFrame(lcObjectPropertyId PropertyId, lcStep Time, bool KeyFr
case lcObjectPropertyId::LightPOVRayFadePower:
return mPOVRayFadePower.SetKeyFrame(Time, KeyFrame);
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
return mPointBlenderRadius.SetKeyFrame(Time, KeyFrame);
case lcObjectPropertyId::LightSpotBlenderRadius:
return mSpotBlenderRadius.SetKeyFrame(Time, KeyFrame);
case lcObjectPropertyId::LightDirectionalBlenderAngle:
return mDirectionalBlenderAngle.SetKeyFrame(Time, KeyFrame);
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
return mSize.SetKeyFrame(Time, KeyFrame);
return mAreaSize.SetKeyFrame(Time, KeyFrame);
case lcObjectPropertyId::LightSpotConeAngle:
return mSpotConeAngle.SetKeyFrame(Time, KeyFrame);
@@ -1388,7 +1403,10 @@ void lcLight::RemoveKeyFrames()
mSpotPenumbraAngle.RemoveAllKeys();
mSpotPOVRayTightness.RemoveAllKeys();
mAreaPOVRayGrid.RemoveAllKeys();
mSize.RemoveAllKeys();
mPointBlenderRadius.RemoveAllKeys();
mSpotBlenderRadius.RemoveAllKeys();
mDirectionalBlenderAngle.RemoveAllKeys();
mAreaSize.RemoveAllKeys();
mBlenderPower.RemoveAllKeys();
mPOVRayPower.RemoveAllKeys();
mPOVRayFadeDistance.RemoveAllKeys();
+28 -6
View File
@@ -283,11 +283,32 @@ public:
return mAreaPOVRayGrid;
}
void SetSize(lcVector2 Size, lcStep Step, bool AddKey);
void SetPointBlenderRadius(float Radius, lcStep Step, bool AddKey);
lcVector2 GetSize() const
float GetPointBlenderRadius() const
{
return mSize;
return mPointBlenderRadius;
}
void SetSpotBlenderRadius(float Radius, lcStep Step, bool AddKey);
float GetSpotBlenderRadius() const
{
return mSpotBlenderRadius;
}
void SetDirectionalBlenderAngle(float Angle, lcStep Step, bool AddKey);
float GetDirectionalBlenderAngle() const
{
return mDirectionalBlenderAngle;
}
void SetAreaSize(lcVector2 Size, lcStep Step, bool AddKey);
lcVector2 GetAreaSize() const
{
return mAreaSize;
}
void SetBlenderPower(float Power, lcStep Step, bool AddKey);
@@ -325,8 +346,6 @@ public:
void CreateName(const lcArray<lcLight*>& Lights);
protected:
void UpdateLightType();
void DrawPointLight(lcContext* Context) const;
void DrawSpotLight(lcContext* Context) const;
void DrawDirectionalLight(lcContext* Context) const;
@@ -344,7 +363,10 @@ protected:
lcObjectProperty<lcVector3> mPosition = lcObjectProperty<lcVector3>(lcVector3(0.0f, 0.0f, 0.0f));
lcObjectProperty<lcMatrix33> mRotation = lcObjectProperty<lcMatrix33>(lcMatrix33Identity());
lcObjectProperty<lcVector3> mColor = lcObjectProperty<lcVector3>(lcVector3(1.0f, 1.0f, 1.0f));
lcObjectProperty<lcVector2> mSize = lcObjectProperty<lcVector2>(lcVector2(0.0f, 0.0f));
lcObjectProperty<float> mPointBlenderRadius = lcObjectProperty<float>(0.0f);
lcObjectProperty<float> mSpotBlenderRadius = lcObjectProperty<float>(0.0f);
lcObjectProperty<float> mDirectionalBlenderAngle = lcObjectProperty<float>(0.00918f * LC_DTOR);
lcObjectProperty<lcVector2> mAreaSize = lcObjectProperty<lcVector2>(lcVector2(200.0f, 200.0f));
lcObjectProperty<float> mBlenderPower = lcObjectProperty<float>(10.0f);
lcObjectProperty<float> mPOVRayPower = lcObjectProperty<float>(1.0f);
lcObjectProperty<float> mPOVRayFadeDistance = lcObjectProperty<float>(0.0f);
+3 -3
View File
@@ -64,9 +64,9 @@ QString lcObject::GetCheckpointString(lcObjectPropertyId PropertyId)
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
+12 -12
View File
@@ -692,9 +692,9 @@ QVariant lcPiece::GetPropertyValue(lcObjectPropertyId PropertyId) const
case lcObjectPropertyId::LightCastShadow:
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
@@ -754,9 +754,9 @@ bool lcPiece::SetPropertyValue(lcObjectPropertyId PropertyId, lcStep Step, bool
case lcObjectPropertyId::LightCastShadow:
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
@@ -809,9 +809,9 @@ bool lcPiece::HasKeyFrame(lcObjectPropertyId PropertyId, lcStep Time) const
case lcObjectPropertyId::LightCastShadow:
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
@@ -870,9 +870,9 @@ bool lcPiece::SetKeyFrame(lcObjectPropertyId PropertyId, lcStep Time, bool KeyFr
case lcObjectPropertyId::LightCastShadow:
case lcObjectPropertyId::LightPOVRayFadeDistance:
case lcObjectPropertyId::LightPOVRayFadePower:
case lcObjectPropertyId::LightPointSize:
case lcObjectPropertyId::LightSpotSize:
case lcObjectPropertyId::LightDirectionalSize:
case lcObjectPropertyId::LightPointBlenderRadius:
case lcObjectPropertyId::LightSpotBlenderRadius:
case lcObjectPropertyId::LightDirectionalBlenderAngle:
case lcObjectPropertyId::LightAreaSize:
case lcObjectPropertyId::LightAreaSizeX:
case lcObjectPropertyId::LightAreaSizeY:
+2 -2
View File
@@ -2207,8 +2207,8 @@ bool Project::ExportPOVRay(const QString& FileName)
case lcLightType::Area:
AreaCircle = (Light->GetAreaShape() == lcLightAreaShape::Disk || Light->GetAreaShape() == lcLightAreaShape::Ellipse) ? 1 : 0;
AreaX = lcVector3(Light->GetWorldMatrix()[0]) * Light->GetSize().x;
AreaY = lcVector3(Light->GetWorldMatrix()[1]) * Light->GetSize().y;
AreaX = lcVector3(Light->GetWorldMatrix()[0]) * Light->GetAreaSize().x;
AreaY = lcVector3(Light->GetWorldMatrix()[1]) * Light->GetAreaSize().y;
AreaGrid = Light->GetAreaPOVRayGrid();
break;