Пример #1
0
    void main_loop_function()
    {
	    ObjectManager * objManager = ObjectManager::Inst(); //create object manager




	    Cube CubeTest = Cube(1.0f,Vertex(0,0,0)); //create cube and push to object manager
	    objManager->GameObjects.push_back(CubeTest);
/*
	    GLfloat ambient[] = { .5f, .5f, .5f, 1.f };
	    GLfloat diffuse[] = { .5f, .5f, .5f, .6f };
	    GLfloat litepos[] = { 0, 2, 3, 1 };
	    GLfloat litepos2[] = { 0, -2, 5, 1 };

	    glPushMatrix();
	 		    	glLoadIdentity();
	 		    	glEnable(GL_LIGHTING);
	 		    	glLightfv(GL_LIGHT0, GL_AMBIENT,  ambient);
	 		    	glLightfv(GL_LIGHT0, GL_DIFFUSE,  diffuse);
	 		    	glLightfv(GL_LIGHT0, GL_POSITION, litepos);
	 		    	glEnable(GL_LIGHT0);

	 		    	glLightfv(GL_LIGHT1, GL_DIFFUSE,  diffuse);
	 		    	glLightfv(GL_LIGHT1, GL_POSITION, litepos2);
	 		    	glEnable(GL_LIGHT1);
	 		    	glPopMatrix();
*/

	    signed int buttonPause, wireframe, CurrentObj;
	    float RotationX, RotationY, RotationZ, Zoom, Size;
	    RotationX = RotationY = RotationZ = buttonPause = wireframe = CurrentObj = 0;
	    Zoom = -3;
	    Size = 5;
	    while( events() )
	    {
		    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
		    glLoadIdentity();
		    glTranslatef(0,0, Zoom);
		    glRotatef(RotationX,RotationY, 45,45);
		    glPointSize(Size);


		    objManager->Draw();
		    glEnd();


		    SDL_GL_SwapBuffers();

		    // Check keypresses
		    buttonPause = buttonPause > 0 ? --buttonPause : buttonPause; //buffer to stop method being spammed cheap but it works...

		    if( key[SDLK_RIGHT] ){ RotationX-=0.5; }
		    if( key[SDLK_LEFT ] ){ RotationX+=0.5; }
		    if( key[SDLK_UP] ){ RotationY-=0.5; }
		    if( key[SDLK_DOWN ] ){ RotationY+=0.5; }
		    //if( key[SDLK_l] ) { glRotatef(45,4,0,0); } //>
		    if( key[SDLK_k] ) { RotationZ +=0.5; }
		    if( key[SDLK_i]) { Zoom += 0.1;}
		    if( key[SDLK_o]) { Zoom -= 0.1;}
		    if( key[SDLK_0]){RotationX = RotationY = RotationZ == 0;} //reset to center
		    if( key[SDLK_w])
		    {
		    	if( buttonPause == 0)
			    {
					switch(wireframe)
					{
					case 0:
						glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
						++wireframe;
						break;
					case 1:
						glPolygonMode( GL_FRONT_AND_BACK, GL_POINT );
						++wireframe;
						break;
					default:
						glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
						wireframe = 0;
						break;
					}
					buttonPause = 30;
			    }
		    }
		    if( key[SDLK_c])
			{
		    	if(buttonPause == 0)
			    {
#ifdef PrintToConsole
		    		cout << "Catnell clark called";
#endif
					objManager->GameObjects[CurrentObj].visible = false;
					GameObject _ngobj = CatmullClarkSubDivision().Subdivide(objManager->GameObjects[CurrentObj]);
					GameObject* ngobj = new GameObject(_ngobj);
					ngobj->init();
					objManager->GameObjects.push_back(*ngobj);
					++CurrentObj;
					buttonPause = 30;
			    }
			}
		    if( key[SDLK_a])
			{
		    	if(buttonPause == 0)
		    	{
		    		/*
					objManager->GameObjects[CurrentObj].visible = false;
					GameObject _ngobj = ButterflySubspaceDivision().Tessellate(objManager->GameObjects[CurrentObj]);
					GameObject* ngobj = new GameObject(_ngobj);
					ngobj->init();
					objManager->GameObjects.push_back(*ngobj);
					++CurrentObj;
					buttonPause = 30;*/
		    	}
			}




	    }




	    objManager->~ObjectManager();
    }