[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24093] branches/soc-2009-chingachgook/ source/blender/collada/DocumentExporter.cpp: Bug fix in collada exporter: < light>s and <camera>s used the same ids as <node>s linked with them, this resulted in id duplication and produced invalid DAE.
Arystanbek Dyussenov
arystan.d at gmail.com
Mon Oct 26 18:17:49 CET 2009
Revision: 24093
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24093
Author: kazanbas
Date: 2009-10-26 18:17:46 +0100 (Mon, 26 Oct 2009)
Log Message:
-----------
Bug fix in collada exporter: <light>s and <camera>s used the same ids as <node>s linked with them, this resulted in id duplication and produced invalid DAE. Now appending -light and -camera suffixes for <light> and <camera> id.
Modified Paths:
--------------
branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp
Modified: branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp 2009-10-26 16:48:23 UTC (rev 24092)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp 2009-10-26 17:17:46 UTC (rev 24093)
@@ -134,6 +134,16 @@
return id_name(ob) + "-mesh";
}
+static std::string get_light_id(Object *ob)
+{
+ return id_name(ob) + "-light";
+}
+
+static std::string get_camera_id(Object *ob)
+{
+ return id_name(ob) + "-camera";
+}
+
static void replace_chars(char *str, char chars[], char with)
{
char *ch, *p;
@@ -1180,8 +1190,6 @@
node.setNodeId(id_name(ob));
node.setType(COLLADASW::Node::NODE);
- std::string ob_name(id_name(ob));
-
node.start();
bool is_skinned_mesh = arm_exporter->is_skinned_mesh(ob);
@@ -1221,13 +1229,13 @@
// <instance_camera>
else if (ob->type == OB_CAMERA) {
- COLLADASW::InstanceCamera instCam(mSW, COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, ob_name));
+ COLLADASW::InstanceCamera instCam(mSW, COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, get_camera_id(ob)));
instCam.add();
}
// <instance_light>
else if (ob->type == OB_LAMP) {
- COLLADASW::InstanceLight instLa(mSW, COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, ob_name));
+ COLLADASW::InstanceLight instLa(mSW, COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, get_light_id(ob)));
instLa.add();
}
@@ -1574,7 +1582,8 @@
{
// XXX add other params later
Camera *cam = (Camera*)ob->data;
- std::string cam_id(id_name(ob));
+ std::string cam_id(get_camera_id(ob));
+ std::string cam_name(id_name(cam));
if (cam->type == CAM_PERSP) {
COLLADASW::PerspectiveOptic persp(mSW);
@@ -1582,7 +1591,7 @@
persp.setAspectRatio(0.1);
persp.setZFar(cam->clipend);
persp.setZNear(cam->clipsta);
- COLLADASW::Camera ccam(mSW, &persp, cam_id, cam_id);
+ COLLADASW::Camera ccam(mSW, &persp, cam_id, cam_name);
addCamera(ccam);
}
else {
@@ -1591,7 +1600,7 @@
ortho.setAspectRatio(0.1);
ortho.setZFar(cam->clipend);
ortho.setZNear(cam->clipsta);
- COLLADASW::Camera ccam(mSW, &ortho, cam_id, cam_id);
+ COLLADASW::Camera ccam(mSW, &ortho, cam_id, cam_name);
addCamera(ccam);
}
}
@@ -1612,25 +1621,26 @@
void operator()(Object *ob)
{
Lamp *la = (Lamp*)ob->data;
- std::string la_id(id_name(ob));
+ std::string la_id(get_light_id(ob));
+ std::string la_name(id_name(la));
COLLADASW::Color col(la->r, la->g, la->b);
float e = la->energy;
// sun
if (la->type == LA_SUN) {
- COLLADASW::DirectionalLight cla(mSW, la_id, la_id, e);
+ COLLADASW::DirectionalLight cla(mSW, la_id, la_name, e);
cla.setColor(col);
addLight(cla);
}
// hemi
else if (la->type == LA_HEMI) {
- COLLADASW::AmbientLight cla(mSW, la_id, la_id, e);
+ COLLADASW::AmbientLight cla(mSW, la_id, la_name, e);
cla.setColor(col);
addLight(cla);
}
// spot
else if (la->type == LA_SPOT) {
- COLLADASW::SpotLight cla(mSW, la_id, la_id, e);
+ COLLADASW::SpotLight cla(mSW, la_id, la_name, e);
cla.setColor(col);
cla.setFallOffAngle(la->spotsize);
cla.setFallOffExponent(la->spotblend);
@@ -1640,7 +1650,7 @@
}
// lamp
else if (la->type == LA_LOCAL) {
- COLLADASW::PointLight cla(mSW, la_id, la_id, e);
+ COLLADASW::PointLight cla(mSW, la_id, la_name, e);
cla.setColor(col);
cla.setLinearAttenuation(la->att1);
cla.setQuadraticAttenuation(la->att2);
@@ -1649,7 +1659,7 @@
// area lamp is not supported
// it will be exported as a local lamp
else {
- COLLADASW::PointLight cla(mSW, la_id, la_id, e);
+ COLLADASW::PointLight cla(mSW, la_id, la_name, e);
cla.setColor(col);
cla.setLinearAttenuation(la->att1);
cla.setQuadraticAttenuation(la->att2);
More information about the Bf-blender-cvs
mailing list