Exemple #1
0
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
}
Exemple #3
0
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");
}