00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef MSL_RENDERGLOBJ_H
00022 #define MSL_RENDERGLOBJ_H
00023
00024 #include <fstream.h>
00025 #include <stdio.h>
00026 #include <ctype.h>
00027 #include <stdlib.h>
00028 #include <math.h>
00029 #include <unistd.h>
00030 #include <string>
00031 #include <algorithm>
00032
00033
00034 #include "triangle.h"
00035 #include "vector.h"
00036 #include "matrix.h"
00037 #include "point3d.h"
00038
00039 #include <GL/glut.h>
00040 #include <GL/gl.h>
00041 #include <GL/glu.h>
00042
00043 #define BUFFER_SIZE 4096
00044 #define FACE_SIZE 2048
00045 #define CHUNK 2048
00046 #define MAX_MTL_FILES 512
00047 #define MAXNAME_LENGTH 50
00048
00049
00050 #define MinX -100.0
00051 #define MinY -100.0
00052 #define MaxX 100.0
00053 #define MaxY 100.0
00054 #define MinZ 100.0
00055 #define MaxZ 300.0
00056 #define RESET_ID 200
00057 #define RADIO_GROUP1 201
00058 #define RECORD_PATH_ID 202
00059 #define DISPLAY_PATH_ID 203
00060 #define NEW_PATH_ID 204
00061 #define VIEW_ORIENTATION_ID 205
00062 #define BODY_SELECTION_ID 206
00063 #define TEXTURE_ON_OFF_ID 207
00064 #define SINGLE_MULTI_VIEW_ID 208
00065 #define RELOAD_MODEL_ID 209
00066 #define TRANSPARENCY_ADJUST_ID 210
00067 #define BEGIN_FLIGHT_ID 211
00068 #define PLANE_LAND_ID 212
00069 #define MODEL_FLY_ID 213
00070 #define CREATE_OBJECT_ID 214
00071 #define DELETE_OBJECT_ID 215
00072 #define CURRENT_OBJECT_ID 216
00073 #define CREATE_OBJECT_OVER_ID 217
00074 #define CREATE_POINT_ID 218
00075 #define CREATE_POINT_OVER_ID 219
00076 #define CURRENT_TEXTURE_ID 220
00077 #define OBJECT_SELECTION_ID 221
00078 #define PLAN_ID 222
00079 #define ANIMATE_ID 223
00080 #define SET_INITIAL_ID 224
00081 #define SAVE_GEOMETRY_ID 225
00082 #define SET_GOAL_ID 226
00083 #define ANIMATE_PAUSE_ID 227
00084 #define SAVE_CONFIG_ID 228
00085 #define AUTOMATIC_PLAN_ID 229
00086 #define LIGHT_COMPONENT_SELECTION_ID 230
00087 #define LIGHT_MODE_SELECTION_ID 231
00088 #define ANIMATION_RATE_ID 232
00089 #define LOAD_CONFIG_ID 233
00090 #define SINGLE_VIEW 300
00091 #define MULTI_VIEW 301
00092 #define OBSTACLE_MODE 302
00093 #define ROBOT_MODE 303
00094 #define Z_MOVE_MODE 304
00095 #define SCALE_MOVE_MODE 305
00096 #define ORI_MOVE_MODE 306
00097 #define SELECT_BOUNDINGBOX_ID 307
00098 #define SHOW_BOUNDINGBOX_ID 308
00099 #define HIDE_BOUNDINGBOX_ID 309
00100 #define SUN_LIGHT_MODE 310
00101 #define EYE_LIGHT_MODE 311
00102
00103
00104
00105
00106
00107
00108 void rotate_x_MSLMatrix(double sita, MSLMatrix& m);
00109 void rotate_y_MSLMatrix(double sita, MSLMatrix& m);
00110 void rotate_z_MSLMatrix(double sita, MSLMatrix& m);
00111
00112 MSLVector point_x_rotation(const double& sita, const MSLVector& p1);
00113 MSLVector point_y_rotation(const double& sita, const MSLVector& p1);
00114 MSLVector point_z_rotation(const double& sita, const MSLVector& p1);
00115
00116 void crossproduct(const MSLVector& v1, const MSLVector& v2, MSLVector& v);
00117
00118 void normalMSLVector(const MSLVector& v1, const MSLVector& v2, MSLVector& v);
00119
00120 MSLVector irpy(const MSLMatrix& R);
00121
00122 MSLMatrix rpy(const MSLVector& v);
00123
00124 MSLVector free_rotate(const MSLVector& axis, const MSLVector& v, double sita);
00125
00126 MSLMatrix free_rotate(const MSLVector& axis, const MSLMatrix& m, double sita);
00127
00128
00129
00130
00131 int strcasecmp __P ((__const char *__s1, __const char *__s2));
00132
00133
00134 #define UPPER(_str) transform(_str.begin(), _str.end(), _str.begin(), toupper)
00135 #define SAME(_a, _b) (UPPER(string(_a)) == UPPER(string(_b)))
00136
00137 typedef struct{
00138 double x;
00139 double y;
00140 double z;
00141 } mslGLVertex;
00142
00143 typedef struct{
00144 double x;
00145 double y;
00146 double z;
00147 } mslGLNormal;
00148
00149 typedef struct{
00150 double x;
00151 double y;
00152 double z;
00153 } mslGLTexCoord;
00154
00155
00156
00158 class Image {
00159 public:
00160 unsigned long sizeX;
00161 unsigned long sizeY;
00162 char *data;
00163
00164 Image();
00165 ~Image();
00166 };
00167
00169 class mslGLMaterial
00170 {
00171 public:
00172 int ID;
00173 char Name[MAXNAME_LENGTH];
00174
00175 GLuint TextureHandle;
00176 Image * TextureImage;
00177 char TextureName[MAXNAME_LENGTH];
00178
00179 GLfloat Diffuse[3];
00180 GLfloat Specular[3];
00181 GLfloat Ambient[3];
00182 GLfloat Color[3];
00183
00184 GLfloat Alpha;
00185 float Shininess;
00186
00187 float Su;
00188 float Sv;
00189
00190 char Reflect[MAXNAME_LENGTH];
00191
00192 int AmbientOn;
00193 int SpecularOn;
00194 int DiffuseOn;
00195 int ShininessOn;
00196 int AlphaOn;
00197 int ReflectOn;
00198 int TwosideOn;
00199 int TextureOn;
00200
00201 mslGLMaterial();
00202 ~mslGLMaterial();
00203
00204 void SetMaterial();
00205 int ImageLoad(int id, string path, string filename);
00206 void Clear();
00207
00208 void Print();
00209 };
00210
00211
00213 class mslGLFace
00214 {
00215 public:
00216 int NumberOfPoint;
00217 int NumberOfNormal;
00218 int NumberOfTexCoord;
00219
00220 mslGLVertex * VerticeCoord;
00221 mslGLNormal * NormalCoord;
00222 mslGLTexCoord * TextureCoord;
00223
00224 int NormalOn;
00225 int TextureOn;
00226 int ColorOn;
00227
00228 int MaterialID;
00229
00230 mslGLFace();
00231 ~mslGLFace();
00232
00233 void AddVertex(const mslGLVertex& ver);
00234 void AddNormal(const mslGLNormal& nor);
00235 void AddTexCoord(const mslGLTexCoord& tex);
00236
00237 void AddVertex(const MSLVector& ver);
00238 void AddNormal(const MSLVector& nor);
00239 void AddTexCoord(const MSLVector& tex);
00240
00241 void Clear();
00242
00243 void PrintVertex();
00244
00245 void DrawFace();
00246 };
00247
00248
00249
00251 class mslGLObject
00252 {
00253 public:
00254
00255 int ID;
00256 string Name;
00257
00258 int NumberOfMaterial;
00259 mslGLMaterial * ObjectMaterialLib;
00260
00261 int NumberOfFace;
00262 mslGLFace * ObjectFaceLib;
00263
00264 float Position[3], Orientation[3];
00265 float Scale[3];
00266
00267 float BoundingBoxMin[3];
00268 float BoundingBoxMax[3];
00269
00270
00271 mslGLObject();
00272 ~mslGLObject();
00273
00274 int ReadModelFile(const string& path, const string& filename);
00275
00276 MSLPoint3d PointCurrentState(const MSLPoint3d& po, int mode);
00277
00278 list<MSLTriangle> SetBoundingBoxTriangle(int mode);
00279
00280 void LoadMaterialFile(const string& path, const string& name);
00281 int SetCurrentMaterialID(char * name);
00282 void SetMaterial(int matid);
00283 void AddMaterial(const string& path, const mslGLMaterial& mat);
00284 void AddFace(const mslGLFace& face);
00285 void ParseTexture(char * next, mslGLMaterial * mat);
00286 void Clear();
00287
00288 void ObjectDraw();
00289 void ObjectBoundingBoxDraw();
00290 void ObjectHighlight();
00291
00292 void SetObjectPosition(const MSLVector& pos);
00293 void SetObjectOrientation(const MSLVector& ori);
00294 void SetObjectScale(const MSLVector& sca);
00295
00296 void SetBodyPositionChange(const MSLVector& posc);
00297 void SetBodyOrientationChange(const MSLVector& oric);
00298 void SetBodyScaleChange(const MSLVector& scac);
00299
00300 void PrintFace();
00301 void PrintMaterial();
00302 void PrintState();
00303 };
00304
00305
00306
00307 mslGLNormal NormalCompute(const mslGLVertex& v1, const mslGLVertex& v2,
00308 const mslGLVertex& v3);
00309
00310
00311
00312 #endif
00313