Revision: 35705
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35705
Author:   jesterking
Date:     2011-03-22 15:28:56 +0000 (Tue, 22 Mar 2011)
Log Message:
-----------
[#26476] <specular> and <shininess> missing from Colada
reported by Juan Linietsky

Export <specular> for <phong> and <blinn> shaders, <shininess> was already 
being written for these.
<lambert> shader doesn't have <shininess>.

Right now we write <phong> when blender spec is phong, <blinn> when blender 
spec is blinn. When spec is
any other shader, and diffuse shader set to lambert, we export as <lambert>. 
Any other combination defaults
right now to <phong>. This will change when Blender specific profiles have been 
created for the shader
combinations in Blender.

Modified Paths:
--------------
    trunk/blender/source/blender/collada/EffectExporter.cpp
    trunk/blender/source/blender/collada/EffectExporter.h

Modified: trunk/blender/source/blender/collada/EffectExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/EffectExporter.cpp     2011-03-22 
15:25:18 UTC (rev 35704)
+++ trunk/blender/source/blender/collada/EffectExporter.cpp     2011-03-22 
15:28:56 UTC (rev 35705)
@@ -89,6 +89,34 @@
        }
 }
 
+void EffectsExporter::writeBlinn(COLLADASW::EffectProfile &ep, Material *ma)
+{
+       COLLADASW::ColorOrTexture cot;
+       ep.setShaderType(COLLADASW::EffectProfile::BLINN);
+       // shininess
+       ep.setShininess(ma->har);
+       // specular
+       cot = getcol(ma->specr, ma->specg, ma->specb, 1.0f);
+       ep.setSpecular(cot);
+}
+
+void EffectsExporter::writeLambert(COLLADASW::EffectProfile &ep, Material *ma)
+{
+       COLLADASW::ColorOrTexture cot;
+       ep.setShaderType(COLLADASW::EffectProfile::LAMBERT);
+}
+
+void EffectsExporter::writePhong(COLLADASW::EffectProfile &ep, Material *ma)
+{
+       COLLADASW::ColorOrTexture cot;
+       ep.setShaderType(COLLADASW::EffectProfile::PHONG);
+       // shininess
+       ep.setShininess(ma->har);
+       // specular
+       cot = getcol(ma->specr, ma->specg, ma->specb, 1.0f);
+       ep.setSpecular(cot);
+}
+
 void EffectsExporter::operator()(Material *ma, Object *ob)
 {
        // create a list of indices to textures of type TEX_IMAGE
@@ -102,18 +130,17 @@
        ep.openProfile();
        // set shader type - one of three blinn, phong or lambert
        if (ma->spec_shader == MA_SPEC_BLINN) {
-               ep.setShaderType(COLLADASW::EffectProfile::BLINN);
-               // shininess
-               ep.setShininess(ma->har);
+               writeBlinn(ep, ma);
        }
        else if (ma->spec_shader == MA_SPEC_PHONG) {
-               ep.setShaderType(COLLADASW::EffectProfile::PHONG);
-               // shininess
-               ep.setShininess(ma->har);
+               writePhong(ep, ma);
        }
+       else if(ma->diff_shader == MA_DIFF_LAMBERT) {
+               writeLambert(ep, ma);
+       }
        else {
-               // XXX write warning "Current shader type is not supported" 
-               ep.setShaderType(COLLADASW::EffectProfile::LAMBERT);
+               // \todo figure out handling of all spec+diff shader combos 
blender has, for now write phong
+               writePhong(ep, ma);
        }
        // index of refraction
        if (ma->mode & MA_RAYTRANSP) {

Modified: trunk/blender/source/blender/collada/EffectExporter.h
===================================================================
--- trunk/blender/source/blender/collada/EffectExporter.h       2011-03-22 
15:25:18 UTC (rev 35704)
+++ trunk/blender/source/blender/collada/EffectExporter.h       2011-03-22 
15:28:56 UTC (rev 35705)
@@ -61,6 +61,10 @@
        /** Fills the array of mtex indices which have image. Used for 
exporting images. */
        void createTextureIndices(Material *ma, std::vector<int> &indices);
        
+       void writeBlinn(COLLADASW::EffectProfile &ep, Material *ma);
+       void writeLambert(COLLADASW::EffectProfile &ep, Material *ma);
+       void writePhong(COLLADASW::EffectProfile &ep, Material *ma);
+       
        bool hasEffects(Scene *sce);
 };
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to