diff --git a/common/camera.cpp b/common/camera.cpp index dc6178e3..d3ab72d1 100644 --- a/common/camera.cpp +++ b/common/camera.cpp @@ -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: diff --git a/common/lc_model.cpp b/common/lc_model.cpp index be951329..891d21d7 100644 --- a/common/lc_model.cpp +++ b/common/lc_model.cpp @@ -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(); } diff --git a/common/lc_model.h b/common/lc_model.h index 99a64c64..1fe1f6bc 100644 --- a/common/lc_model.h +++ b/common/lc_model.h @@ -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); diff --git a/common/lc_objectproperty.h b/common/lc_objectproperty.h index aba3f98c..036f34e1 100644 --- a/common/lc_objectproperty.h +++ b/common/lc_objectproperty.h @@ -30,9 +30,9 @@ enum class lcObjectPropertyId LightCastShadow, LightPOVRayFadeDistance, LightPOVRayFadePower, - LightPointSize, - LightSpotSize, - LightDirectionalSize, + LightPointBlenderRadius, + LightSpotBlenderRadius, + LightDirectionalBlenderAngle, LightAreaSize, LightAreaSizeX, LightAreaSizeY, diff --git a/common/lc_propertieswidget.cpp b/common/lc_propertieswidget.cpp index 1ad0b6e0..2dbbc0fe 100644 --- a/common/lc_propertieswidget.cpp +++ b/common/lc_propertieswidget.cpp @@ -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& 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& 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& 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& 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); } diff --git a/common/light.cpp b/common/light.cpp index 6c602c6e..d15a30b7 100644 --- a/common/light.cpp +++ b/common/light.cpp @@ -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(); diff --git a/common/light.h b/common/light.h index 076efba9..b7393932 100644 --- a/common/light.h +++ b/common/light.h @@ -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& 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 mPosition = lcObjectProperty(lcVector3(0.0f, 0.0f, 0.0f)); lcObjectProperty mRotation = lcObjectProperty(lcMatrix33Identity()); lcObjectProperty mColor = lcObjectProperty(lcVector3(1.0f, 1.0f, 1.0f)); - lcObjectProperty mSize = lcObjectProperty(lcVector2(0.0f, 0.0f)); + lcObjectProperty mPointBlenderRadius = lcObjectProperty(0.0f); + lcObjectProperty mSpotBlenderRadius = lcObjectProperty(0.0f); + lcObjectProperty mDirectionalBlenderAngle = lcObjectProperty(0.00918f * LC_DTOR); + lcObjectProperty mAreaSize = lcObjectProperty(lcVector2(200.0f, 200.0f)); lcObjectProperty mBlenderPower = lcObjectProperty(10.0f); lcObjectProperty mPOVRayPower = lcObjectProperty(1.0f); lcObjectProperty mPOVRayFadeDistance = lcObjectProperty(0.0f); diff --git a/common/object.cpp b/common/object.cpp index be7f683f..7f4b0f8c 100644 --- a/common/object.cpp +++ b/common/object.cpp @@ -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: diff --git a/common/piece.cpp b/common/piece.cpp index 975d841e..d0255da6 100644 --- a/common/piece.cpp +++ b/common/piece.cpp @@ -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: diff --git a/common/project.cpp b/common/project.cpp index baf67c28..c82a1c0b 100644 --- a/common/project.cpp +++ b/common/project.cpp @@ -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;