- Cal3D 0.9 API Reference - |
00001 //****************************************************************************// 00002 // submesh.h // 00003 // Copyright (C) 2001, 2002 Bruno 'Beosil' Heidelberger // 00004 //****************************************************************************// 00005 // This library is free software; you can redistribute it and/or modify it // 00006 // under the terms of the GNU Lesser General Public License as published by // 00007 // the Free Software Foundation; either version 2.1 of the License, or (at // 00008 // your option) any later version. // 00009 //****************************************************************************// 00010 00011 #ifndef CAL_SUBMESH_H 00012 #define CAL_SUBMESH_H 00013 00014 //****************************************************************************// 00015 // Includes // 00016 //****************************************************************************// 00017 00018 #include "cal3d/global.h" 00019 #include "cal3d/vector.h" 00020 00021 //****************************************************************************// 00022 // Forward declarations // 00023 //****************************************************************************// 00024 00025 class CalCoreSubmesh; 00026 00027 //****************************************************************************// 00028 // Class declaration // 00029 //****************************************************************************// 00030 00031 /*****************************************************************************/ 00035 class CAL3D_API CalSubmesh 00036 { 00037 // misc 00038 public: 00040 typedef struct 00041 { 00042 CalVector position; 00043 CalVector positionOld; 00044 CalVector force; 00045 } PhysicalProperty; 00046 00048 struct TangentSpace 00049 { 00050 CalVector tangent; 00051 float crossFactor; 00052 }; 00053 00054 00056 typedef struct 00057 { 00058 CalIndex vertexId[3]; 00059 } Face; 00060 00061 // member variables 00062 protected: 00063 CalCoreSubmesh *m_pCoreSubmesh; 00064 std::vector<float> m_vectorMorphTargetWeight; 00065 std::vector<CalVector> m_vectorVertex; 00066 std::vector<CalVector> m_vectorNormal; 00067 std::vector<std::vector<TangentSpace> > m_vectorvectorTangentSpace; 00068 std::vector<Face> m_vectorFace; 00069 std::vector<PhysicalProperty> m_vectorPhysicalProperty; 00070 int m_vertexCount; 00071 int m_faceCount; 00072 int m_coreMaterialId; 00073 bool m_bInternalData; 00074 00075 // constructors/destructor 00076 public: 00077 CalSubmesh(); 00078 virtual ~CalSubmesh(); 00079 00080 // member functions 00081 public: 00082 bool create(CalCoreSubmesh *pCoreSubmesh); 00083 void destroy(); 00084 CalCoreSubmesh *getCoreSubmesh(); 00085 int getCoreMaterialId(); 00086 int getFaceCount(); 00087 int getFaces(CalIndex *pFaceBuffer); 00088 std::vector<CalVector>& getVectorNormal(); 00089 std::vector<std::vector<TangentSpace> >& getVectorVectorTangentSpace(); 00090 std::vector<PhysicalProperty>& getVectorPhysicalProperty(); 00091 00092 /*****************************************************************************/ 00100 inline std::vector<CalVector>& getVectorVertex() 00101 { 00102 return m_vectorVertex; 00103 } 00104 00105 /*****************************************************************************/ 00112 inline int getVertexCount() 00113 { 00114 return m_vertexCount; 00115 } 00116 00117 bool hasInternalData(); 00118 void disableInternalData(); 00119 void setCoreMaterialId(int coreMaterialId); 00120 void setLodLevel(float lodLevel); 00121 bool isTangentsEnabled(int mapId); 00122 bool enableTangents(int mapId, bool enabled); 00123 std::vector<float>& getVectorWeight(); 00124 void setMorphTargetWeight(int blendId,float weight); 00125 float getMorphTargetWeight(int blendId); 00126 float getBaseWeight(); 00127 int getMorphTargetWeightCount(); 00128 std::vector<float>& getVectorMorphTargetWeight(); 00129 00130 }; 00131 00132 #endif 00133 00134 //****************************************************************************//