Exemplo n.º 1
0
void    CGunTurret::DrawDebug()
{
	IPersistantDebug *pDebug = gEnv->pGame->GetIGameFramework()->GetIPersistantDebug();
	pDebug->Begin("CGunTurret::DrawDebug", true);

	Vec3 gun(ZERO),rocket(ZERO),radar(ZERO),barrel(ZERO);

	gun = GetSlotHelperPos(eIGS_ThirdPerson,m_fireHelper,true);
	rocket = GetSlotHelperPos(eIGS_ThirdPerson,m_rocketHelper,true);
	barrel = GetSlotHelperPos(eIGS_ThirdPerson,m_barrelHelper,true);
	radar = GetSlotHelperPos(eIGS_Aux0,m_radarHelper,true);

	pDebug->AddSphere(gun, 0.2f, ColorF(1,0,0,1), 1.f);
	pDebug->AddSphere(rocket, 0.2f, ColorF(0,1,0,1), 1.f);
	pDebug->AddSphere(radar, 0.2f, ColorF(0,0,1,1), 1.f);
	pDebug->AddSphere(barrel, 0.2f, ColorF(1,0,1,1), 1.f);
}
Exemplo n.º 2
0
  /*
  *  OpenGL (GLUT) calls this routine to display the scene
  */
  void display()
  {
    const double len=1.5;  //  Length of axes
    //  Erase the window and the depth buffer
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    //  Enable Z-buffering in OpenGL
    glEnable(GL_DEPTH_TEST);
    //  Undo previous transformations
    glLoadIdentity();
    //  Orthogonal - set world orientation
    if(mode == 0)
    {
      glRotatef(ph,1,0,0);
      glRotatef(th,0,1,0);
    }
    //  Perspective - set eye position
    else if (mode == 1)
    {
      double Ex = -2*dim*Sin(th)*Cos(ph);
      double Ey = +2*dim        *Sin(ph);
      double Ez = +2*dim*Cos(th)*Cos(ph);
      gluLookAt(Ex,Ey,Ez , 0,0,0 , 0,Cos(ph),0);
    }
    // First person view
    else{
		// Recalculate where the camera is looking
		AX = -2*dim*Sin(th)*Cos(ph);
		AY = -2*dim*Sin(ph);
		AZ = -2*dim*Cos(th)*Cos(ph);
		// Orient the scene so it imitates first person movement
		gluLookAt(EX, EY, EZ, AX + EX, AY + EY, AZ + EZ, UX, UY, UZ);
	}


    //  Flat or smooth shading
    // glShadeModel(smooth ? GL_SMOOTH : GL_FLAT);

    //  Light switch
    if (light)
    {
      //  Translate intensity to color vectors
      float Ambient[]   = {0.3,0.3,0.3,1.0};
      float Diffuse[]   = {1,1,1,1};
      float Specular[]  = {1,1,0,1};
      float white[]     = {1,1,1,1};
      //  Light direction
      float Position[]  = {5*Cos(idle),0,5*Sin(idle),1};
      // printf("%f | %f | %f\n" , Position[0] , Position[1] , Position[2]    );
      //  Draw light position as ball (still no lighting here)
      ball(Position[0],Position[1],Position[2] , 0.1);
      //  Enable lighting with normalization
      glEnable(GL_NORMALIZE);
      //  Enable lighting
      glEnable(GL_LIGHTING);
      //  Location of viewer for specular calculations
      glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,local);
      //  glColor sets ambient and diffuse color materials
      glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
      glEnable(GL_COLOR_MATERIAL);
      //  Enable light 0
      glEnable(GL_LIGHT0);
      //  Set ambient, diffuse, specular components and position of light 0
      glLightfv(GL_LIGHT0,GL_AMBIENT ,Ambient);
      glLightfv(GL_LIGHT0,GL_DIFFUSE ,Diffuse);
      glLightfv(GL_LIGHT0,GL_SPECULAR,Specular);
      glLightfv(GL_LIGHT0,GL_POSITION,Position);
      glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,32.0f);
      glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,white);
    }

    //  Draw Barells
    barrel(0,0,0, 0.5,0.5,0.5 , 0);
    barrel(Cos(idle),Sin(idle), 0 ,.3,.3,.3 , Cos(3*idle));
    barrel(0,2*Cos(idle),2*Sin(idle) ,.3,.3,.3 , Sin(2*idle));
    barrel(3*Sin(idle), 0, 3*Cos(idle),.3,.3,.3 , 0);

    //  disbale lighting from here on
    glDisable(GL_LIGHTING);

    //  Draw axes
    glColor3f(1,1,1);
    if (axes)
    {
      glBegin(GL_LINES);
      glVertex3d(0.0,0.0,0.0);
      glVertex3d(len,0.0,0.0);
      glVertex3d(0.0,0.0,0.0);
      glVertex3d(0.0,len,0.0);
      glVertex3d(0.0,0.0,0.0);
      glVertex3d(0.0,0.0,len);
      glEnd();
      //  Label axes
      glRasterPos3d(len,0.0,0.0);
      Print("X");
      glRasterPos3d(0.0,len,0.0);
      Print("Y");
      glRasterPos3d(0.0,0.0,len);
      Print("Z");
    }
    //  Display parameters
    glWindowPos2i(10,10);
    Print("Angle=%d,%d  Dim=%.1f FOV=%d Projection=%d",th,ph,dim,fov,mode);
    glFlush();
    glutSwapBuffers();
  }
Exemplo n.º 3
0
GLvoid InitGL(){
	//All the stuff we need to draw
	std::string hero_geo_file = "geo/tank.obj";
	std::string target_geo_file = "geo/target.obj";
	std::string swivel_geo_file = "geo/turret.obj";
	std::string barrel_geo_file = "geo/barrel.obj";
	std::string environment_geo_file = "geo/cube.obj";
	std::string enemy_geo_file = "geo/enemy.obj";
	std::string tile_geo_file = "geo/tile.obj";
	std::string tree_geo_file = "geo/tree.obj";
	std::string rock_geo_file = "geo/rocks.obj";

	std::string hero_tex_file = "tex/tank.ppm";
	std::string target_tex_file = "tex/target.ppm";
	std::string swivel_tex_file = "tex/turret.ppm";
	std::string barrel_tex_file = "tex/barrel.ppm";
	std::string environment_tex_file = "tex/cubemape.ppm";
	std::string enemy_tex_file = "tex/enemy.ppm";
	std::string tile_tex_file = "tex/naked_tile_baked.ppm";
	std::string tree_tex_file = "tex/tree.ppm";
	std::string rock_tex_file = "tex/rocks.ppm";
	std::string tree_tile_tex = "tex/tree_tile.ppm";
	std::string rock_tile_tex = "tex/rocky_tile.ppm";
	std::string blob_tile_tex = "tex/blob_shadow.ppm";

	mesh hero(hero_geo_file);
	mesh target(target_geo_file);
	mesh swivel(swivel_geo_file);
	mesh barrel(barrel_geo_file);
	mesh environment(environment_geo_file);
	mesh enemy(enemy_geo_file);
	mesh tile(tile_geo_file);
	mesh tree(tree_geo_file);
	mesh rock(rock_geo_file);
	HERO_ID = meshes.size();
	meshes.push_back(hero);
	TARGET_ID = meshes.size();
	meshes.push_back(target);
	SWIVEL_ID = meshes.size();
	meshes.push_back(swivel);
	BARREL_ID = meshes.size();
	meshes.push_back(barrel);
	ENVIRONMENT_ID = meshes.size();
	meshes.push_back(environment);
	ENEMY_ID = meshes.size();
	meshes.push_back(enemy);
	TILE_ID = meshes.size();
	meshes.push_back(tile);
	TREE_ID = meshes.size();
	meshes.push_back(tree);
	ROCK_ID = meshes.size();
	meshes.push_back(rock);

	glEnable(GL_TEXTURE_2D);
	glGenTextures(1, &HERO_TEX);
	glGenTextures(1, &TARGET_TEX);
	glGenTextures(1, &SWIVEL_TEX);
	glGenTextures(1, &BARREL_TEX);
	glGenTextures(1, &ENVIRONMENT_TEX);
	glGenTextures(1, &ENEMY_TEX);
	glGenTextures(1, &TILE_TEX);
	glGenTextures(1, &TREE_TEX);
	glGenTextures(1, &ROCK_TEX);
	glGenTextures(1, &TREETILE_TEX);
	glGenTextures(1, &ROCKTILE_TEX);
	glGenTextures(1, &BLOBTILE_TEX);
	loadPPM(hero_tex_file.c_str(), HERO_TEX);
	loadPPM(target_tex_file.c_str(), TARGET_TEX);
	loadPPM(swivel_tex_file.c_str(), SWIVEL_TEX);
	loadPPM(barrel_tex_file.c_str(), BARREL_TEX);
	loadPPM(environment_tex_file.c_str(), ENVIRONMENT_TEX);
	loadPPM(enemy_tex_file.c_str(), ENEMY_TEX);
	loadPPM(tile_tex_file.c_str(), TILE_TEX);
	loadPPM(tree_tex_file.c_str(), TREE_TEX);
	loadPPM(rock_tex_file.c_str(), ROCK_TEX);
	loadPPM(tree_tile_tex.c_str(), TREETILE_TEX);
	loadPPM(rock_tile_tex.c_str(), ROCKTILE_TEX);
	loadPPM(blob_tile_tex.c_str(), BLOBTILE_TEX, true);

	camera = new game_object(-1,-1,-1);

	game_object *hero_character = new game_object(characters.size(), HERO_ID, HERO_TEX);
	characters.push_back(hero_character);
	game_object *target_character = new game_object(characters.size(), TARGET_ID, TARGET_TEX);
	target_character->transform.translate(0.0,0.0,-7.0);
	characters.push_back(target_character);
	game_object *swivel_character = new game_object(characters.size(), SWIVEL_ID, SWIVEL_TEX);
	swivel_character->transform.translate(0.0,0.4,0.0);
	characters.push_back(swivel_character);
	game_object *barrel_character = new game_object(characters.size(), BARREL_ID, BARREL_TEX);
	barrel_character->transform.translate(0.0,0.0,-0.15);
	barrel_character->parent_to(characters[SWIVEL_ID]);
	characters.push_back(barrel_character);
	game_object *environment_character = new game_object(characters.size(), ENVIRONMENT_ID, ENVIRONMENT_TEX);
	environment_character->transform.scale(TILES_DIMENSION,TILES_DIMENSION,TILES_DIMENSION);
	environment_character->parent_to(camera);
	characters.push_back(environment_character);
	
	// game_object *enemy_character = new game_object(characters.size(), ENEMY_ID, ENEMY_TEX);
	// enemy_character->transform.translate(0.0, 0.0, -7.0);
	// enemy_character->parent_to(camera);
	// characters.push_back(enemy_character);
	// bad_guys.push_back(ENEMY_ID);

	srand(time(NULL));

	int spread = TILES_DIMENSION;
	for(int i=1; i<BAD_GUY_COUNT; i++)
	{
		game_object *enemyX = new game_object(characters.size(), ENEMY_ID, ENEMY_TEX);
		enemyX->transform.translate(rand()%spread-spread/2, 0.0, rand()%spread-spread/2);
		enemyX->transform.rotateY(rand()%180);
		enemyX->parent_to(camera);
		bad_guys.push_back(characters.size());
		colliders.push_back(characters.size());
		characters.push_back(enemyX);
	}

	double tile_width = meshes[TILE_ID].xmax - meshes[TILE_ID].xmin;
	double tile_length = meshes[TILE_ID].zmax - meshes[TILE_ID].zmin;
	for(int i=0; i<TILES_DIMENSION; i++)
	{
		int xmult = i - TILES_DIMENSION/2;
		for(int j=0; j<TILES_DIMENSION; j++)
		{
			int zmult = j - TILES_DIMENSION/2;
			double rot = rand() % 4 * 90.0;
			// std::cout << rot << std::endl;
			game_object *tileX = new game_object(characters.size(), TILE_ID, TILE_TEX);
			tileX->transform.rotateY(rot);
			tileX->transform.translate(tile_width*xmult, 0.0, tile_length*zmult);
			tileX->parent_to(camera);
			characters.push_back(tileX);
			int tile_type = rand() % 100;
			if(tile_type >= 96 && tile_type < 98)
			{
				tileX->tex = TREETILE_TEX;
				game_object *treeX = new game_object(characters.size(), TREE_ID, TREE_TEX);
				treeX->transform = tileX->transform;
				treeX->parent_to(camera);
				bad_guys.push_back(characters.size());
				colliders.push_back(characters.size());
				characters.push_back(treeX);
			}
			else if(tile_type >= 98)
			{
				tileX->tex = ROCKTILE_TEX;
				game_object *rockX = new game_object(characters.size(), ROCK_ID, ROCK_TEX);
				rockX->transform = tileX->transform;
				rockX->parent_to(camera);
				bad_guys.push_back(characters.size());
				colliders.push_back(characters.size());
				characters.push_back(rockX);
			}
			
		}
	}
	game_object *blob_character = new game_object(characters.size(), TILE_ID, BLOBTILE_TEX);
	blob_character->transform.translate(0.0,0.001,0.0);
	blob_character->transform.scale(2.0, 1.0, 3.0);
	characters.push_back(blob_character);

	last_update = (double)clock() / ((double)CLOCKS_PER_SEC);

	//GL boilerplate initialization
	glShadeModel(GL_SMOOTH);							// Enable Smooth Shading
	glClearColor(0.5f, 0.5f, 0.5f, 0.5f);				// grey Background
	glClearDepth(1.0f);									// Depth Buffer Setup
	glEnable(GL_DEPTH_TEST);							// Enables Depth Testing				

	glEnable(GL_CULL_FACE);
	glShadeModel(GL_SMOOTH);
	glDepthFunc(GL_LEQUAL);								// The Type Of Depth Testing To Do
	glEnable(GL_COLOR_MATERIAL);
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

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