00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef VRS_IO_THREEDSREADER_H
00021 #define VRS_IO_THREEDSREADER_H
00022
00023 #include <vrs/sharedobj.h>
00024 #include <vrs/so.h>
00025 #include <vrs/sg/scenething.h>
00026 #include <vrs/io/objectreader.h>
00027
00028 namespace VRS {
00029
00030 template<typename T, typename V> class NonPersistentDictionary;
00031
00033 class VRS_CORE_API ThreeDSReader:public ObjectReader {
00034 public:
00035
00036 ThreeDSReader();
00037 virtual SO<SharedObj> read(DataResource* data, const ID& targetType) const;
00039
00046 const char* objectFormatName() const {return "3D Studio Max";}
00047 const char* objectFileSuffix() const {return "3ds";}
00048
00049 virtual bool canProduce(const ID& targetType) const;
00050
00051
00052 enum TextureMode {
00053 NO_TEXTURES,
00054 FORCE_TEXTURES,
00055
00056 TRY_TEXTURES
00057 };
00058 VRS_SERIALIZABLE_CLASS_ENUM(TextureMode);
00059
00060 enum TextureModulationMode {
00061 MODULATE_TEXTURES_BY_MATERIAL,
00062 MODULATE_TEXTURES_BY_WHITE,
00063 };
00064 VRS_SERIALIZABLE_CLASS_ENUM(TextureModulationMode);
00065
00066 enum ReadMode {
00067 READ_SCENE,
00068 READ_OBJECT
00069 };
00070 VRS_SERIALIZABLE_CLASS_ENUM(ReadMode);
00071
00072 enum MaterialMode {
00073 NO_MATERIAL,
00074 COLORS_ONLY,
00075 ALL_BUT_CULLING_MATERIAL,
00076 COMPLETE_MATERIAL
00077 };
00078 VRS_SERIALIZABLE_CLASS_ENUM(MaterialMode);
00079
00080 enum OptimizationMode {
00081 NO_OPTIMIZATIONS = 0,
00082
00083 DISCARD_UNUSED_DATA = 1,
00084 EXCLUSIVE_OPENGL = 2
00085
00086 };
00087 VRS_SERIALIZABLE_CLASS_ENUM(OptimizationMode);
00088
00089 static std::string noCamera();
00091 static std::string firstCamera();
00093 static std::string firstCameraIfPossible();
00095
00096
00097 static void setTextureMode(TextureMode textureMode);
00099
00100 static void setTextureModulationMode(TextureModulationMode textureModulationMode);
00102
00103 static void setCreateNormals(bool normals);
00105
00109 static void setCollapse(bool collapse);
00111
00118 static void setMetaInfo(bool metaInfo);
00120
00132
00133
00134
00135
00136 static void setContextDataInsertion(bool yesNo);
00137
00138 static void setMaterialMode(MaterialMode materialMode);
00140
00141 static void setReadMode(ReadMode readMode);
00143
00148 static void setOptimizations(unsigned int optimizationMode);
00150
00151 static void setMaxTextureSize(unsigned int maxSize);
00153
00154 static void setCopyTexturesToPow2(bool pow2);
00156
00157
00158 static TextureMode textureMode();
00159 static TextureModulationMode textureModulationMode();
00160 static bool collapse();
00161 static bool metainfo();
00162 static bool contextDataInsertion();
00163 static MaterialMode materialMode();
00164 static ReadMode readMode();
00165 static unsigned int optimizationMode();
00166 static unsigned int maxTextureSize();
00167 static bool copyTexturesToPow2();
00169
00170
00171 static SO<SceneThing> readScene(const std::string& fileName, const std::string& cameraName, bool lights, bool environment);
00172 static SO<SceneThing> readScene(SO<DataResource> data, const std::string& cameraName, bool lights, bool environment);
00174
00182 static SO<SceneThing> readObject(const std::string& fileName, const std::string& objectName = "");
00183 static SO<SceneThing> readObject(SO<DataResource> data, const std::string& objectName = "");
00185
00191 static NonPersistentDictionary< std::string, SO< NonPersistentDictionary< std::string, std::string > > >* readNames(const std::string& fileName);
00193
00200 VRS_TYPEINFO(ThreeDSReader, ObjectReader);
00201
00202 private:
00203 static bool createNormals_;
00204 static bool collapse_;
00205 static bool metainfo_;
00206 static bool s_contextDataInsertion;
00207 static TextureMode texture_;
00208 static TextureModulationMode textureModulation_;
00209 static MaterialMode material_;
00210 static ReadMode readMode_;
00211 static unsigned int opts_;
00212 static unsigned int maxTextureSize_;
00213 static bool copyTexturesToPow2_;
00214
00215
00216 static SO<SceneThing> readImpl(SO<DataResource> d, const std::string& objName, const std::string& camName, bool lights, bool env, ReadMode r);
00217 };
00218
00219 }
00220
00221 #endif // VRS_IO_THREEDSREADER_H