[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22271] branches/soc-2009-chingachgook/ source/blender/collada: Added lamp options export/import.
Chingiz Dyussenov
chingiz.ds at gmail.com
Thu Aug 6 20:30:46 CEST 2009
Revision: 22271
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22271
Author: chingachgook
Date: 2009-08-06 20:30:44 +0200 (Thu, 06 Aug 2009)
Log Message:
-----------
Added lamp options export/import.
Modified Paths:
--------------
branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp
branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp
Modified: branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp 2009-08-06 18:22:41 UTC (rev 22270)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp 2009-08-06 18:30:44 UTC (rev 22271)
@@ -184,7 +184,7 @@
Object *ob = base->object;
if (ob->type == OB_CAMERA && ob->data) {
- f(ob);
+ f(ob, sce);
}
base= base->next;
}
@@ -1561,29 +1561,29 @@
closeLibrary();
}
- void operator()(Object *ob)
+ void operator()(Object *ob, Scene *sce)
{
// XXX add other params later
Camera *cam = (Camera*)ob->data;
- std::string cam_name(id_name(ob));
+ std::string cam_id(id_name(ob));
+ char *name = cam->id.name;
+
if (cam->type == CAM_PERSP) {
COLLADASW::PerspectiveOptic persp(mSW);
persp.setXFov(1.0);
- //persp.setYFov(1.0);
- persp.setAspectRatio(1.0);
+ persp.setAspectRatio(0.1);
persp.setZFar(cam->clipend);
persp.setZNear(cam->clipsta);
- COLLADASW::Camera ccam(mSW, &persp, cam_name);
+ COLLADASW::Camera ccam(mSW, &persp, cam_id, name);
addCamera(ccam);
}
else {
COLLADASW::OrthographicOptic ortho(mSW);
ortho.setXMag(1.0);
- //ortho.setYMag(1.0, true);
- ortho.setAspectRatio(1.0);
+ ortho.setAspectRatio(0.1);
ortho.setZFar(cam->clipend);
ortho.setZNear(cam->clipsta);
- COLLADASW::Camera ccam(mSW, &ortho, cam_name);
+ COLLADASW::Camera ccam(mSW, &ortho, cam_id, name);
addCamera(ccam);
}
}
@@ -1604,37 +1604,49 @@
void operator()(Object *ob)
{
Lamp *la = (Lamp*)ob->data;
- std::string la_name(id_name(ob));
+ std::string la_id(id_name(ob));
+ char *la_name = la->id.name;
COLLADASW::Color col(la->r, la->g, la->b);
+ float e = la->energy;
// sun
if (la->type == LA_SUN) {
- COLLADASW::DirectionalLight cla(mSW, la_name, "", la->energy);
+ 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_name, "", la->energy);
+ COLLADASW::AmbientLight cla(mSW, la_id, la_name, e);
cla.setColor(col);
addLight(cla);
}
// spot
// XXX add other params later
else if (la->type == LA_SPOT) {
- COLLADASW::SpotLight cla(mSW, la_name, "", la->energy);
+ COLLADASW::SpotLight cla(mSW, la_id, la_name, e);
cla.setColor(col);
+ cla.setFallOffAngle(la->spotsize);
+ cla.setLinearAttenuation(la->att1);
+ cla.setQuadraticAttenuation(la->att2);
addLight(cla);
}
// lamp
- else if (la->type != LA_AREA) {
- COLLADASW::PointLight cla(mSW, la_name, "", la->energy);
+ else if (la->type == LA_LOCAL) {
+ COLLADASW::PointLight cla(mSW, la_id, la_name, e);
cla.setColor(col);
+ cla.setLinearAttenuation(la->att1);
+ cla.setQuadraticAttenuation(la->att2);
addLight(cla);
}
+ // area lamp is not supported
+ // it will be exported as a local lamp
else {
- // XXX write error
- return;
+ COLLADASW::PointLight cla(mSW, la_id, la_name, e);
+ cla.setColor(col);
+ cla.setLinearAttenuation(la->att1);
+ cla.setQuadraticAttenuation(la->att2);
+ addLight(cla);
}
}
};
Modified: branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp 2009-08-06 18:22:41 UTC (rev 22270)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp 2009-08-06 18:30:44 UTC (rev 22271)
@@ -1181,7 +1181,7 @@
for(int j = 0; j < vca.getCount(); j++){
int count = vca[j];
if (count < 3) {
- fprintf(stderr, "Primitive %s in %s has at least one face with vertex count < 3 or > 4\n",
+ fprintf(stderr, "Primitive %s in %s has at least one face with vertex count < 3\n",
type_str, name);
return false;
}
@@ -2499,12 +2499,17 @@
@return The writer should return true, if writing succeeded, false otherwise.*/
virtual bool writeCamera( const COLLADAFW::Camera* camera )
{
- std::string name = camera->getOriginalId();
- Camera *cam = (Camera*)add_camera((char*)name.c_str());
+ Camera *cam;
+ std::string cam_id = camera->getOriginalId();
+ std::string cam_name = camera->getName();
+ if (cam_name.size()) cam = (Camera*)add_camera((char*)cam_name.c_str());
+ else cam = (Camera*)add_camera((char*)cam_id.c_str());
+
if (!cam) {
fprintf(stderr, "Cannot create camera. \n");
return true;
}
+
COLLADAFW::Camera::CameraType type = camera->getCameraType();
switch(type) {
case COLLADAFW::Camera::ORTHOGRAPHIC:
@@ -2555,12 +2560,22 @@
@return The writer should return true, if writing succeeded, false otherwise.*/
virtual bool writeLight( const COLLADAFW::Light* light )
{
- std::string name = light->getOriginalId();
- Lamp *lamp = (Lamp*)add_lamp((char*)name.c_str());
+ Lamp *lamp;
+ std::string la_id = light->getOriginalId();
+ std::string la_name = light->getName();
+ if (la_name.size()) lamp = (Lamp*)add_lamp((char*)la_name.c_str());
+ else lamp = (Lamp*)add_lamp((char*)la_id.c_str());
+
if (!lamp) {
fprintf(stderr, "Cannot create lamp. \n");
return true;
}
+ if (light->getColor().isValid()) {
+ COLLADAFW::Color col = light->getColor();
+ lamp->r = col.getRed();
+ lamp->g = col.getGreen();
+ lamp->b = col.getBlue();
+ }
COLLADAFW::Light::LightType type = light->getLightType();
switch(type) {
case COLLADAFW::Light::AMBIENT_LIGHT:
@@ -2571,6 +2586,9 @@
case COLLADAFW::Light::SPOT_LIGHT:
{
lamp->type = LA_SPOT;
+ lamp->att1 = light->getLinearAttenuation().getValue();
+ lamp->att2 = light->getQuadraticAttenuation().getValue();
+ lamp->spotsize = light->getFallOffAngle().getValue();
}
break;
case COLLADAFW::Light::DIRECTIONAL_LIGHT:
@@ -2580,7 +2598,9 @@
break;
case COLLADAFW::Light::POINT_LIGHT:
{
- lamp->type = LA_AREA;
+ lamp->type = LA_LOCAL;
+ lamp->att1 = light->getLinearAttenuation().getValue();
+ lamp->att2 = light->getQuadraticAttenuation().getValue();
}
break;
case COLLADAFW::Light::UNDEFINED:
@@ -2592,8 +2612,6 @@
}
this->uid_lamp_map[light->getUniqueId()] = lamp;
-
- // XXX import light options*/
return true;
}
More information about the Bf-blender-cvs
mailing list