Panda3D

maxToEggConverter.h

00001 // Filename: maxToEggConverter.h
00002 // Created by Corey Revilla and Ken Strickland (6/22/03)
00003 // from mayaToEggConverter.cxx created by drose (10Nov99)
00004 //
00005 ////////////////////////////////////////////////////////////////////
00006 //
00007 // PANDA 3D SOFTWARE
00008 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00009 //
00010 // All use of this software is subject to the terms of the revised BSD
00011 // license.  You should have received a copy of this license along
00012 // with this source code in a file named "LICENSE."
00013 //
00014 ////////////////////////////////////////////////////////////////////
00015 
00016 #ifndef __maxToEggConverter__H
00017 #define __maxToEggConverter__H
00018 
00019 #pragma conform(forScope, off)
00020 
00021 /* Error-Reporting Includes
00022  */
00023 #define MTEC Logger::ST_MAP_ME_TO_APP_SPECIFIC_SYSTEM4
00024 
00025 /* Helpful Defintions and Casts
00026  */
00027 #define null 0
00028 #define PHYSIQUE_CLASSID Class_ID(PHYSIQUE_CLASS_ID_A, PHYSIQUE_CLASS_ID_B)
00029 
00030 /* External Helper Functions for UI
00031  */
00032 // *** Figure out why this is causing link errors
00033 //DWORD WINAPI ProgressBarFunction(LPVOID arg);
00034 
00035 ////////////////////////////////////////////////////////////////////
00036 //       Class : MaxToEggConverter
00037 // Description : This class supervises the construction of an EggData
00038 //               structure from a Max model
00039 ////////////////////////////////////////////////////////////////////
00040 class MaxToEggConverter {
00041  public:
00042     MaxToEggConverter();
00043     ~MaxToEggConverter();
00044 
00045     bool convert(MaxEggOptions *options);
00046     
00047  private:
00048     struct PandaMaterial {
00049         std::vector<PT(EggTexture)> _texture_list;
00050         LColor _color;
00051         std::vector<int> _map_channels;
00052         bool _any_diffuse;
00053         bool _any_opacity;
00054         bool _any_gloss;
00055         bool _any_normal;
00056     };
00057     typedef std::map<Mtl*,PandaMaterial> MaterialMap;
00058     MaxEggOptions    *_options;
00059     int               _current_frame;
00060     PT(EggData)       _egg_data;
00061     string            _program_name;
00062     MaxNodeTree       _tree;
00063     int               _cur_tref;
00064     EggTextureCollection _textures;
00065     MaterialMap       _material_map;
00066     
00067     void reset();
00068 
00069     bool convert_char_model();
00070     bool convert_char_chan(double start_frame, double end_frame, 
00071                            double frame_inc, double output_frame_rate);
00072     bool convert_hierarchy(EggGroupNode *egg_root);
00073     bool process_model_node(MaxNodeDesc *node_desc);
00074     
00075     void get_transform(INode *max_node, EggGroup *egg_group);
00076     LMatrix4d get_object_transform(INode *max_node);
00077     void get_joint_transform(INode *max_node, EggGroup *egg_group);
00078     void get_joint_transform(INode *max_node, INode *parent_node, 
00079                              EggGroup *egg_group);
00080     
00081     bool make_nurbs_curve(NURBSCVCurve *curve, const string &name,
00082                           TimeValue time, EggGroup *egg_group);
00083     void make_polyset(INode *max_node,
00084                       Mesh *mesh,
00085                       EggGroup *egg_group,
00086                       Shader *default_shader = NULL);
00087 
00088     Point3 get_max_vertex_normal(Mesh *mesh, int faceNo, int vertNo);
00089     VertColor get_max_vertex_color(Mesh *mesh, int FaceNo, int VertexNo);
00090     VertColor get_max_vertex_color(Mesh *mesh,int FaceNo,int VertexNo, int channel);
00091     UVVert get_max_vertex_texcoord(Mesh *mesh, int faceNo, int vertNo, int channel);
00092     
00093     void get_vertex_weights(INode *max_node, EggVertexPool *vpool);
00094 
00095     const PandaMaterial &get_panda_material(Mtl *mtl, MtlID id);
00096     void analyze_diffuse_maps(PandaMaterial &pandaMat, Texmap *m);
00097     void analyze_opacity_maps(PandaMaterial &pandaMat, Texmap *m);
00098     void analyze_gloss_maps(PandaMaterial &pandaMat, Texmap *m);
00099     void analyze_glow_maps(PandaMaterial &pandaMat, Texmap *m);
00100     void analyze_normal_maps(PandaMaterial &pandaMat, Texmap *m);
00101     void add_map_channel(PandaMaterial &pandaMat, int channel);
00102     void apply_texture_properties(EggTexture &tex, int channel);
00103     std::string generate_tex_name();
00104     std::string get_uv_name(int n);
00105     bool reparent_decals(EggGroupNode *egg_parent);
00106     
00107  public:
00108     
00109     Modifier* FindSkinModifier (INode* node, const Class_ID &type);
00110 };
00111 
00112 
00113 #endif
 All Classes Functions Variables Enumerations