Beispiel #1
0
void MainWindow::update()
{
	frame++;
	GameClock::getInstance().newFrame();
	//ConsolePrinter::getInstance().print(GameClock::getInstance().dt(), "dt: ");

	KeyInput::getInstance().update();

	SceneManager::getInstance().update();

	//mat->currentOffset.x += 0.01f;
	//testEntity->update();

	//cubeEntity->update();
	keyMove();
	//if(frame == 50)
	//{
	//	wDown=false;
	//	sDown=false;
	//	aDown=false;
	//	dDown=false;
	//	rDown=false;
	//	fDown=false;
	//}
	
	grid.update();

	GeneralGLWindow::getInstance().repaint();
}
 void display() {

	 if(deltaMove) {
		keyMove(deltaMove);
	}
	  
	  //glMatrixMode(GL_MODELVIEW);
	 // gluLookAt(x, y, z, x+lx, y+ly, z+lz, 0.0, 1.0, 0.0);
	// Note: Lighting has been added directly from example four.c so as
	// to demonstrate that the sphere is rotating, otherwise it just 
	// appears to be a circle
 
	GLfloat ambient[4] = { 0.0, 0.0, 0.4, 1.0 };// blue ambient reflection
	GLfloat specular[4] = { 1.1, 0.8, 0.1, 1.0 };// green specular reflection

	glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	//gluLookAt(0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
	 gluLookAt(x, y, z, x+lx, y+ly, z+lz, 0.0, 1.0, 0.0);
	
	glColor3f (1.0f, 1.0f, 1.0f);
	//glBegin(GL_POINTS);
	 printf("image w: %d h: %d\n", image_size.width, image_size.height);
	 for( int l = 0; l < A.rows-1; l++ ) {
		 glBegin(GL_TRIANGLE_STRIP);
		 for( int m = 0; m < A.cols; m++) {
			 //printf("dims: %d\n", A.dims);
			 //printf("element: %d\n", (int)A.at<uchar>(l,m) );
			 glVertex3f( m*0.01, 1-l*0.01, ((int)A.at<uchar>(l,m)) *0.01 );
			 glVertex3f( m*0.01, 1-(l+1)*0.01, ((int)A.at<uchar>(l,m)) *0.01 );
		 }
		 glEnd();
	 }
	 //glEnd();

	 /*
	glColor3f (1.0f, 1.0f, 1.0f);
	glBegin(GL_POINTS);
	for(double i = -1; i <= 1; i+=0.01){
		for(double j = -1; j <= 1; j+=0.01){
			//for(double k = -1; k <= 1; k+=0.01){
				glVertex3f( i, j, 0);
			//}
		}
	}
	glEnd();*/
	glutSwapBuffers();
}
/*
 * void display();
 *
 * The display function displays the animation to the users screen.
 */
void display() {

	if(deltaMove) {
		keyMove(deltaMove);
	}
	glClearStencil(0);
	glClearDepth(1.0f);
	glClearColor(0.05f, 0.05f, 0.05f, 1.0f);

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
	glLoadIdentity();
    
    gluLookAt(x, y, z, x+lx, y+ly, z+lz, 0.0, 1.0, 0.0);
	// MUST BE BEFORE SPHERES ARE DRAWN
	collision_check();
	
	
	if(reflection) {	
	glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
    glDepthMask(GL_FALSE);

	glEnable(GL_STENCIL_TEST);

	glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF);
	glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);

	// DRAW FLOOR 
	glPushMatrix();
	// bottom
	glBegin(GL_QUADS);
	  glVertex3f(-5, 0, -5);
	  glVertex3f(-5, 0,  5);
	  glVertex3f( 5, 0,  5);
	  glVertex3f( 5, 0, -5);
	glEnd();
	glPopMatrix();

	// END DRAW FLOOR

	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
	glDepthMask(GL_TRUE);

	glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF);
	glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);

	glDisable(GL_DEPTH_TEST);
	glPushMatrix();
	glScalef(1.0f, -1.0f, 1.0f);

	// DRAW INVERTED SCENE
		glEnable(GL_LIGHTING);
		draw_spheres(0);
		//draw_dust();
		glDisable(GL_LIGHTING);
		draw_box();
	// END DRAW SCENE

	glPopMatrix();
	}
	glEnable(GL_DEPTH_TEST);
	glDisable(GL_STENCIL_TEST);

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

	// DRAW FLOOR AGAIN
	glPushMatrix();
	glColor4f(0.6f, 0.6f, 0.6f, 0.1f);
	// bottom
	glBegin(GL_QUADS);
	  glVertex3f(-5, 0, -5);
	  glVertex3f(-5, 0,  5);
	  glVertex3f( 5, 0,  5);
	  glVertex3f( 5, 0, -5);
	glEnd();

	// END DRAW FLOOR

	glDisable(GL_BLEND);

	// DRAW SCENE
		glEnable(GL_LIGHTING);
		draw_spheres(1);
		draw_dust();
		glDisable(GL_LIGHTING);
		draw_box();
	// END DRAW SCENE


	//draw_dust();
	//glDisable(GL_LIGHTING);
	//glEnable (GL_BLEND);
	//glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

	//draw_box();
	//
	//glColor4f(0.6f, 0.6f, 0.6f, 0.1f);
	//// bottom
	//glBegin(GL_QUADS);
	//  glVertex3f(-5,  5, -5);
	//  glVertex3f(-5,  5,  5);
	//  glVertex3f( 5,  5,  5);
	//  glVertex3f( 5,  5, -5);
	//glEnd();

	//
	//glDisable(GL_BLEND);
	glDisable(GL_LIGHTING);
    glDisable(GL_DEPTH_TEST);

	if(showText){
		glColor3f( 1.0f, 1.0f, 1.0f);
		glRasterPos3f(x+lx,y+ly,z+lz);
		char blah[20];
		sprintf(blah,"%d - %2.0f %",all_spheres.size(), mass_of_system/next_ball_mass*100);
		glutBitmapString(GLUT_BITMAP_HELVETICA_18, (const unsigned char*)blah);
	}
	glEnable(GL_LIGHTING);
    glEnable(GL_DEPTH_TEST);
	
	spawn_next_ball();
	
	glutSwapBuffers();
}