Changeset 431

Show
Ignore:
Timestamp:
11/25/11 13:56:35 (6 months ago)
Author:
Carsten
Message:

Model Editor:

  • Add support for "debug materials" so that the user can better inspect the surface lighting and surface details of the model.
  • Fixed the definition of the ModelLoaderT's default material, and generally the related serialization of materials.

Closes #90.

Location:
cafu/trunk
Files:
1 added
9 modified

Legend:

Unmodified
Added
Removed
  • cafu/trunk/CaWE/ModelEditor/Renderer3D.cpp

    r285 r431  
    4343    m_RMatTerrainEdit      =MatSys::Renderer->RegisterMaterial(MaterialManager->GetMaterial("CaWE/TerrainEditTool3D")); 
    4444    m_RMatTerrainEyeDropper=MatSys::Renderer->RegisterMaterial(MaterialManager->GetMaterial("CaWE/TerrainEyeDropper")); 
     45    m_RMatWhite            =MatSys::Renderer->RegisterMaterial(MaterialManager->GetMaterial("CaWE/White"            )); 
     46    m_RMatTexturedWireframe=MatSys::Renderer->RegisterMaterial(MaterialManager->GetMaterial("CaWE/TexturedWireframe")); 
    4547} 
    4648 
     
    5658    MatSys::Renderer->FreeMaterial(m_RMatTerrainEdit      ); 
    5759    MatSys::Renderer->FreeMaterial(m_RMatTerrainEyeDropper); 
     60    MatSys::Renderer->FreeMaterial(m_RMatWhite            ); 
     61    MatSys::Renderer->FreeMaterial(m_RMatTexturedWireframe); 
    5862} 
    5963 
  • cafu/trunk/CaWE/ModelEditor/Renderer3D.hpp

    r285 r431  
    5656        MatSys::RenderMaterialT* GetRMatTerrainEditorTool()  const { return m_RMatTerrainEdit;       } 
    5757        MatSys::RenderMaterialT* GetRMatTerrainEyeDropper()  const { return m_RMatTerrainEyeDropper; } 
     58        MatSys::RenderMaterialT* GetRMatWhite()              const { return m_RMatWhite; } 
     59        MatSys::RenderMaterialT* GetRMatTexturedWireframe()  const { return m_RMatTexturedWireframe; } 
    5860 
    5961        /// Returns a "shade" according to the direction of the given normal vector. 
     
    9092        MatSys::RenderMaterialT* m_RMatOverlayOZ;           ///< The render material for selection overlays (added in a second pass) (with polygon z-offset, e.g. for decals). 
    9193        MatSys::RenderMaterialT* m_RMatTerrainEdit;         ///< The render material overlay that is used to render the tool position in a terrain if the terrain edit tool is active. 
    92         MatSys::RenderMaterialT* m_RMatTerrainEyeDropper;   ///< The Render material overlay that is used to render the eyedropper tool position on a terrain. 
     94        MatSys::RenderMaterialT* m_RMatTerrainEyeDropper;   ///< The render material overlay that is used to render the eyedropper tool position on a terrain. 
     95        MatSys::RenderMaterialT* m_RMatWhite;               ///< This render material is intended as "debug" material for models in the Model Editor, so that the user can better inspect the surface lighting of the model. 
     96        MatSys::RenderMaterialT* m_RMatTexturedWireframe;   ///< This render material is intended as "debug" material for models in the Model Editor, so that the user can better inspect the surface details of the model, e.g. at what vertex exactly are the GUI fixture points, etc. 
    9397    }; 
    9498} 
  • cafu/trunk/CaWE/ModelEditor/ScenePropGrid.cpp

    r402 r431  
    5353      m_Model_ShowTriangleNormals(wxConfigBase::Get()->Read("ModelEditor/SceneSetup/Model_ShowTriangleNormals", 0l)!=0), 
    5454      m_Model_ShowTangentSpace(wxConfigBase::Get()->Read("ModelEditor/SceneSetup/Model_ShowTangentSpace", 0l)!=0), 
     55      m_Model_DebugMaterial(0), 
    5556      m_AmbientLightColor(wxColour(wxConfigBase::Get()->Read("ModelEditor/SceneSetup/AmbientLightColor", "rgb(96, 96, 96)"))), 
    5657      m_AmbientTexture(NULL), 
     
    133134    AppendIn(ModelProps, new wxBoolProperty("Show triangle normals", wxPG_LABEL, m_Model_ShowTriangleNormals)); 
    134135    AppendIn(ModelProps, new wxBoolProperty("Show tangent-space", wxPG_LABEL, m_Model_ShowTangentSpace)); 
     136    const wxChar* DebugMaterialStrings[] = { wxT("normal/none"), wxT("plain (white)"), wxT("wire-frame"), NULL }; 
     137    const long    DebugMaterialIndices[] = { 0, 1, 2 }; 
     138    AppendIn(ModelProps, new wxEnumProperty("Debug material", wxPG_LABEL, DebugMaterialStrings, DebugMaterialIndices, m_Model_DebugMaterial)); 
    135139 
    136140 
     
    224228    else if (PropName=="Model.Show triangle normals") m_Model_ShowTriangleNormals=Prop->GetValue().GetBool(); 
    225229    else if (PropName=="Model.Show tangent-space")    m_Model_ShowTangentSpace   =Prop->GetValue().GetBool(); 
     230    else if (PropName=="Model.Debug material")        m_Model_DebugMaterial      =Prop->GetValue().GetInteger(); 
    226231    else if (PropName=="Frame No.") { AnimState.Pose.SetFrameNr(PropValueF); m_IsRecursiveSelfNotify=true; m_Parent->GetModelDoc()->UpdateAllObservers_AnimStateChanged(); m_IsRecursiveSelfNotify=false; } 
    227232    else if (PropName=="Speed")     { AnimState.Speed=PropValueF; m_IsRecursiveSelfNotify=true; m_Parent->GetModelDoc()->UpdateAllObservers_AnimStateChanged(); m_IsRecursiveSelfNotify=false; } 
  • cafu/trunk/CaWE/ModelEditor/ScenePropGrid.hpp

    r402 r431  
    6060        bool                 m_Model_ShowTriangleNormals; 
    6161        bool                 m_Model_ShowTangentSpace; 
     62        unsigned int         m_Model_DebugMaterial;   ///< 0 for "normal/none", 1 for "plain (white)", 2 for "wire-frame" 
    6263        wxColour             m_AmbientLightColor; 
    6364        MatSys::TextureMapI* m_AmbientTexture;    ///< A uniform 2x2 texture colored in the ambient light color, used as lightmap for the ground plane. 
  • cafu/trunk/CaWE/ModelEditor/SceneView3D.cpp

    r429 r431  
    404404    if (ScenePropGrid->m_Model_ShowMesh) 
    405405    { 
     406        switch (ScenePropGrid->m_Model_DebugMaterial) 
     407        { 
     408            case 1: 
     409                MatSys::Renderer->SetCurrentMaterial(m_Renderer.GetRMatWhite()); 
     410                MatSys::Renderer->LockCurrentMaterial(true); 
     411                break; 
     412 
     413            case 2: 
     414                MatSys::Renderer->SetCurrentMaterial(m_Renderer.GetRMatTexturedWireframe()); 
     415                MatSys::Renderer->LockCurrentMaterial(true); 
     416                break; 
     417        } 
     418 
    406419        Anim.Pose.Draw(ModelDoc->GetSelSkinNr(), 0.0f /*LodDist*/); 
    407420 
     
    415428            SmPose.SetSuperPose(NULL); 
    416429        } 
     430 
     431        MatSys::Renderer->LockCurrentMaterial(false); 
    417432    } 
    418433 
  • cafu/trunk/CaWE/res/CaWE.cmat

    r36 r431  
    126126    blue  1.0 
    127127} 
     128 
     129 
     130// This material is intended as "debug" material for models in the Model Editor, 
     131// so that the user can better inspect the surface lighting of the model. 
     132CaWE/White 
     133{ 
     134    diffusemap white.png 
     135 
     136    red   ambientLightRed 
     137    green ambientLightGreen 
     138    blue  ambientLightBlue 
     139} 
     140 
     141 
     142// This material is intended as "debug" material for models in the Model Editor, 
     143// so that the user can better inspect the surface details of the model, 
     144// e.g. at what vertex exactly are the GUI fixture points, etc. 
     145CaWE/TexturedWireframe 
     146{ 
     147    diffusemap white.png 
     148 
     149    red   ambientLightRed 
     150    green ambientLightGreen 
     151    blue  ambientLightBlue 
     152 
     153    // twoSided 
     154    polygonMode wireframe 
     155} 
  • cafu/trunk/Libs/MaterialSystem/Expression.cpp

    r315 r431  
    314314        } 
    315315 
     316        case SymbolTime: 
     317            return "time"; 
     318 
     319        case SymbolALRed: 
     320            return "ambientLightRed"; 
     321 
     322        case SymbolALGreen: 
     323            return "ambientLightGreen"; 
     324 
     325        case SymbolALBlue: 
     326            return "ambientLightBlue"; 
     327 
    316328        default: 
    317329            return "<expr>"; 
  • cafu/trunk/Libs/MaterialSystem/Material.cpp

    r309 r431  
    487487void MaterialT::Save(std::ostream& OutStream) const 
    488488{ 
     489    const static MaterialT RefMat;  // Use a reference object here, just in case we ever change the defaults. 
    489490    const char* INDENT="    "; 
    490491 
     
    514515    if (PolygonMode==Points)    OutStream << INDENT << "polygonMode points"    << "\n"; 
    515516 
    516     float f; const ExpressionT::SymbolsT ExpSym; 
    517     f=AlphaTestValue.Evaluate(ExpSym).GetAsFloat(); if (f>=0.0f) OutStream << INDENT << "alphaTest" << " " << f << "\n"; 
    518     f=RedGen  .Evaluate(ExpSym).GetAsFloat(); if (f!=1.0f) OutStream << INDENT << "red"   << " " << f << "\n"; 
    519     f=GreenGen.Evaluate(ExpSym).GetAsFloat(); if (f!=1.0f) OutStream << INDENT << "green" << " " << f << "\n"; 
    520     f=BlueGen .Evaluate(ExpSym).GetAsFloat(); if (f!=1.0f) OutStream << INDENT << "blue"  << " " << f << "\n"; 
    521     f=AlphaGen.Evaluate(ExpSym).GetAsFloat(); if (f!=1.0f) OutStream << INDENT << "alpha" << " " << f << "\n"; 
     517    mcs=AlphaTestValue.GetString(); if (mcs!="<expr>" && mcs!=RefMat.AlphaTestValue.GetString()) OutStream << INDENT << "alphaTest" << " " << mcs << "\n"; 
     518    mcs=RedGen        .GetString(); if (mcs!="<expr>" && mcs!=RefMat.RedGen        .GetString()) OutStream << INDENT << "red  "     << " " << mcs << "\n"; 
     519    mcs=GreenGen      .GetString(); if (mcs!="<expr>" && mcs!=RefMat.GreenGen      .GetString()) OutStream << INDENT << "green"     << " " << mcs << "\n"; 
     520    mcs=BlueGen       .GetString(); if (mcs!="<expr>" && mcs!=RefMat.BlueGen       .GetString()) OutStream << INDENT << "blue "     << " " << mcs << "\n"; 
     521    mcs=AlphaGen      .GetString(); if (mcs!="<expr>" && mcs!=RefMat.AlphaGen      .GetString()) OutStream << INDENT << "alpha"     << " " << mcs << "\n"; 
    522522 
    523523    if (BlendFactorSrc!=None || BlendFactorDst!=None) 
  • cafu/trunk/Libs/Models/Loader.cpp

    r410 r431  
    150150 // Mat.DepthOffset    =-1.0f; 
    151151    Mat.DiffMapComp    =MapCompositionT("file-not-found", "./"); 
    152  // Mat.RedGen         =ExpressionT(1.0f); 
    153  // Mat.UseMeshColors  =true;       // Mesh colors aren't used for rendering models, but unfortunately required for rendering wire-frame without diffuse-map texture image. 
    154     Mat.TwoSided       =true;       // For wire-frame, render the backsides as well. 
     152    Mat.RedGen         =ExpressionT(ExpressionT::SymbolALRed);      // Modulate the model texture with the ambient light color. 
     153    Mat.GreenGen       =ExpressionT(ExpressionT::SymbolALGreen); 
     154    Mat.BlueGen        =ExpressionT(ExpressionT::SymbolALBlue); 
     155 // Mat.UseMeshColors  =true;   // Mesh colors aren't used for rendering models, but unfortunately required for rendering wire-frame without diffuse-map texture image. 
     156    Mat.TwoSided       =true;   // For wire-frame, render the backsides as well. 
    155157    Mat.meta_EditorSave=EditorSave; 
    156158