00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _POLYGONMESH_HH_
00024 #define _POLYGONMESH_HH_
00025
00026 #if defined(_WIN32) && defined(_MSC_VER)
00027 # ifdef A3DL_EXPORTS
00028 # define A3DL_API __declspec(dllexport)
00029 # else
00030 # define A3DL_API __declspec(dllimport)
00031 # endif
00032 #else
00033 # define A3DL_API
00034 #endif
00035
00036 #include <vos/corelibs/vos/vos.hh>
00037 #include <vos/metaobjects/property/property.hh>
00038 #include <vector>
00039 #include "object3d.hh"
00040 #include "portal.hh"
00041
00042 namespace A3DL
00043 {
00044 class A3DL_API PolygonMesh : public virtual Object3D
00045 {
00046 public:
00047 PolygonMesh(MetaObject* superobject);
00048 ~PolygonMesh();
00049
00050 struct Vertex
00051 {
00052 float x, y, z;
00053 };
00054
00055 typedef vector<int> Polygon;
00056
00057 struct Texel
00058 {
00059 float x, y;
00060 };
00061
00062 enum TextureType { NoTexture = 0, UVcoord = 1, PolygonPlane = 2, ArbitraryPlane = 3, TexMatrix = 4};
00063 struct TextureSpace {
00064 TextureType type;
00065 bool isPortal;
00066 unsigned char material;
00067 union {
00068 struct {
00069 int vert1;
00070 float u1, v1;
00071 int vert2;
00072 float u2, v2;
00073 int vert3;
00074 float u3, v3;
00075 } UVcoord;
00076 struct {
00077 float xorg, yorg, zorg;
00078 float x, y, z, len;
00079 } PolygonPlane;
00080 struct {
00081 float xorg, yorg, zorg;
00082 float x1, y1, z1, len1;
00083 float x2, y2, z2, len2;
00084 } ArbitraryPlane;
00085 struct {
00086 float m11, m12, m13;
00087 float m21, m22, m23;
00088 float m31, m32, m33;
00089 float x, y, z;
00090 } Matrix;
00091 } Rep;
00092 };
00093
00094
00095
00096
00097
00098
00099 virtual void setVertex(unsigned int which, Vertex& v);
00100
00101
00102
00103
00104 virtual void setVertices(const vector<Vertex>& v);
00105
00106
00107
00108
00109 virtual void getVertices(vector<Vertex>& v);
00110
00111
00112
00113
00114
00115
00116
00117
00118 virtual void setPolygon(unsigned int which, Polygon& v);
00119
00120
00121
00122
00123 virtual void setPolygons(const vector<Polygon>& v);
00124
00125
00126
00127
00128 virtual void getPolygons(vector<Polygon>& v);
00129
00130
00131
00132
00133
00134
00135 virtual void setNormal(unsigned int which, Vertex& v);
00136
00137
00138
00139
00140 virtual void setNormals(const vector<Vertex>& v);
00141
00142
00143
00144
00145 virtual void getNormals(vector<Vertex>& v);
00146
00147
00148
00149
00150
00151
00152 virtual void setTexel(int which, Texel& v);
00153
00154
00155
00156
00157 virtual void setTexels(const vector<Texel>& v);
00158
00159
00160
00161
00162 virtual void getTexels(vector<Texel>& v);
00163
00164
00165
00166
00167
00168 virtual void setTextureSpace(unsigned int which, const TextureSpace& t);
00169
00170
00171
00172
00173 virtual void setTextureSpaces(const vector<TextureSpace>& t);
00174
00175
00176
00177
00178 virtual void getTextureSpaces(vector<TextureSpace>& t);
00179
00180
00181
00182
00183
00184
00185
00186 virtual void setDoubleSided(bool ds);
00187
00188
00189
00190
00191
00192 virtual bool getDoubleSided();
00193
00194 virtual vector<Portal*> getPortals();
00195
00196 static void unpackTextureSpace(const unsigned char* data, TextureSpace& t);
00197 static void packTextureSpace(unsigned char* data, const TextureSpace& t);
00198
00199 virtual const string getType();
00200 static void registerExtenders();
00201 static MetaObject* new_PolygonMesh(MetaObject* superobject, const string& type);
00202 };
00203 }
00204
00205 #endif