Support Blender light sizes for all types of lights.

This commit is contained in:
Leonardo Zide 2023-09-17 11:45:14 -07:00
parent 59c1930b83
commit 177c1b82d7
7 changed files with 174 additions and 236 deletions

View file

@ -3225,12 +3225,12 @@ void lcModel::SetAreaLightShape(lcLight* Light, lcLightAreaShape LightAreaShape)
UpdateAllViews(); UpdateAllViews();
} }
void lcModel::SetAreaLightSize(lcLight* Light, lcVector2 LightAreaSize) void lcModel::SetLightSize(lcLight* Light, lcVector2 LightAreaSize)
{ {
Light->SetAreaSize(LightAreaSize, mCurrentStep, gMainWindow->GetAddKeys()); Light->SetSize(LightAreaSize, mCurrentStep, gMainWindow->GetAddKeys());
Light->UpdatePosition(mCurrentStep); Light->UpdatePosition(mCurrentStep);
SaveCheckpoint(tr("Changing Area Light Size")); SaveCheckpoint(tr("Changing Light Size"));
gMainWindow->UpdateSelectedObjects(false); gMainWindow->UpdateSelectedObjects(false);
UpdateAllViews(); UpdateAllViews();
} }

View file

@ -374,7 +374,7 @@ public:
void SetSpotLightPenumbraAngle(lcLight* Light, float Angle); void SetSpotLightPenumbraAngle(lcLight* Light, float Angle);
void SetSpotLightTightness(lcLight* Light, float Tightness); void SetSpotLightTightness(lcLight* Light, float Tightness);
void SetAreaLightShape(lcLight* Light, lcLightAreaShape LightAreaShape); void SetAreaLightShape(lcLight* Light, lcLightAreaShape LightAreaShape);
void SetAreaLightSize(lcLight* Light, lcVector2 LightAreaSize); void SetLightSize(lcLight* Light, lcVector2 LightAreaSize);
void SetLightCastShadow(lcLight* Light, bool CastShadow); void SetLightCastShadow(lcLight* Light, bool CastShadow);
void SetLightName(lcLight* Light, const QString& Name); void SetLightName(lcLight* Light, const QString& Name);
void UpdateLight(lcLight* Light, const lcLightProperties Props, int Property); void UpdateLight(lcLight* Light, const lcLightProperties Props, int Property);

View file

@ -28,8 +28,6 @@ lcLight::lcLight(const lcVector3& Position, lcLightType LightType)
mPOVRayLight = false; mPOVRayLight = false;
mEnableCutoff = false; mEnableCutoff = false;
mAttenuation = lcVector3(1.0f, 0.0f, 0.0f); mAttenuation = lcVector3(1.0f, 0.0f, 0.0f);
mLightFactor[0] = LightType == lcLightType::Directional ? 11.4f : 0.25f;
mLightFactor[1] = LightType == lcLightType::Area ? 0.25f : LightType == lcLightType::Spot ? 0.150f : 0.0f;
mLightDiffuse = 1.0f; mLightDiffuse = 1.0f;
mLightSpecular = 1.0f; mLightSpecular = 1.0f;
mSpotExponent = 10.0f; mSpotExponent = 10.0f;
@ -37,16 +35,16 @@ lcLight::lcLight(const lcVector3& Position, lcLightType LightType)
mSpotCutoff = LightType != lcLightType::Directional ? 40.0f : 0.0f; mSpotCutoff = LightType != lcLightType::Directional ? 40.0f : 0.0f;
mAreaGrid = lcVector2(10.0f, 10.0f); mAreaGrid = lcVector2(10.0f, 10.0f);
UpdateLightType();
mPositionKeys.ChangeKey(mWorldMatrix.GetTranslation(), 1, true); mPositionKeys.ChangeKey(mWorldMatrix.GetTranslation(), 1, true);
mRotationKeys.ChangeKey(lcMatrix33(mWorldMatrix), 1, true); mRotationKeys.ChangeKey(lcMatrix33(mWorldMatrix), 1, true);
mColorKeys.ChangeKey(mColor, 1, true); mColorKeys.ChangeKey(mColor, 1, true);
mSpotConeAngleKeys.ChangeKey(mSpotConeAngle, 1, true); mSpotConeAngleKeys.ChangeKey(mSpotConeAngle, 1, true);
mSpotPenumbraAngleKeys.ChangeKey(mSpotPenumbraAngle, 1, true); mSpotPenumbraAngleKeys.ChangeKey(mSpotPenumbraAngle, 1, true);
mSpotTightnessKeys.ChangeKey(mSpotTightness, 1, true); mSpotTightnessKeys.ChangeKey(mSpotTightness, 1, true);
mAreaSizeKeys.ChangeKey(mAreaSize, 1, true);
mAttenuationKeys.ChangeKey(mAttenuation, 1, true); mAttenuationKeys.ChangeKey(mAttenuation, 1, true);
mLightFactorKeys.ChangeKey(mLightFactor, 1, true);
mLightDiffuseKeys.ChangeKey(mLightDiffuse, 1, true); mLightDiffuseKeys.ChangeKey(mLightDiffuse, 1, true);
mLightSpecularKeys.ChangeKey(mLightSpecular, 1, true); mLightSpecularKeys.ChangeKey(mLightSpecular, 1, true);
mSpotCutoffKeys.ChangeKey(mSpotCutoff, 1, true); mSpotCutoffKeys.ChangeKey(mSpotCutoff, 1, true);
@ -56,7 +54,36 @@ lcLight::lcLight(const lcVector3& Position, lcLightType LightType)
UpdatePosition(1); UpdatePosition(1);
} }
QString lcLight::GetTypeString(lcLightType LightType) void lcLight::UpdateLightType()
{
mSizeKeys.RemoveAll();
switch (mLightType)
{
case lcLightType::Point:
mSize = lcVector2(0.0f, 0.0f);
break;
case lcLightType::Spot:
mSize = lcVector2(0.0f, 0.0f);
break;
case lcLightType::Directional:
mSize = lcVector2(0.00918f * LC_DTOR, 0.0f);
break;
case lcLightType::Area:
mSize = lcVector2(200.0f, 200.0f);
break;
case lcLightType::Count:
break;
}
mSizeKeys.ChangeKey(mSize, 1, true);
}
QString lcLight::GetLightTypeString(lcLightType LightType)
{ {
switch (LightType) switch (LightType)
{ {
@ -133,6 +160,11 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
else else
Stream << QLatin1String("0 !LEOCAD LIGHT COLOR ") << mColor[0] << ' ' << mColor[1] << ' ' << mColor[2] << LineEnding; Stream << QLatin1String("0 !LEOCAD LIGHT COLOR ") << mColor[0] << ' ' << mColor[1] << ' ' << mColor[2] << LineEnding;
if (mSizeKeys.GetSize() > 1)
mSizeKeys.SaveKeysLDraw(Stream, "LIGHT SIZE_KEY ");
else
Stream << QLatin1String("0 !LEOCAD LIGHT SIZE ") << mSize[0] << mSize[1] << LineEnding;
if (!mPOVRayLight) if (!mPOVRayLight)
{ {
if (mLightDiffuseKeys.GetSize() > 1) if (mLightDiffuseKeys.GetSize() > 1)
@ -162,16 +194,7 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
switch (mLightType) switch (mLightType)
{ {
case lcLightType::Count: case lcLightType::Count:
break;
case lcLightType::Point: case lcLightType::Point:
if (!mPOVRayLight)
{
if (mLightFactorKeys.GetSize() > 1)
mLightFactorKeys.SaveKeysLDraw(Stream, "LIGHT RADIUS_KEY ");
else
Stream << QLatin1String("0 !LEOCAD LIGHT RADIUS ") << mLightFactor[0] << LineEnding;
}
break; break;
case lcLightType::Spot: case lcLightType::Spot:
@ -190,16 +213,6 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
else else
Stream << QLatin1String("0 !LEOCAD LIGHT SPOT_TIGHTNESS ") << mSpotTightness << LineEnding; Stream << QLatin1String("0 !LEOCAD LIGHT SPOT_TIGHTNESS ") << mSpotTightness << LineEnding;
if (!mPOVRayLight)
{
if (mLightFactorKeys.GetSize() > 1)
mLightFactorKeys.SaveKeysLDraw(Stream, "LIGHT RADIUS_AND_SPOT_BLEND_KEY ");
else
{
Stream << QLatin1String("0 !LEOCAD LIGHT RADIUS ") << mLightFactor[0] << LineEnding;
Stream << QLatin1String("0 !LEOCAD LIGHT SPOT_BLEND ") << mLightFactor[1] << LineEnding;
}
}
break; break;
case lcLightType::Directional: case lcLightType::Directional:
@ -208,10 +221,6 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
else else
Stream << QLatin1String("0 !LEOCAD LIGHT STRENGTH ") << mSpotExponent << LineEnding; Stream << QLatin1String("0 !LEOCAD LIGHT STRENGTH ") << mSpotExponent << LineEnding;
if (mLightFactorKeys.GetSize() > 1)
mLightFactorKeys.SaveKeysLDraw(Stream, "LIGHT ANGLE_KEY ");
else
Stream << QLatin1String("0 !LEOCAD LIGHT ANGLE ") << mLightFactor[0] << LineEnding;
break; break;
case lcLightType::Area: case lcLightType::Area:
@ -223,12 +232,7 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
Stream << QLatin1String("0 !LEOCAD LIGHT AREA_ROWS ") << mAreaGrid[0] << QLatin1String(" AREA_COLUMNS ") << mAreaGrid[1] << LineEnding; Stream << QLatin1String("0 !LEOCAD LIGHT AREA_ROWS ") << mAreaGrid[0] << QLatin1String(" AREA_COLUMNS ") << mAreaGrid[1] << LineEnding;
} }
Stream << QLatin1String("0 !LEOCAD LIGHT SHAPE ") << gLightAreaShapes[static_cast<int>(mAreaShape)] << LineEnding; Stream << QLatin1String("0 !LEOCAD LIGHT AREA_SHAPE ") << gLightAreaShapes[static_cast<int>(mAreaShape)] << LineEnding;
if (mAreaSizeKeys.GetSize() > 1)
mAreaSizeKeys.SaveKeysLDraw(Stream, "LIGHT AREA_SIZE_KEY ");
else
Stream << QLatin1String("0 !LEOCAD LIGHT AREA_SIZE ") << mAreaSize[0] << mAreaSize[1] << LineEnding;
break; break;
} }
@ -368,7 +372,7 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
} }
else if (Token == QLatin1String("SPOT_TIGHTNESS_KEY")) else if (Token == QLatin1String("SPOT_TIGHTNESS_KEY"))
mSpotTightnessKeys.LoadKeysLDraw(Stream); mSpotTightnessKeys.LoadKeysLDraw(Stream);
else if (Token == QLatin1String("SHAPE")) else if (Token == QLatin1String("AREA_SHAPE"))
{ {
QString AreaShape; QString AreaShape;
Stream >> AreaShape; Stream >> AreaShape;
@ -382,13 +386,13 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
} }
} }
} }
else if (Token == QLatin1String("AREA_SIZE")) else if (Token == QLatin1String("SIZE"))
{ {
Stream >> mAreaSize[0] >> mAreaSize[1]; Stream >> mSize[0] >> mSize[1];
mAreaSizeKeys.ChangeKey(mAreaSize, 1, true); mSizeKeys.ChangeKey(mSize, 1, true);
} }
else if (Token == QLatin1String("AREA_SIZE_KEY")) else if (Token == QLatin1String("SIZE_KEY"))
mAreaSizeKeys.LoadKeysLDraw(Stream); mSizeKeys.LoadKeysLDraw(Stream);
else if (Token == QLatin1String("POWER") || Token == QLatin1String("STRENGTH")) else if (Token == QLatin1String("POWER") || Token == QLatin1String("STRENGTH"))
{ {
@ -455,8 +459,6 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
} }
else if ((Token == QLatin1String("POWER_KEY")) || (Token == QLatin1String("STRENGTH_KEY"))) else if ((Token == QLatin1String("POWER_KEY")) || (Token == QLatin1String("STRENGTH_KEY")))
mSpotExponentKeys.LoadKeysLDraw(Stream); mSpotExponentKeys.LoadKeysLDraw(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("AREA_GRID_KEY")) else if (Token == QLatin1String("AREA_GRID_KEY"))
mAreaGridKeys.LoadKeysLDraw(Stream); mAreaGridKeys.LoadKeysLDraw(Stream);
else if (Token == QLatin1String("DIFFUSE_KEY")) else if (Token == QLatin1String("DIFFUSE_KEY"))
@ -474,23 +476,10 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
switch (mLightType) switch (mLightType)
{ {
case lcLightType::Point: case lcLightType::Point:
break;
case lcLightType::Spot: case lcLightType::Spot:
if (!mSpotBlendSet)
{
mLightFactor[1] = 0.15f;
mLightFactorKeys.ChangeKey(mLightFactor, 1, true);
}
break; break;
case lcLightType::Directional: case lcLightType::Directional:
if (!mAngleSet)
{
mLightFactor[0] = 11.4f;
mLightFactorKeys.ChangeKey(mLightFactor, 1, true);
}
if (!mSpotCutoffSet) if (!mSpotCutoffSet)
{ {
mSpotCutoff = 0.0f; mSpotCutoff = 0.0f;
@ -499,8 +488,6 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
break; break;
case lcLightType::Area: case lcLightType::Area:
break;
case lcLightType::Count: case lcLightType::Count:
break; break;
} }
@ -526,18 +513,6 @@ void lcLight::UpdateLight(lcStep Step, lcLightProperties Props, int Property)
{ {
switch(Property) switch(Property)
{ {
case LC_LIGHT_FACTOR:
if (Props.mPOVRayLight && mLightType == lcLightType::Area)
{
mAreaSize = Props.mLightFactor;
mLightFactorKeys.ChangeKey(mAreaSize, 1, true);
}
else
{
mLightFactor = Props.mLightFactor;
mLightFactorKeys.ChangeKey(mLightFactor, 1, true);
}
break;
case LC_LIGHT_DIFFUSE: case LC_LIGHT_DIFFUSE:
mLightDiffuse = Props.mLightDiffuse; mLightDiffuse = Props.mLightDiffuse;
mLightDiffuseKeys.ChangeKey(mLightDiffuse, Step, false); mLightDiffuseKeys.ChangeKey(mLightDiffuse, Step, false);
@ -621,7 +596,7 @@ void lcLight::RayTest(lcObjectRayTest& ObjectRayTest) const
float x = lcDot(IntersectionDirection, XAxis); float x = lcDot(IntersectionDirection, XAxis);
float y = lcDot(IntersectionDirection, YAxis); float y = lcDot(IntersectionDirection, YAxis);
if (fabsf(x) < mAreaSize.x / 2.0f && fabsf(y) < mAreaSize.y / 2.0f) if (fabsf(x) < mSize.x / 2.0f && fabsf(y) < mSize.y / 2.0f)
{ {
float Distance = lcLength(Intersection - ObjectRayTest.Start); float Distance = lcLength(Intersection - ObjectRayTest.Start);
@ -726,13 +701,14 @@ bool lcLight::SetLightType(lcLightType LightType)
if (static_cast<int>(LightType) < 0 || LightType >= lcLightType::Count) if (static_cast<int>(LightType) < 0 || LightType >= lcLightType::Count)
return false; return false;
if (mLightType != LightType) if (mLightType == LightType)
{
mLightType = LightType;
return true;
}
return false; return false;
mLightType = LightType;
UpdateLightType();
return true;
} }
void lcLight::SetColor(const lcVector3& Color, lcStep Step, bool AddKey) void lcLight::SetColor(const lcVector3& Color, lcStep Step, bool AddKey)
@ -769,12 +745,12 @@ bool lcLight::SetAreaShape(lcLightAreaShape AreaShape)
return false; return false;
} }
void lcLight::SetAreaSize(lcVector2 AreaSize, lcStep Step, bool AddKey) void lcLight::SetSize(lcVector2 Size, lcStep Step, bool AddKey)
{ {
if (mAreaShape == lcLightAreaShape::Square || mAreaShape == lcLightAreaShape::Disk) if (mLightType == lcLightType::Area && (mAreaShape == lcLightAreaShape::Square || mAreaShape == lcLightAreaShape::Disk))
AreaSize[1] = AreaSize[0]; Size[1] = Size[0];
mAreaSizeKeys.ChangeKey(AreaSize, Step, AddKey); mSizeKeys.ChangeKey(Size, Step, AddKey);
} }
bool lcLight::SetCastShadow(bool CastShadow) bool lcLight::SetCastShadow(bool CastShadow)
@ -796,10 +772,9 @@ void lcLight::InsertTime(lcStep Start, lcStep Time)
mSpotConeAngleKeys.InsertTime(Start, Time); mSpotConeAngleKeys.InsertTime(Start, Time);
mSpotPenumbraAngleKeys.InsertTime(Start, Time); mSpotPenumbraAngleKeys.InsertTime(Start, Time);
mSpotTightnessKeys.InsertTime(Start, Time); mSpotTightnessKeys.InsertTime(Start, Time);
mAreaSizeKeys.InsertTime(Start, Time); mSizeKeys.InsertTime(Start, Time);
mAttenuationKeys.InsertTime(Start, Time); mAttenuationKeys.InsertTime(Start, Time);
mLightFactorKeys.InsertTime(Start, Time);
mLightDiffuseKeys.InsertTime(Start, Time); mLightDiffuseKeys.InsertTime(Start, Time);
mLightSpecularKeys.InsertTime(Start, Time); mLightSpecularKeys.InsertTime(Start, Time);
mSpotCutoffKeys.InsertTime(Start, Time); mSpotCutoffKeys.InsertTime(Start, Time);
@ -815,10 +790,9 @@ void lcLight::RemoveTime(lcStep Start, lcStep Time)
mSpotConeAngleKeys.RemoveTime(Start, Time); mSpotConeAngleKeys.RemoveTime(Start, Time);
mSpotPenumbraAngleKeys.RemoveTime(Start, Time); mSpotPenumbraAngleKeys.RemoveTime(Start, Time);
mSpotTightnessKeys.RemoveTime(Start, Time); mSpotTightnessKeys.RemoveTime(Start, Time);
mAreaSizeKeys.RemoveTime(Start, Time); mSizeKeys.RemoveTime(Start, Time);
mAttenuationKeys.RemoveTime(Start, Time); mAttenuationKeys.RemoveTime(Start, Time);
mLightFactorKeys.RemoveTime(Start, Time);
mLightDiffuseKeys.RemoveTime(Start, Time); mLightDiffuseKeys.RemoveTime(Start, Time);
mLightSpecularKeys.RemoveTime(Start, Time); mLightSpecularKeys.RemoveTime(Start, Time);
mSpotCutoffKeys.RemoveTime(Start, Time); mSpotCutoffKeys.RemoveTime(Start, Time);
@ -845,10 +819,9 @@ void lcLight::UpdatePosition(lcStep Step)
mSpotConeAngle = mSpotConeAngleKeys.CalculateKey(Step); mSpotConeAngle = mSpotConeAngleKeys.CalculateKey(Step);
mSpotPenumbraAngle = mSpotPenumbraAngleKeys.CalculateKey(Step); mSpotPenumbraAngle = mSpotPenumbraAngleKeys.CalculateKey(Step);
mSpotTightness = mSpotTightnessKeys.CalculateKey(Step); mSpotTightness = mSpotTightnessKeys.CalculateKey(Step);
mAreaSize = mAreaSizeKeys.CalculateKey(Step); mSize = mSizeKeys.CalculateKey(Step);
mAttenuation = mAttenuationKeys.CalculateKey(Step); mAttenuation = mAttenuationKeys.CalculateKey(Step);
mLightFactor = mLightFactorKeys.CalculateKey(Step);
mLightDiffuse = mLightDiffuseKeys.CalculateKey(Step); mLightDiffuse = mLightDiffuseKeys.CalculateKey(Step);
mLightSpecular = mLightSpecularKeys.CalculateKey(Step); mLightSpecular = mLightSpecularKeys.CalculateKey(Step);
mSpotCutoff = mSpotCutoffKeys.CalculateKey(Step); mSpotCutoff = mSpotCutoffKeys.CalculateKey(Step);
@ -954,20 +927,20 @@ void lcLight::DrawAreaLight(lcContext* Context) const
float Verts[4 * 3]; float Verts[4 * 3];
float* CurVert = Verts; float* CurVert = Verts;
*CurVert++ = -mAreaSize.x / 2.0f; *CurVert++ = -mSize.x / 2.0f;
*CurVert++ = -mAreaSize.y / 2.0f; *CurVert++ = -mSize.y / 2.0f;
*CurVert++ = 0.0f; *CurVert++ = 0.0f;
*CurVert++ = mAreaSize.x / 2.0f; *CurVert++ = mSize.x / 2.0f;
*CurVert++ = -mAreaSize.y / 2.0f; *CurVert++ = -mSize.y / 2.0f;
*CurVert++ = 0.0f; *CurVert++ = 0.0f;
*CurVert++ = mAreaSize.x / 2.0f; *CurVert++ = mSize.x / 2.0f;
*CurVert++ = mAreaSize.y / 2.0f; *CurVert++ = mSize.y / 2.0f;
*CurVert++ = 0.0f; *CurVert++ = 0.0f;
*CurVert++ = -mAreaSize.x / 2.0f; *CurVert++ = -mSize.x / 2.0f;
*CurVert++ = mAreaSize.y / 2.0f; *CurVert++ = mSize.y / 2.0f;
*CurVert++ = 0.0f; *CurVert++ = 0.0f;
Context->SetVertexBufferPointer(Verts); Context->SetVertexBufferPointer(Verts);
@ -992,8 +965,8 @@ void lcLight::DrawAreaLight(lcContext* Context) const
for (int EdgeIndex = 0; EdgeIndex < CircleEdges; EdgeIndex++) for (int EdgeIndex = 0; EdgeIndex < CircleEdges; EdgeIndex++)
{ {
float c = cosf((float)EdgeIndex / CircleEdges * LC_2PI) * mAreaSize.x / 2.0f; float c = cosf((float)EdgeIndex / CircleEdges * LC_2PI) * mSize.x / 2.0f;
float s = sinf((float)EdgeIndex / CircleEdges * LC_2PI) * mAreaSize.y / 2.0f; float s = sinf((float)EdgeIndex / CircleEdges * LC_2PI) * mSize.y / 2.0f;
*CurVert++ = c; *CurVert++ = c;
*CurVert++ = s; *CurVert++ = s;
@ -1274,15 +1247,12 @@ void lcLight::RemoveKeyFrames()
mSpotTightnessKeys.RemoveAll(); mSpotTightnessKeys.RemoveAll();
mSpotTightnessKeys.ChangeKey(mSpotTightness, 1, true); mSpotTightnessKeys.ChangeKey(mSpotTightness, 1, true);
mAreaSizeKeys.RemoveAll(); mSizeKeys.RemoveAll();
mAreaSizeKeys.ChangeKey(mAreaSize, 1, true); mSizeKeys.ChangeKey(mSize, 1, true);
mAttenuationKeys.RemoveAll(); mAttenuationKeys.RemoveAll();
mAttenuationKeys.ChangeKey(mAttenuation, 1, true); mAttenuationKeys.ChangeKey(mAttenuation, 1, true);
mLightFactorKeys.RemoveAll();
mLightFactorKeys.ChangeKey(mLightFactor, 1, true);
mLightDiffuseKeys.RemoveAll(); mLightDiffuseKeys.RemoveAll();
mLightDiffuseKeys.ChangeKey(mLightDiffuse, 1, true); mLightDiffuseKeys.ChangeKey(mLightDiffuse, 1, true);

View file

@ -36,7 +36,6 @@ enum class lcLightAreaShape
enum lcLightProperty enum lcLightProperty
{ {
LC_LIGHT_FACTOR,
LC_LIGHT_DIFFUSE, LC_LIGHT_DIFFUSE,
LC_LIGHT_SPECULAR, LC_LIGHT_SPECULAR,
LC_LIGHT_EXPONENT, LC_LIGHT_EXPONENT,
@ -48,7 +47,6 @@ enum lcLightProperty
struct lcLightProperties struct lcLightProperties
{ {
lcVector2 mLightFactor;
lcVector2 mAreaGrid; lcVector2 mAreaGrid;
float mLightDiffuse; float mLightDiffuse;
float mLightSpecular; float mLightSpecular;
@ -69,7 +67,7 @@ public:
lcLight& operator=(const lcLight&) = delete; lcLight& operator=(const lcLight&) = delete;
lcLight& operator=(lcLight&&) = delete; lcLight& operator=(lcLight&&) = delete;
static QString GetTypeString(lcLightType LightType); static QString GetLightTypeString(lcLightType LightType);
static QString GetAreaShapeString(lcLightAreaShape LightAreaShape); static QString GetAreaShapeString(lcLightAreaShape LightAreaShape);
bool IsPointLight() const bool IsPointLight() const
@ -99,11 +97,6 @@ public:
bool SetLightType(lcLightType LightType); bool SetLightType(lcLightType LightType);
lcLightAreaShape GetLightShape() const
{
return mAreaShape;
}
bool IsSelected() const override bool IsSelected() const override
{ {
return (mState & LC_LIGHT_SELECTION_MASK) != 0; return (mState & LC_LIGHT_SELECTION_MASK) != 0;
@ -286,11 +279,11 @@ public:
return mAreaShape; return mAreaShape;
} }
void SetAreaSize(lcVector2 AreaSize, lcStep Step, bool AddKey); void SetSize(lcVector2 Size, lcStep Step, bool AddKey);
lcVector2 GetAreaSize() const lcVector2 GetSize() const
{ {
return mAreaSize; return mSize;
} }
bool SetCastShadow(bool CastShadow); bool SetCastShadow(bool CastShadow);
@ -321,7 +314,6 @@ public:
lcLightProperties GetLightProperties() const lcLightProperties GetLightProperties() const
{ {
lcLightProperties props; lcLightProperties props;
props.mLightFactor = mLightFactor;
props.mLightDiffuse = mLightDiffuse; props.mLightDiffuse = mLightDiffuse;
props.mLightSpecular = mLightSpecular; props.mLightSpecular = mLightSpecular;
props.mSpotExponent = mSpotExponent; props.mSpotExponent = mSpotExponent;
@ -335,9 +327,7 @@ public:
lcMatrix44 mWorldMatrix; lcMatrix44 mWorldMatrix;
lcVector3 mAttenuation; lcVector3 mAttenuation;
lcVector2 mLightFactor;
lcVector2 mAreaGrid; lcVector2 mAreaGrid;
bool mAngleSet;
bool mSpotBlendSet; bool mSpotBlendSet;
bool mSpotCutoffSet; bool mSpotCutoffSet;
bool mEnableCutoff; bool mEnableCutoff;
@ -347,9 +337,10 @@ public:
float mSpotCutoff; float mSpotCutoff;
float mSpotExponent; float mSpotExponent;
float mPOVRayExponent; float mPOVRayExponent;
QString mName;
protected: protected:
void UpdateLightType();
void DrawPointLight(lcContext* Context) const; void DrawPointLight(lcContext* Context) const;
void DrawSpotLight(lcContext* Context) const; void DrawSpotLight(lcContext* Context) const;
void DrawDirectionalLight(lcContext* Context) const; void DrawDirectionalLight(lcContext* Context) const;
@ -361,26 +352,26 @@ protected:
void DrawTarget(lcContext* Context, float TargetDistance) const; void DrawTarget(lcContext* Context, float TargetDistance) const;
void DrawCone(lcContext* Context, float TargetDistance) const; void DrawCone(lcContext* Context, float TargetDistance) const;
QString mName;
quint32 mState = 0; quint32 mState = 0;
lcLightType mLightType = lcLightType::Point; lcLightType mLightType = lcLightType::Point;
bool mCastShadow = true; bool mCastShadow = true;
lcVector3 mColor = lcVector3(1.0f, 1.0f, 1.0f); lcVector3 mColor = lcVector3(1.0f, 1.0f, 1.0f);
lcVector2 mSize = lcVector2(0.0f, 0.0f);
float mSpotConeAngle = 80.0f; float mSpotConeAngle = 80.0f;
float mSpotPenumbraAngle = 0.0f; float mSpotPenumbraAngle = 0.0f;
float mSpotTightness = 0.0f; float mSpotTightness = 0.0f;
lcLightAreaShape mAreaShape = lcLightAreaShape::Rectangle; lcLightAreaShape mAreaShape = lcLightAreaShape::Rectangle;
lcVector2 mAreaSize = lcVector2(200.0f, 200.0f);
lcObjectKeyArray<lcVector3> mPositionKeys; lcObjectKeyArray<lcVector3> mPositionKeys;
lcObjectKeyArray<lcMatrix33> mRotationKeys; lcObjectKeyArray<lcMatrix33> mRotationKeys;
lcObjectKeyArray<lcVector3> mColorKeys; lcObjectKeyArray<lcVector3> mColorKeys;
lcObjectKeyArray<lcVector2> mSizeKeys;
lcObjectKeyArray<float> mSpotConeAngleKeys; lcObjectKeyArray<float> mSpotConeAngleKeys;
lcObjectKeyArray<float> mSpotPenumbraAngleKeys; lcObjectKeyArray<float> mSpotPenumbraAngleKeys;
lcObjectKeyArray<float> mSpotTightnessKeys; lcObjectKeyArray<float> mSpotTightnessKeys;
lcObjectKeyArray<lcVector2> mAreaSizeKeys;
lcObjectKeyArray<lcVector3> mAttenuationKeys; lcObjectKeyArray<lcVector3> mAttenuationKeys;
lcObjectKeyArray<lcVector2> mLightFactorKeys;
lcObjectKeyArray<lcVector2> mAreaGridKeys; lcObjectKeyArray<lcVector2> mAreaGridKeys;
lcObjectKeyArray<float> mLightSpecularKeys; lcObjectKeyArray<float> mLightSpecularKeys;
lcObjectKeyArray<float> mLightDiffuseKeys; lcObjectKeyArray<float> mLightDiffuseKeys;

View file

@ -2177,7 +2177,7 @@ bool Project::ExportPOVRay(const QString& FileName)
const lcVector3 LightPosition = Light->GetPosition(); const lcVector3 LightPosition = Light->GetPosition();
const lcVector3 LightTarget = LightPosition + Light->GetDirection(); const lcVector3 LightTarget = LightPosition + Light->GetDirection();
const lcVector3 LightColor = Light->GetColor(); const lcVector3 LightColor = Light->GetColor();
const QString LightName = QString(Light->mName).replace(" ", "_"); const QString LightName = QString(Light->GetName()).replace(" ", "_");
LightType = Light->GetLightType(); LightType = Light->GetLightType();
Shadowless = Light->GetCastShadow() ? 0 : 1; Shadowless = Light->GetCastShadow() ? 0 : 1;
Power = Light->mPOVRayExponent; Power = Light->mPOVRayExponent;
@ -2196,8 +2196,8 @@ bool Project::ExportPOVRay(const QString& FileName)
break; break;
case lcLightType::Area: case lcLightType::Area:
AreaCircle = (Light->GetLightShape() == lcLightAreaShape::Disk || Light->GetLightShape() == lcLightAreaShape::Ellipse) ? 1 : 0; AreaCircle = (Light->GetAreaShape() == lcLightAreaShape::Disk || Light->GetAreaShape() == lcLightAreaShape::Ellipse) ? 1 : 0;
AreaSize = Light->GetAreaSize(); AreaSize = Light->GetSize();
AreaGrid = Light->mAreaGrid; AreaGrid = Light->mAreaGrid;
break; break;

View file

@ -499,7 +499,7 @@ QWidget* lcQPropertiesTree::createEditor(QWidget* Parent, QTreeWidgetItem* Item)
else if (Item == mLightTypeItem) else if (Item == mLightTypeItem)
{ {
for (int LightTypeIndex = 0; LightTypeIndex < static_cast<int>(lcLightType::Count); LightTypeIndex++) for (int LightTypeIndex = 0; LightTypeIndex < static_cast<int>(lcLightType::Count); LightTypeIndex++)
editor->addItem(lcLight::GetTypeString(static_cast<lcLightType>(LightTypeIndex))); editor->addItem(lcLight::GetLightTypeString(static_cast<lcLightType>(LightTypeIndex)));
} }
else if (Item == mLightAreaShapeItem) else if (Item == mLightAreaShapeItem)
{ {
@ -879,27 +879,19 @@ void lcQPropertiesTree::slotReturnPressed()
Model->SetSpotLightTightness(Light, Value); Model->SetSpotLightTightness(Light, Value);
} }
else if (Item == mLightAreaSizeXItem) else if (Item == mLightSizeXItem)
{ {
lcVector2 Value = Light->GetAreaSize(); lcVector2 Value = Light->GetSize();
Value[0] = lcParseValueLocalized(Editor->text()); Value[0] = lcParseValueLocalized(Editor->text());
Model->SetAreaLightSize(Light, Value); Model->SetLightSize(Light, Value);
} }
else if (Item == mLightAreaSizeYItem) else if (Item == mLightSizeYItem)
{ {
lcVector2 Value = Light->GetAreaSize(); lcVector2 Value = Light->GetSize();
Value[1] = lcParseValueLocalized(Editor->text()); Value[1] = lcParseValueLocalized(Editor->text());
Model->SetAreaLightSize(Light, Value); Model->SetLightSize(Light, Value);
}
else if (Item == lightFactorA)
{
float Value = lcParseValueLocalized(Editor->text());
if (Item == lightFactorA)
Props.mLightFactor[0] = Value;
Model->UpdateLight(Light, Props, LC_LIGHT_FACTOR);
} }
else if (Item == lightDiffuse) else if (Item == lightDiffuse)
{ {
@ -1162,14 +1154,13 @@ void lcQPropertiesTree::SetEmpty()
lightEnableCutoff = nullptr; lightEnableCutoff = nullptr;
lightExponent = nullptr; lightExponent = nullptr;
mLightTypeItem = nullptr; mLightTypeItem = nullptr;
lightFactorA = nullptr;
mLightNameItem = nullptr; mLightNameItem = nullptr;
mLightSpotConeAngleItem = nullptr; mLightSpotConeAngleItem = nullptr;
mLightSpotPenumbraAngleItem = nullptr; mLightSpotPenumbraAngleItem = nullptr;
mLightSpotTightnessItem = nullptr; mLightSpotTightnessItem = nullptr;
mLightAreaShapeItem = nullptr; mLightAreaShapeItem = nullptr;
mLightAreaSizeXItem = nullptr; mLightSizeXItem = nullptr;
mLightAreaSizeYItem = nullptr; mLightSizeYItem = nullptr;
lightFormat = nullptr; lightFormat = nullptr;
mLightCastShadowItem = nullptr; mLightCastShadowItem = nullptr;
lightAreaGridRows = nullptr; lightAreaGridRows = nullptr;
@ -1411,7 +1402,7 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
QString Format, ExponentToolTip, FactorAToolTip, FactorBToolTip; QString Format, ExponentToolTip, FactorAToolTip, FactorBToolTip;
lcLightType LightType = lcLightType::Point; lcLightType LightType = lcLightType::Point;
lcLightAreaShape LightAreaShape = lcLightAreaShape::Rectangle; lcLightAreaShape LightAreaShape = lcLightAreaShape::Rectangle;
lcVector2 LightAreaSize(0.0f, 0.0f); lcVector2 LightSize(0.0f, 0.0f);
int FormatIndex = 0; int FormatIndex = 0;
float Diffuse = 0.0f; float Diffuse = 0.0f;
float Specular = 0.0f; float Specular = 0.0f;
@ -1425,7 +1416,6 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
lcVector3 Target(0.0f, 0.0f, 0.0f); lcVector3 Target(0.0f, 0.0f, 0.0f);
QColor Color(Qt::white); QColor Color(Qt::white);
float SpotConeAngle = 0.0f, SpotPenumbraAngle = 0.0f, SpotTightness = 0.0f; float SpotConeAngle = 0.0f, SpotPenumbraAngle = 0.0f, SpotTightness = 0.0f;
lcVector2 Factor(0.0f, 0.0f);
lcVector2 AreaGrid(0.0f, 0.0f); lcVector2 AreaGrid(0.0f, 0.0f);
if (Light) if (Light)
@ -1443,38 +1433,22 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
SpotConeAngle = Light->GetSpotConeAngle(); SpotConeAngle = Light->GetSpotConeAngle();
SpotPenumbraAngle = Light->GetSpotPenumbraAngle(); SpotPenumbraAngle = Light->GetSpotPenumbraAngle();
Factor = Light->mLightFactor;
LightType = Light->GetLightType(); LightType = Light->GetLightType();
LightAreaShape = Light->GetAreaShape(); LightAreaShape = Light->GetAreaShape();
LightAreaSize = Light->GetAreaSize(); LightSize = Light->GetSize();
switch (LightType) switch (LightType)
{ {
case lcLightType::Point: case lcLightType::Point:
FactorALabel = tr("Radius (m)");
FactorAToolTip = tr("The light size for shadow sampling in metres.");
ExponentLabel = tr("Exponent"); ExponentLabel = tr("Exponent");
break; break;
case lcLightType::Spot: case lcLightType::Spot:
FactorBToolTip = tr("The softness of the spotlight edge."); FactorBToolTip = tr("The softness of the spotlight edge.");
ExponentLabel = tr("Power"); ExponentLabel = tr("Power");
if (POVRayLight)
{
FactorALabel = tr("Radius (°)");
FactorAToolTip = tr("The angle between the \"hot-spot\" edge at the beam center and the center line.");
}
else
{
FactorALabel = tr("Radius (m)");
FactorAToolTip = tr("Shadow soft size - Light size in metres for shadow sampling.");
}
break; break;
case lcLightType::Directional: case lcLightType::Directional:
FactorALabel = tr("Angle (°)");
FactorAToolTip = tr("Angular diamater of the sun as seen from the Earth.");
ExponentLabel = tr("Strength"); ExponentLabel = tr("Strength");
break; break;
@ -1522,10 +1496,11 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
switch (LightType) switch (LightType)
{ {
case lcLightType::Point: case lcLightType::Point:
mLightSizeXItem = addProperty(mLightAttributesItem, tr("Radius"), PropertyFloat);
mLightSizeXItem->setToolTip(1, tr("Shadow soft size (Blender only)."));
break; break;
case lcLightType::Spot: case lcLightType::Spot:
{
mLightSpotConeAngleItem = addProperty(mLightAttributesItem, tr("Spot Cone Angle"), PropertyFloat); mLightSpotConeAngleItem = addProperty(mLightAttributesItem, tr("Spot Cone Angle"), PropertyFloat);
mLightSpotConeAngleItem->setToolTip(1, tr("The angle (in degrees) of the spot light's beam.")); mLightSpotConeAngleItem->setToolTip(1, tr("The angle (in degrees) of the spot light's beam."));
@ -1534,14 +1509,17 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
mLightSpotTightnessItem = addProperty(mLightAttributesItem, tr("Spot Tightness"), PropertyFloat); mLightSpotTightnessItem = addProperty(mLightAttributesItem, tr("Spot Tightness"), PropertyFloat);
mLightSpotTightnessItem->setToolTip(1, tr("Additional exponential spot light edge softening (POV-Ray only).")); mLightSpotTightnessItem->setToolTip(1, tr("Additional exponential spot light edge softening (POV-Ray only)."));
}
mLightSizeXItem = addProperty(mLightAttributesItem, tr("Radius"), PropertyFloat);
mLightSizeXItem->setToolTip(1, tr("Shadow soft size (Blender only)."));
break; break;
case lcLightType::Directional: case lcLightType::Directional:
mLightSizeXItem = addProperty(mLightAttributesItem, tr("Angle"), PropertyFloat);
mLightSizeXItem->setToolTip(1, tr("Angular diameter of the light (Blender only)."));
break; break;
case lcLightType::Area: case lcLightType::Area:
{
mLightAreaShapeItem = addProperty(mLightAttributesItem, tr("Area Shape"), PropertyStringList); mLightAreaShapeItem = addProperty(mLightAttributesItem, tr("Area Shape"), PropertyStringList);
mLightAreaShapeItem->setToolTip(1, tr("The shape of the area light.")); mLightAreaShapeItem->setToolTip(1, tr("The shape of the area light."));
@ -1549,19 +1527,19 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
{ {
case lcLightAreaShape::Rectangle: case lcLightAreaShape::Rectangle:
case lcLightAreaShape::Ellipse: case lcLightAreaShape::Ellipse:
mLightAreaSizeXItem = addProperty(mLightAttributesItem, tr("Area Width"), PropertyFloat); mLightSizeXItem = addProperty(mLightAttributesItem, tr("Area Width"), PropertyFloat);
mLightAreaSizeXItem->setToolTip(1, tr("The width (X direction) of the area light.")); mLightSizeXItem->setToolTip(1, tr("The width (X direction) of the area light."));
mLightAreaSizeYItem = addProperty(mLightAttributesItem, tr("Area Height"), PropertyFloat); mLightSizeYItem = addProperty(mLightAttributesItem, tr("Area Height"), PropertyFloat);
mLightAreaSizeYItem->setToolTip(1, tr("The height (Y direction) of the area light.")); mLightSizeYItem->setToolTip(1, tr("The height (Y direction) of the area light."));
break; break;
case lcLightAreaShape::Square: case lcLightAreaShape::Square:
case lcLightAreaShape::Disk: case lcLightAreaShape::Disk:
mLightAreaSizeXItem = addProperty(mLightAttributesItem, tr("Area Size"), PropertyFloat); mLightSizeXItem = addProperty(mLightAttributesItem, tr("Area Size"), PropertyFloat);
mLightAreaSizeXItem->setToolTip(1, tr("The size of the area light.")); mLightSizeXItem->setToolTip(1, tr("The size of the area light."));
mLightAreaSizeYItem = nullptr; mLightSizeYItem = nullptr;
break; break;
case lcLightAreaShape::Count: case lcLightAreaShape::Count:
@ -1573,7 +1551,6 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
lightAreaGridRows = addProperty(mLightAttributesItem, tr("Grid Rows"), PropertyFloat); lightAreaGridRows = addProperty(mLightAttributesItem, tr("Grid Rows"), PropertyFloat);
lightAreaGridColumns = addProperty(mLightAttributesItem, tr("Grid Columns"), PropertyFloat); lightAreaGridColumns = addProperty(mLightAttributesItem, tr("Grid Columns"), PropertyFloat);
} }
}
break; break;
case lcLightType::Count: case lcLightType::Count:
@ -1582,9 +1559,6 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
lightExponent = addProperty(mLightAttributesItem, ExponentLabel, PropertyFloat); lightExponent = addProperty(mLightAttributesItem, ExponentLabel, PropertyFloat);
if ((LightType == lcLightType::Point || LightType == lcLightType::Directional) && !POVRayLight)
lightFactorA = addProperty(mLightAttributesItem, FactorALabel, PropertyFloat);
if (!POVRayLight) if (!POVRayLight)
{ {
if (LightType != lcLightType::Directional) if (LightType != lcLightType::Directional)
@ -1658,49 +1632,31 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
lightFormat->setText(1, Format); lightFormat->setText(1, Format);
lightFormat->setData(0, PropertyValueRole, FormatIndex); lightFormat->setData(0, PropertyValueRole, FormatIndex);
mLightTypeItem->setText(1, lcLight::GetTypeString(LightType)); mLightTypeItem->setText(1, lcLight::GetLightTypeString(LightType));
mLightTypeItem->setData(0, PropertyValueRole, static_cast<int>(LightType)); mLightTypeItem->setData(0, PropertyValueRole, static_cast<int>(LightType));
mLightCastShadowItem->setCheckState(1, CastShadow ? Qt::Checked : Qt::Unchecked); mLightCastShadowItem->setCheckState(1, CastShadow ? Qt::Checked : Qt::Unchecked);
mLightCastShadowItem->setData(0, PropertyValueRole, CastShadow); mLightCastShadowItem->setData(0, PropertyValueRole, CastShadow);
mLightSizeXItem->setText(1, lcFormatValueLocalized(LightSize[0]));
mLightSizeXItem->setData(0, PropertyValueRole, LightSize[0]);
if (mLightSizeYItem)
{
mLightSizeYItem->setText(1, lcFormatValueLocalized(LightSize[1]));
mLightSizeYItem->setData(0, PropertyValueRole, LightSize[1]);
}
lightExponent->setText(1, lcFormatValueLocalized(Exponent)); lightExponent->setText(1, lcFormatValueLocalized(Exponent));
lightExponent->setData(0, PropertyValueRole, Exponent); lightExponent->setData(0, PropertyValueRole, Exponent);
lightExponent->setToolTip(1, ExponentToolTip); lightExponent->setToolTip(1, ExponentToolTip);
if ((LightType == lcLightType::Point || LightType == lcLightType::Directional) && !POVRayLight) switch (LightType)
{ {
lightFactorA->setText(1, lcFormatValueLocalized(Factor[0])); case lcLightType::Point:
lightFactorA->setData(0, PropertyValueRole, Factor[0]); break;
lightFactorA->setToolTip(1, FactorAToolTip);
}
else if (LightType == lcLightType::Area)
{
mLightAreaShapeItem->setText(1, lcLight::GetAreaShapeString(LightAreaShape));
mLightAreaShapeItem->setData(0, PropertyValueRole, static_cast<int>(LightAreaShape));
mLightAreaSizeXItem->setText(1, lcFormatValueLocalized(LightAreaSize[0])); case lcLightType::Spot:
mLightAreaSizeXItem->setData(0, PropertyValueRole, LightAreaSize[0]);
if (mLightAreaSizeYItem)
{
mLightAreaSizeYItem->setText(1, lcFormatValueLocalized(LightAreaSize[1]));
mLightAreaSizeYItem->setData(0, PropertyValueRole, LightAreaSize[1]);
}
if (POVRayLight)
{
lightAreaGridRows->setText(1, lcFormatValueLocalized(AreaGrid[0]));
lightAreaGridRows->setData(0, PropertyValueRole, AreaGrid[0]);
lightAreaGridRows->setToolTip(1, tr("The number of sample rows in the area light."));
lightAreaGridColumns->setText(1, lcFormatValueLocalized(AreaGrid[1]));
lightAreaGridColumns->setData(0, PropertyValueRole, AreaGrid[1]);
lightAreaGridColumns->setToolTip(1, tr("The number of sample columns in the area light."));
}
}
else if (LightType == lcLightType::Spot)
{
mLightSpotConeAngleItem->setText(1, lcFormatValueLocalized(SpotConeAngle)); mLightSpotConeAngleItem->setText(1, lcFormatValueLocalized(SpotConeAngle));
mLightSpotConeAngleItem->setData(0, PropertyValueRole, SpotConeAngle); mLightSpotConeAngleItem->setData(0, PropertyValueRole, SpotConeAngle);
mLightSpotConeAngleItem->setData(0, PropertyRangeRole, QPointF(1.0, 180.0)); mLightSpotConeAngleItem->setData(0, PropertyRangeRole, QPointF(1.0, 180.0));
@ -1712,6 +1668,29 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
mLightSpotTightnessItem->setText(1, lcFormatValueLocalized(SpotTightness)); mLightSpotTightnessItem->setText(1, lcFormatValueLocalized(SpotTightness));
mLightSpotTightnessItem->setData(0, PropertyValueRole, SpotTightness); mLightSpotTightnessItem->setData(0, PropertyValueRole, SpotTightness);
mLightSpotTightnessItem->setData(0, PropertyRangeRole, QPointF(0.0, 100.0)); mLightSpotTightnessItem->setData(0, PropertyRangeRole, QPointF(0.0, 100.0));
break;
case lcLightType::Directional:
break;
case lcLightType::Area:
mLightAreaShapeItem->setText(1, lcLight::GetAreaShapeString(LightAreaShape));
mLightAreaShapeItem->setData(0, PropertyValueRole, static_cast<int>(LightAreaShape));
if (POVRayLight)
{
lightAreaGridRows->setText(1, lcFormatValueLocalized(AreaGrid[0]));
lightAreaGridRows->setData(0, PropertyValueRole, AreaGrid[0]);
lightAreaGridRows->setToolTip(1, tr("The number of sample rows in the area light."));
lightAreaGridColumns->setText(1, lcFormatValueLocalized(AreaGrid[1]));
lightAreaGridColumns->setData(0, PropertyValueRole, AreaGrid[1]);
lightAreaGridColumns->setToolTip(1, tr("The number of sample columns in the area light."));
}
break;
case lcLightType::Count:
break;
} }
if (!POVRayLight) if (!POVRayLight)

View file

@ -145,10 +145,8 @@ protected:
QTreeWidgetItem* mLightSpotPenumbraAngleItem; QTreeWidgetItem* mLightSpotPenumbraAngleItem;
QTreeWidgetItem* mLightSpotTightnessItem; QTreeWidgetItem* mLightSpotTightnessItem;
QTreeWidgetItem* mLightAreaShapeItem; QTreeWidgetItem* mLightAreaShapeItem;
QTreeWidgetItem* mLightAreaSizeXItem; QTreeWidgetItem* mLightSizeXItem;
QTreeWidgetItem* mLightAreaSizeYItem; QTreeWidgetItem* mLightSizeYItem;
QTreeWidgetItem* lightFactorA;
QTreeWidgetItem* lightFactorB;
QTreeWidgetItem* mLightNameItem; QTreeWidgetItem* mLightNameItem;
QTreeWidgetItem* lightFormat; QTreeWidgetItem* lightFormat;
QTreeWidgetItem* mLightCastShadowItem; QTreeWidgetItem* mLightCastShadowItem;