[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37454] trunk/blender/source/blender/ collada: Fix [#27463] COLLADA light quadratic attenuation exported wrong?
Nathan Letwory
nathan at letworyinteractive.com
Mon Jun 13 17:07:36 CEST 2011
Revision: 37454
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37454
Author: jesterking
Date: 2011-06-13 15:07:36 +0000 (Mon, 13 Jun 2011)
Log Message:
-----------
Fix [#27463] COLLADA light quadratic attenuation exported wrong?
Reported by Pelle Johnsen
Fix falloff import. Point light and Spot light always were set to inverse quad, instead of choosing the proper one based on imported values.
The
Modified Paths:
--------------
trunk/blender/source/blender/collada/DocumentImporter.cpp
trunk/blender/source/blender/collada/LightExporter.cpp
Modified: trunk/blender/source/blender/collada/DocumentImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.cpp 2011-06-13 14:56:47 UTC (rev 37453)
+++ trunk/blender/source/blender/collada/DocumentImporter.cpp 2011-06-13 15:07:36 UTC (rev 37454)
@@ -959,12 +959,12 @@
if(IS_EQ(linatt, 0.0f) && quadatt > 0.0f) {
att2 = quadatt;
- d = (1.0f/quadatt) * 2;
+ d = sqrt(1.0f/quadatt);
}
// linear light
else if(IS_EQ(quadatt, 0.0f) && linatt > 0.0f) {
att1 = linatt;
- d = (1.0f/linatt) * 2;
+ d = (1.0f/linatt);
} else if (IS_EQ(constatt, 1.0f)) {
att1 = 1.0f;
} else {
@@ -987,9 +987,12 @@
case COLLADAFW::Light::SPOT_LIGHT:
{
lamp->type = LA_SPOT;
- lamp->falloff_type = LA_FALLOFF_INVSQUARE;
lamp->att1 = att1;
lamp->att2 = att2;
+ if(IS_EQ(att1, 0.0f) && att2 > 0)
+ lamp->falloff_type = LA_FALLOFF_INVSQUARE;
+ if(IS_EQ(att2, 0.0f) && att1 > 0)
+ lamp->falloff_type = LA_FALLOFF_INVLINEAR;
lamp->spotsize = light->getFallOffAngle().getValue();
lamp->spotblend = light->getFallOffExponent().getValue();
}
@@ -1004,9 +1007,12 @@
case COLLADAFW::Light::POINT_LIGHT:
{
lamp->type = LA_LOCAL;
- lamp->falloff_type = LA_FALLOFF_INVSQUARE;
lamp->att1 = att1;
lamp->att2 = att2;
+ if(IS_EQ(att1, 0.0f) && att2 > 0)
+ lamp->falloff_type = LA_FALLOFF_INVSQUARE;
+ if(IS_EQ(att2, 0.0f) && att1 > 0)
+ lamp->falloff_type = LA_FALLOFF_INVLINEAR;
}
break;
case COLLADAFW::Light::UNDEFINED:
Modified: trunk/blender/source/blender/collada/LightExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/LightExporter.cpp 2011-06-13 14:56:47 UTC (rev 37453)
+++ trunk/blender/source/blender/collada/LightExporter.cpp 2011-06-13 15:07:36 UTC (rev 37454)
@@ -68,20 +68,18 @@
std::string la_name(id_name(la));
COLLADASW::Color col(la->r * la->energy, la->g * la->energy, la->b * la->energy);
float e, d, constatt, linatt, quadatt;
- float r;
d = la->dist;
- r = d/2.0f;
constatt = 1.0f;
if(la->falloff_type==LA_FALLOFF_INVLINEAR) {
- linatt = 1.0f / r;
+ linatt = 1.0f / d;
quadatt = 0.0f;
}
else {
linatt = 0.0f;
- quadatt = 1.0f / r;
+ quadatt = 1.0f / (d * d);
}
// sun
More information about the Bf-blender-cvs
mailing list