Ejemplo n.º 1
0
/* general OpenGL initialization function */
int initGL( )
{

    /* Enable smooth shading */
    glShadeModel( GL_SMOOTH );

    /* Set the background black */
    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );

    /* Depth buffer setup */
    glClearDepth( 1.0f );

    /* Enables Depth Testing */
    glEnable( GL_DEPTH_TEST );

    /* The Type Of Depth Test To Do */
    glDepthFunc( GL_LEQUAL );

    /* Really Nice Perspective Calculations */
    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );

    our_font.init("simfang.ttf", 16);

    return( TRUE );
}
Ejemplo n.º 2
0
//note to self- C++ argv[] starts with the name of the file (moshball.exe 10 is 2 arguments)
int main(int argc, char* argv[]){

	//Starting up DevIL
	ilInit();
	iluInit();
	ilutInit();
	ilutRenderer(ILUT_OPENGL); 

	int seed = 0;
	//Dealing with command line arguments

	//2 actual arguments- number of balls , random number seed
	//more than 2 arguments is treated the same as 2 arguments
	if(argc >= 3){
		seed = atoi(argv[2]);
		numTargets = atoi(argv[1]);
	}

	//1 actual argument- number of balls
	else if(argc == 2){
		numTargets = atoi(argv[1]);
		seed = 0;
	}

	//nothing provided- default seed of 0, 10 balls(set in global)
	else{
		seed = 0;
	}

	//TODO- check input for doubles, other strange errors (if I have time)


	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
	//TODO- any other display modes?? Probably.

	glutInitWindowPosition(0, 0);
	glutInitWindowSize(320, 200);
	glutCreateWindow("Moshball");

	glutDisplayFunc(DisplayFunc);
	glutReshapeFunc(ReshapeFunc);
	glutKeyboardFunc(KeyboardFunc);
	glutPassiveMotionFunc(mouseMotion);
	glutCloseFunc(CloseFunc);

	InitShaders();

	if (glewInit() != GLEW_OK)
			throw std::string("GLEW failed to initialize.");

	//Should allow closeFunc to run after exit, cleaning memory
	glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION);

	glutTimerFunc(period, TimerFunc, 0);

	glutFullScreen();

	//TODO- can we even use multisampling without glext.h included??
	glEnable(GL_MULTISAMPLE);
	glEnable(GL_NORMALIZE);


	our_font.init("C:\\windows\\fonts\\micross.ttf", 72);

	skybox_id[0] = ilutGLLoadImage("interstellar_large.jpg");
	if(skybox_id[0] == 0)
		throw std::string("Skybox1 texture not found.");

	skybox_id[1] = ilutGLLoadImage("skybox_texture.jpg");

	if(skybox_id[1] == 0)
		throw std::string("Skybox2 texture not found.");

	skybox_id[2] = ilutGLLoadImage("skybox3.png");

	if(skybox_id[1] == 0)
		throw std::string("Skybox3 texture not found.");

	assert(skybox_id != 0);
	//TODO- implement error checking for loading the texture
	//(the above throw statement doesn't work yet, and the assert won't work outside debug mode)

	//Set up the targets and arena (****after GL is initialized****)
	createTargets(seed);
	ourArena = new Arena();
	ourArena->setUpScreens();


	glutMainLoop();

	//TODO
	//After main loop: Clean memory
	//any display lists (not after GLUT is done, it won't understand)
	//all heap allocated things
	//all of the shader stuff in video memory **IMPORTANT**
	string user;

	cout << "Game has ended at time " << localTime << endl;
	if(targetsHit == numTargets){
		cout << "You've Won!" << endl;
	}
	else cout << "Game terminated early" << endl;
	cout << "Hit enter to exit:" << endl;
	//doesn't really care if you've also typed something, just consumes the line.
	getline(cin, user);


	return 0;
}
Ejemplo n.º 3
0
//=================================================================
//	int InitGL(GLvoid)	
//	setup for OpenGL 
//==================================================================
int InitGL(GLvoid)										
{
	float df = 100.0f;
	

	glClearDepth(1.0f);									// Depth Buffer Setup
	glEnable(GL_DEPTH_TEST);							// Enables Depth Testing
	glDepthFunc(GL_LEQUAL);								// The Type Of Depth Testing To Do
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);	// Really Nice Perspective Calculations

	glClearColor(0,0,0,0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glShadeModel(GL_SMOOTH);
	glEnable(GL_CULL_FACE);
	glEnable(GL_DEPTH_TEST);

	glMaterialfv(GL_FRONT,GL_SPECULAR,spec);
	glMaterialfv(GL_FRONT,GL_SHININESS,&df);

	glEnable(GL_LIGHTING);
	glLightfv(GL_LIGHT0,GL_POSITION,posl);
	glLightfv(GL_LIGHT0,GL_AMBIENT,amb2);
	glEnable(GL_LIGHT0);

	glLightModelfv(GL_LIGHT_MODEL_AMBIENT,amb);
	glEnable(GL_COLOR_MATERIAL);
	glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);

	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE);

	glEnable(GL_TEXTURE_2D);
	LoadGLTextures();
	
	//Construct billboarded explosion primitive as display list
	//4 quads at right angles to each other
	glNewList(dlist=glGenLists(1), GL_COMPILE);
	glBegin(GL_QUADS);
	glRotatef(-45,0,1,0);
	glNormal3f(0,0,1);
	glTexCoord2f(0.0f, 0.0f); glVertex3f(-50,-40,0);
	glTexCoord2f(0.0f, 1.0f); glVertex3f(50,-40,0);
	glTexCoord2f(1.0f, 1.0f); glVertex3f(50,40,0);
	glTexCoord2f(1.0f, 0.0f); glVertex3f(-50,40,0);
	glNormal3f(0,0,-1);
	glTexCoord2f(0.0f, 0.0f); glVertex3f(-50,40,0);
	glTexCoord2f(0.0f, 1.0f); glVertex3f(50,40,0);
	glTexCoord2f(1.0f, 1.0f); glVertex3f(50,-40,0);
	glTexCoord2f(1.0f, 0.0f); glVertex3f(-50,-40,0);

	glNormal3f(1,0,0);
	glTexCoord2f(0.0f, 0.0f); glVertex3f(0,-40,50);
	glTexCoord2f(0.0f, 1.0f); glVertex3f(0,-40,-50);
	glTexCoord2f(1.0f, 1.0f); glVertex3f(0,40,-50);
	glTexCoord2f(1.0f, 0.0f); glVertex3f(0,40,50);
	glNormal3f(-1,0,0);
	glTexCoord2f(0.0f, 0.0f); glVertex3f(0,40,50);
	glTexCoord2f(0.0f, 1.0f); glVertex3f(0,40,-50);
	glTexCoord2f(1.0f, 1.0f); glVertex3f(0,-40,-50);
	glTexCoord2f(1.0f, 0.0f); glVertex3f(0,-40,50);
	
	glEnd();
	glEndList();
    
	font.init("knight.TTF", 20);
	font1.init("test.TTF", 13);
	
	return TRUE;										
}
Ejemplo n.º 4
0
int main(int argc, char * argv[])
{
	srand(unsigned int(time(NULL)));

	// glutInit must be the first thing to use OpenGL
	glutInit(&argc, argv);

	// Initializes the Develeoper's Imaging Library. This is the library that will be used to load images in different formats
	// for use as textures. This library is old - others are better in some ways but unusable in others.
	ilInit();

	// Add a line here for every shader defined. This will take care of loading and unloading.
	shaders.push_back(ShaderInitializer(&phong_shader, "per-fragment-phong.vs.glsl", "per-fragment-phong.fs.glsl", "phong shader failed to initialize"));
	shaders.push_back(ShaderInitializer(&constant_shader, "constant.vs.glsl", "constant.fs.glsl", "phong shader failed to initialize"));

	// Adds objects to the world. These instances are for the massive mashup of shapes.
	Instance::DefineInstances(instances, NUMBER_OF_OBJECTS);

	glutInitWindowSize(512, 512);
	glutInitWindowPosition(-1, -1);
	glutInitDisplayMode(DISPLAY_MODE);

	// By setting this action, control is returned to our program when glutLeaveMainLoop is called. Without this, the program exits.
	glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE , GLUT_ACTION_CONTINUE_EXECUTION);

	// By setting this option, all windows created in the program share the same OpenGL context. This means all buffers and shaders and such need be instantiated only once.
	glutSetOption(GLUT_RENDERING_CONTEXT , GLUT_USE_CURRENT_CONTEXT);

	// This is the grid constellation initialization. The preferred argument is n^2.
	gc.Initialize(525);

	// This vector is used to initialize all the window objects. 
	//windows.push_back(Window("Basic Shape Viewer" , nullptr , nullptr , nullptr , nullptr , ivec2(512 , 512) , 50.0f , 1.0f , 100.0f));
	windows.push_back(Window("Cylinder" , DisplayCylinder , nullptr , nullptr , nullptr , ivec2(512 , 512) , 50.0f , 1.0f , 100.0f));
	windows.push_back(Window("Plane" , DisplayPlane , nullptr , nullptr , nullptr , ivec2(512 , 512) , 50.0f , 1.0f , 100.0f));
	windows.push_back(Window("Disc" , DisplayDisc , nullptr , nullptr , nullptr , ivec2(512 , 512) , 50.0f , 1.0f , 100.0f));
	windows.push_back(Window("Cube", DisplayCube, nullptr, nullptr, nullptr, ivec2(512, 512), 50.0f, 1.0f, 100.0f));
	windows.push_back(Window("Grid" , DisplayGrid , nullptr , nullptr , nullptr , ivec2(512 , 512) , 50.0f , 1.0f , 400.0f));
	Window::InitializeWindows(windows , DisplayFunc , KeyboardFunc , CloseFunc, ReshapeFunc , IdleFunc);

	// This must be called AFTER an OpenGL context has been built.
	if (glewInit() != GLEW_OK)
	{
		cerr << "GLEW failed to initialize." << endl;
		cerr << "Hit enter to exit:";
		cin.get();
		return 0;
	}

	// This must be called AFTER initializing GLEW - else non of the 
	// new GL features will be found.
	if (!ShaderInitializer::Initialize(&shaders))
	{
		cerr << "Hit enter to exit:";
		cin.get();
		return 0;
	}

	our_font.init("c:\\windows\\fonts\\Candarai.ttf" , 128);
	
	// Add any textures needed here. This will someday be replaced with a function
	// doing the same thing but taking its list of textures from a URI.
	if (!InitializeTextures())
	{
		cerr << "Hit enter to exit:";
		cin.get();
		return 0;
	}

#ifdef FULL_SCREEN
	glutFullScreen();
#endif
	
	glutMainLoop();

	ShaderInitializer::TakeDown(&shaders);
	ILContainer::TakeDown(textures);
	return 0;
}