void objload(const char *name,OBJECT *k) /* Loads Object From File (name) */ { int i; /* Loop index */ int ver; /* Will Hold Vertice Count */ float rx,ry,rz; /* Hold Vertex X, Y & Z Position */ FILE *filein; /* Filename To Open */ char oneline[255]; /* Holds One Line Of Text (255 Chars Max) */ filein = fopen(name, "rt"); /* Opens The File For Reading Text In Translated Mode */ if(NULL == filein) /* Test if file opening failed */ { printf("Error loading file %s: objload\n",name); exit(1); /* exit */ } /* CTRL Z Symbolizes End Of File In Translated Mode */ readstr(filein,oneline); /* Jumps To Code That Reads One Line Of Text From The File */ sscanf(oneline, "Vertices: %d\n", &ver); /* Scans Text For "Vertices: ". Number After Is Stored In ver */ k->verts=ver; /* Sets Objects verts Variable To Equal The Value Of ver */ objallocate(k,ver); /* Jumps To Code That Allocates Ram To Hold The Object */ for(i = 0;i < ver;i++) /* Loops Through The Vertices */ { readstr(filein,oneline); /* Reads In The Next Line Of Text */ sscanf(oneline, "%f %f %f", &rx, &ry, &rz); /* Searches For 3 Floating Point Numbers, Store In rx,ry & rz */ k->points[i].x = rx; /* Sets Objects (k) points.x Value To rx */ k->points[i].y = ry; /* Sets Objects (k) points.y Value To ry */ k->points[i].z = rz; /* Sets Objects (k) points.z Value To rz */ } fclose(filein); /* Close The File */ if(ver > maxver) /* If ver Is Greater Than maxver Set maxver Equal To ver */ maxver = ver; /* Keeps Track Of Highest Number Of Vertices Used In Any Of The Objects */ }
void objload(char *name,Obj *k) // Loads Object From File (name) { int ver; // Will Hold Vertice Count float rx,ry,rz; // Hold Vertex X, Y & Z Position FILE *filein; // Filename To Open char oneline[255]; // Holds One Line Of Text (255 Chars Max) filein = fopen(name, "rt"); // Opens The File For Reading Text In Translated Mode // CTRL Z Symbolizes End Of File In Translated Mode readstr(filein,oneline); // Jumps To Code That Reads One Line Of Text From The File sscanf(oneline, "Vertices: %d\n", &ver); // Scans Text For "Vertices: ". Number After Is Stored In ver k->verts=ver; // Sets Objects verts Variable To Equal The Value Of ver objallocate(k,ver); // Jumps To Code That Allocates Ram To Hold The Object for (int i=0;i<ver;i++) // Loops Through The Vertices { readstr(filein,oneline); // Reads In The Next Line Of Text sscanf(oneline, "%f %f %f", &rx, &ry, &rz); // Searches For 3 Floating Point Numbers, Store In rx,ry & rz k->points[i].x = rx; // Sets Objects (k) points.x Value To rx k->points[i].y = ry; // Sets Objects (k) points.y Value To ry k->points[i].z = rz; // Sets Objects (k) points.z Value To rz printf("%f %f %f\n", rx, ry, rz); } fclose(filein); // Close The File if(ver>maxver) maxver=ver; // If ver Is Greater Than maxver Set maxver Equal To ver }
int Initialize() /* All Setup For OpenGL Goes Here */ { int i; /* Loop index */ glBlendFunc(GL_SRC_ALPHA,GL_ONE); /* Set The Blending Function For Translucency */ glClearColor(0.0f, 0.0f, 0.0f, 0.0f); /* This Will Clear The Background Color To Black */ glClearDepth(1.0); /* Enables Clearing Of The Depth Buffer */ glDepthFunc(GL_LESS); /* The Type Of Depth Test To Do */ glEnable(GL_DEPTH_TEST); /* Enables Depth Testing */ glShadeModel(GL_SMOOTH); /* Enables Smooth Color Shading */ glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); /* Really Nice Perspective Calculations */ maxver=0; /* Sets Max Vertices To 0 By Default */ objload("data/Sphere.txt",&morph1); /* Load The First Object Into morph1 From File sphere.txt */ objload("data/Torus.txt",&morph2); /* Load The Second Object Into morph2 From File torus.txt */ objload("data/Tube.txt",&morph3); /* Load The Third Object Into morph3 From File tube.txt */ objallocate(&morph4,486); /* Manually Reserver Ram For A 4th 468 Vertice Object (morph4) */ for(i = 0;i < 486;i++) /* Loop Through All 468 Vertices */ { morph4.points[i].x=((float)(rand()%14000)/1000)-7; /* morph4 x Point Becomes A Random Float Value From -7 to 7 */ morph4.points[i].y=((float)(rand()%14000)/1000)-7; /* morph4 y Point Becomes A Random Float Value From -7 to 7 */ morph4.points[i].z=((float)(rand()%14000)/1000)-7; /* morph4 z Point Becomes A Random Float Value From -7 to 7 */ } objload("data/Sphere.txt",&helper); /* Load sphere.txt Object Into Helper (Used As Starting Point) */ sour = dest = &morph1; /* Source & Destination Are Set To Equal First Object (morph1) */ return True; /* Initialization Went OK */ }
void myInit(void) { glClearColor(0.0,0.0,0.0,0.0); glClearDepth(1.0); // Enables Clearing Of The Depth Buffer //------------------------------------------------------------Object & Texture // readFile("/Users/jiharu/svn/594CM/gl_obj/obj/triangular/Shatter1.obj"); loadTextures(); #pragma mark blend //DEFINE NIGTHS in some INIT function.. glEnable(GL_LIGHTING); //enable lighting glShadeModel (GL_SMOOTH); //GL_SMOOTH, GL_FLAT //glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations #pragma mark Morph obj loader 2/4 //------------------------------------------------------------Morph obj loader maxver=0; // Sets Max Vertices To 0 By Default objload("/Users/jiharu/svn/594CM/gl_obj/obj/morph/obj3.obj",&morph1); objload("/Users/jiharu/svn/594CM/gl_obj/obj/morph/obj2.obj",&morph2); objload("/Users/jiharu/svn/594CM/gl_obj/obj/morph/obj4.obj",&morph3); objallocate(&morph4,382); // Manually Reserver Ram For A 4th 468 Vertice Object (morph4) New object has 382 vertices for(int i=0;i<382;i++) // Loop Through All 468 Vertices { morph4.points[i].x=((float)(rand()%300)/100)-1.5; // morph4 x Point Becomes A Random Float Value From -7 to 7 morph4.points[i].y=((float)(rand()%300)/100)-1.5; // morph4 y Point Becomes A Random Float Value From -7 to 7 morph4.points[i].z=((float)(rand()%300)/100)-1.5; // morph4 z Point Becomes A Random Float Value From -7 to 7 } objload("/Users/jiharu/svn/594CM/gl_obj/obj/morph/obj3.obj",&helper); // Load sphere.txt Object Into Helper (Used As Starting Point) sour=dest=&morph1; // Source & Destination Are Set To Equal First Object (morph1) #pragma mark - #pragma mark light //------------------------------------------------------------Light //define the lighting model float ambient[] = {0.08, 0.08, 0.01, 1.0}; float diffuse[] = {0.7, 0.7, 0.0, 1.0}; float specular[] = {0.3, 0.3, 0.3, 1.0}; glEnable(GL_LIGHT0); //turn on one of the lights // glDisable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, specular); //------------------------------------------------------------Spot Light 1, 2, & 3 float spot_direction1[] = { 0.0, -1.0, 0.0 }; float ambient1[] = {0.01, .2, 0.5, 1.0}; float diffuse1[] = {0.01, 0.5, 0.5, 1.0}; float specular1[] = {0.0, 0.8, 0.8, 1.0}; glEnable(GL_LIGHT1); //turn on one of the lights // glDisable(GL_LIGHT1); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient1); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse1); glLightfv(GL_LIGHT1, GL_SPECULAR, specular1); glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spot_direction1); glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5); glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5); glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.2); glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 30.0); // degrees glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 2.0); float spot_direction2[] = { 0.0, -1.0, 0.0 }; float ambient2[] = {0.2, 0.1, 0.5, 1.0}; float diffuse2[] = {0.2, 0.5, 0.8, 1.0}; float specular2[] = {0.0, 0.8, 0.8, 1.0}; glEnable(GL_LIGHT2); //turn on one of the lights // glDisable(GL_LIGHT2); glLightfv(GL_LIGHT2, GL_AMBIENT, ambient2); glLightfv(GL_LIGHT2, GL_DIFFUSE, diffuse2); glLightfv(GL_LIGHT2, GL_SPECULAR, specular2); glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, spot_direction2); glLightf(GL_LIGHT2, GL_CONSTANT_ATTENUATION, 1.5); glLightf(GL_LIGHT2, GL_LINEAR_ATTENUATION, 0.8); glLightf(GL_LIGHT2, GL_QUADRATIC_ATTENUATION, 0.2); glLightf (GL_LIGHT2, GL_SPOT_CUTOFF, 45.0); // degrees glLightf (GL_LIGHT2, GL_SPOT_EXPONENT, 1.0); float spot_direction3[] = { .5, -1.0, 0.0 }; float ambient3[] = {0.5, 0.5, 0.5, 1.0}; float diffuse3[] = {1.0, 1.0, 1.0, 1.0}; float specular3[] = {1.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHT3); //turn on one of the lights // glDisable(GL_LIGHT2); glLightfv(GL_LIGHT3, GL_AMBIENT, ambient3); glLightfv(GL_LIGHT3, GL_DIFFUSE, diffuse3); glLightfv(GL_LIGHT3, GL_SPECULAR, specular3); glLightfv(GL_LIGHT3, GL_SPOT_DIRECTION, spot_direction3); glLightf(GL_LIGHT3, GL_CONSTANT_ATTENUATION, 0.5); glLightf(GL_LIGHT3, GL_LINEAR_ATTENUATION, 0.8); glLightf(GL_LIGHT3, GL_QUADRATIC_ATTENUATION, 0.2); glLightf (GL_LIGHT3, GL_SPOT_CUTOFF, 45.0); // degrees glLightf (GL_LIGHT3, GL_SPOT_EXPONENT, 2.0); #pragma mark material //------------------------------------------------------------material //define the material of the object float mat_shininess[] = { 50. }; float mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 }; float mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 }; float mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; float mat_emission[] = {1.0, 0.1, 0.1, 1.0}; glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glClearColor(0.0, 0.0, 0.0, 0.0); glClearAccum(0.0, 0.0, 0.0, 0.0); checkForGLErrors("clearInit"); }