#include <string>
Go to the source code of this file.
Classes | |
struct | Point3Struct |
Typedefs | |
typedef Point3Struct | Point3 |
Enumerations | |
enum | MODELS { MODEL_GALLOWS = 0, MODEL_GALLOWS_ROPE, MODEL_IRON_MAIDEN, MODEL_CRYPT, MODEL_DIABLO, MODEL_CASKET_CLOSED, MODEL_CASKET_OPENED_1, MODEL_CASKET_OPENED_2, MODEL_GILJOTINA_1, MODEL_GILJOTINA_2, MODEL_GILJOTINA_3, MODEL_GILJOTINA_4, MODEL_GRAVEYARD, MODEL_MANCAGE_1, MODEL_MANCAGE_2, MODEL_PLAYER, MODEL_N } |
Functions | |
Point3Struct | operator+ (Point3Struct, Point3Struct) |
void | drawModel (int, int, double, double, double, double, double, double, double, double, double, double) |
void | drawFaces (int, double) |
void | deleteModels () |
int | addModel (std::string) |
Variables | |
std::string | model_name [MODEL_N] |
bool | model_in_use [MODEL_N] |
unsigned int | model_index [MODEL_N] |
bool | model_use_list [MODEL_N] |
int | model_handle [MODEL_N] |
|
Referenced by addModel(), drawFaces(), and operator+(). |
|
Definition at line 18 of file scene.h.
00018 { 00019 MODEL_GALLOWS = 0, 00020 MODEL_GALLOWS_ROPE, 00021 MODEL_IRON_MAIDEN, 00022 MODEL_CRYPT, 00023 MODEL_DIABLO, 00024 MODEL_CASKET_CLOSED, 00025 MODEL_CASKET_OPENED_1, 00026 MODEL_CASKET_OPENED_2, 00027 MODEL_GILJOTINA_1, 00028 MODEL_GILJOTINA_2, 00029 MODEL_GILJOTINA_3, 00030 MODEL_GILJOTINA_4, 00031 MODEL_GRAVEYARD, 00032 MODEL_MANCAGE_1, 00033 MODEL_MANCAGE_2, 00034 MODEL_PLAYER, 00035 MODEL_N 00036 }; |
|
Referenced by initGL(). |
|
|
|
Draw Faces Given the array of vertices and array of faces this function ouputs the vertices of triangle strips or triangles defining these faces Input: handle, scaling factor glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT ); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texture(TEX_CHECK)); Definition at line 232 of file scene.cpp. References Faces, Model_partStruct::ind_faces, ModelStruct::ind_model_parts, Model_partStruct::ind_vertices, Model_parts, Models, Model_partStruct::nfaces, normal, Normals, Point3, and Vertices. Referenced by drawModel().
00233 { 00234 ModelStruct *model = ((ModelStruct *)Models + handle); 00235 Model_partStruct *model_part; 00236 //printf(" model has %d model_parts \n", model -> nmodel_parts); 00237 00238 Point3 vertex[3]; 00239 Point3Struct * vertex_ptr; 00240 Point3 normal; 00241 Point3Struct * normal_ptr; 00242 long face; 00243 long *face_ptr; 00244 00245 double A, B, C, D; 00246 double cosalpha, cosbeta, cosgamma, mu; 00247 Point3 tex[3]; 00248 00249 double oldbeta; 00250 double alpha, beta, gamma; 00251 00252 //setDiffuseMaterialColor( colorWhite ); 00253 00254 00255 00256 //cout << "start of faces array " << (int) ((long *)Faces) << endl; 00257 00258 //glPushMatrix(); 00259 00260 00261 00262 glDisable( GL_TEXTURE_GEN_S); 00263 glDisable( GL_TEXTURE_GEN_T); 00264 glDisable( GL_TEXTURE_GEN_R); 00265 /* 00266 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 00267 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); 00268 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST ); 00269 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL ); 00270 */ 00278 for (int i=0; i < model -> nmodel_parts; i++) 00279 {//drawing every part as a separate object 00280 //cout << "drawing part " << i << endl; 00281 //cout.flush(); 00282 00283 model_part = ((Model_partStruct *)Model_parts + model->ind_model_parts + i); 00284 00285 //cout << "start of the face " << (int) ((long *)Faces + model_part->ind_faces) << endl; 00286 //cout << "end of the face " << (int) ((long *)Faces + model_part->ind_faces + (model_part->nfaces-1)*3 + 2) << endl; 00287 00288 //glPushMatrix(); 00289 00290 for (int j=0; j < model_part->nfaces; j++ ) 00291 {//drawing every face 00292 00293 //cout << j << ","; 00294 //cout.flush(); 00295 normal_ptr = ((Point3 *)Normals + model_part->ind_faces + j); 00296 normal = *normal_ptr; 00297 00298 for (int k=0; k < 3; k++ ) 00299 { 00300 face_ptr = ((long *)Faces + model_part->ind_faces*3 + j*3 + k); 00301 face = *face_ptr; 00302 00303 vertex_ptr = ((Point3 *)Vertices + model_part->ind_vertices + face); 00304 vertex[k] = *vertex_ptr; 00305 00306 }//end for k 00307 00308 /* 00309 //determining the coefficients in plane's equation 00310 A = ( (vertex[1].y - vertex[0].y)*(vertex[2].z - vertex[0].z) ) - ( (vertex[1].z - vertex[0].z)*(vertex[2].y - vertex[0].y) ); 00311 B = ( (vertex[1].z - vertex[0].z)*(vertex[2].x - vertex[0].x) ) - ( (vertex[2].z - vertex[0].z)*(vertex[1].x - vertex[0].x) ); 00312 C = ( (vertex[1].x - vertex[0].x)*(vertex[2].y - vertex[0].y) ) - ( (vertex[1].y - vertex[0].y)*(vertex[2].x - vertex[0].x) ); 00313 D = - ( vertex[0].x*A + vertex[0].y*B + vertex[0].z*C ); 00314 00315 if (D < 0) 00316 { 00317 //normalizing 00318 D = -D; 00319 A = -A; 00320 B = -B; 00321 C = -C; 00322 } 00323 00324 //computing normalized equation of the plane 00325 //since (D >= 0) we certainly know which root to take for mu 00326 mu = (-1) / sqrt( A*A + B*B + C*C ); 00327 00328 //printf(" mu = %f, A = %f, B = %f, C = %f, D = %f \n", mu, A, B, C, D ); 00329 00330 cosalpha = mu * A; 00331 cosbeta = mu * B; 00332 cosgamma = mu * C; 00333 00334 alpha = acos (cosgamma);// - M_PI/2; 00335 beta = acos (cosbeta) ; 00336 gamma = acos (cosgamma) ; 00337 00338 oldbeta = beta; 00339 //alpha += M_PI/2; 00340 00341 beta *= cos(alpha ); 00342 //beta += M_PI/2; 00343 gamma = gamma*(cos(oldbeta ) ) ; 00344 gamma = gamma*(sin(alpha)); 00345 //gamma += M_PI; 00346 //gamma *=sin(alpha ); 00347 00348 glDisable(GL_TEXTURE_2D); 00349 glMatrixMode ( GL_TEXTURE ); 00350 glLoadIdentity (); 00351 00352 glRotated ( gamma * 180.0f/M_PI , 0, 1, 0); 00353 glRotated ( beta * 180.0f/M_PI, 0, 0, 1); 00354 glRotated ( alpha * 180.0f/M_PI, 1, 0, 0); 00355 00356 glMatrixMode (GL_MODELVIEW); 00357 00358 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); 00359 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); 00360 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT ); 00361 00362 glEnable(GL_TEXTURE_2D); 00363 glBindTexture(GL_TEXTURE_2D, texture(TEX_CHECK)); 00364 00365 //printf(" cos is %f, %f, %f \n", cosalpha, cosbeta, cosgamma ); 00366 //printf(" acos is %f, %f, %f \n", acos(cosalpha)*180.0f/M_PI, acos(cosbeta)*180/M_PI, acos(cosgamma)*180/M_PI ); 00367 00368 //glMatrixMode (GL_MODELVIEW); 00369 00370 for (int k=0; k<3; k++) 00371 { 00372 tex[k].x = vertex[k].x*scale/5; 00373 tex[k].y = vertex[k].y*scale/5; 00374 tex[k].z = vertex[k].z*scale/5; 00375 } 00376 00377 00378 */ 00379 //printf(" x=%f y=%f \n", texture[0].x, texture[0].y); 00380 glBegin(GL_TRIANGLES); 00382 glNormal3d( normal.x, normal.y, normal.z); 00383 00384 for (int k=0; k<3; k++) 00385 { 00386 // glTexCoord3d( tex[k].x, tex[k].y, tex[k].z ); 00387 glVertex3d( vertex[k].x, vertex[k].y, vertex[k].z); 00388 }//end for k 00389 glEnd(); 00390 00391 //glPopMatrix(); 00392 }//end for j 00393 00394 //glPopMatrix(); 00395 00396 }//end for i 00397 glDisable(GL_TEXTURE_2D); 00398 //glPopMatrix(); 00399 00400 00401 00402 00403 //cout << " all parts are drawn"; 00404 //cout.flush(); 00405 00406 /* 00407 glBegin(GL_TRIANGLES); 00408 00409 glNormal3d( normal.x / len, normal.y / len, normal.z / len ); 00410 glVertex3d(vertexa.x, vertexa.y, vertexa.z); 00411 00412 00413 glNormal3d( normal.x / len, normal.y / len, normal.z / len ); 00414 glVertex3d(vertexb.x, vertexb.y, vertexb.z); 00415 00416 00417 glNormal3d( normal.x / len, normal.y / len, normal.z / len ); 00418 glVertex3d(vertexc.x, vertexc.y, vertexc.z); 00419 00420 } 00421 glEnd(); 00422 */ 00423 } |
|
Definition at line 426 of file scene.cpp. References drawFaces(), g_cellsize, g_show_axis, and gethf(). Referenced by __drawModel().
00427 { 00428 00429 if (handle == -1) 00430 { 00431 printf(" Incorrect model handler. Probably, model was not initialized properly. \n "); 00432 exit(1); 00433 } 00434 00435 float hf; 00436 00437 hf = gethf( (int) round(x/g_cellsize), (int) round (y/g_cellsize) ); 00438 00439 //hf *= g_fHeightScale; 00440 00441 //hf -= g_fHeight; 00442 //we start to output vertices in order, defined by face array 00443 //int n= sizeof(gallows_1_face)/ (sizeof(long)*3); 00444 00445 00446 glDisable(GL_AUTO_NORMAL); 00447 glEnable(GL_NORMALIZE); 00448 glDisable(GL_CULL_FACE); 00449 glCullFace(GL_NONE); 00450 glMatrixMode(GL_MODELVIEW); 00451 glPushMatrix(); 00452 glTranslated(x, z + hf, y); 00453 glTranslated(-X, -Z, -Y);//, 0);/-Z);//-Y*g_cellsize, -Z); 00454 glRotated(fi, 1, 0, 0); 00455 glRotated(theta, 0, 1, 0); 00456 glRotated(psi, 0, 0, 1); 00457 glScaled(scale, scale, scale); 00458 /* 00459 if ( model_use_list[model] ) 00460 { 00461 glCallList ( model_index[model] ); 00462 } 00463 else 00464 { 00465 */ 00466 drawFaces (handle, scale); 00467 // } 00468 glPopMatrix(); 00469 00470 glDisable(GL_AUTO_NORMAL); 00471 glDisable(GL_NORMALIZE); 00472 00473 //setDiffuseMaterialColor( colorWhite ); 00474 //coordinate axises for object 00475 if (g_show_axis) 00476 { 00477 glPushMatrix(); 00478 glMatrixMode(GL_MODELVIEW); 00479 glTranslated(x*g_cellsize, z + hf, y*g_cellsize); 00480 glTranslated(-X*g_cellsize, -Z, -Y*g_cellsize);//, 0);//-Z);//-Y*g_cellsize, -Z); 00481 00482 glLineWidth(2); 00483 glBegin(GL_LINES); 00484 glColor3d(1, 0, 0); 00485 glVertex3d(0, 0, 0); 00486 glColor3d(1, 0, 0); 00487 glVertex3d(10, 0, 0); 00488 glEnd(); 00489 00490 glBegin(GL_LINES); 00491 glColor3d(0, 1, 0); 00492 glVertex3d(0, 0, 0); 00493 glColor3d(0, 1, 0); 00494 glVertex3d(0, 12, 0); 00495 glEnd(); 00496 00497 glBegin(GL_LINES); 00498 glColor3d(0, 0, 1); 00499 glVertex3d(0, 0, 0); 00500 glColor3d(0, 0, 1); 00501 glVertex3d(0, 0, 15); 00502 glEnd(); 00503 glLineWidth(1); 00504 00505 glColor3d(1, 1, 1); 00506 00507 glPopMatrix(); 00508 } 00509 00510 //setDiffuseMaterialColor( colorWhite ); 00511 00512 00513 //printf("\n X %f, Y %f , Z %f, ", X, Y, Z); 00514 00515 00516 } |
|
Definition at line 83 of file scene.cpp. References Point3, Point3Struct::x, Point3Struct::y, and Point3Struct::z.
|
|
Definition at line 46 of file scene.h. Referenced by __drawModel(), and initGL(). |
|
Definition at line 40 of file scene.h. Referenced by initGL(), and renderScene(). |
|
Definition at line 42 of file scene.h. Referenced by initGL(), and renderScene(). |
|
Definition at line 38 of file scene.h. Referenced by initGL(). |
|
Definition at line 44 of file scene.h. Referenced by initGL(), and renderScene(). |