//by jesse stone void GenerateSetPerspectiveFOV(float fovy, float aspect, float zNear, float zFar) { PrepareForGL(); glMatrixMode(GL_PROJECTION); //we use Clanlib to setup our matrix manually because if we do it in HW we can't always extract it again as android gl doesn't support that glLoadIdentity(); CL_Mat4f mat = CL_Mat4f::identity(); RotateGLIfNeeded(mat); float xmin, xmax, ymin, ymax; ymax = zNear * float(tan(fovy * M_PI / 360.0f)); ymin = -ymax; xmin = ymin * aspect; xmax = ymax * aspect; mat.multiply( CL_Mat4f::frustum(xmin, xmax, ymin, ymax, zNear, zFar)); BaseApp::GetBaseApp()->SetProjectionMatrix(mat); //glFrustumf(xmin, xmax, ymin, ymax, zNear, zFar); glLoadMatrixf((GLfloat*)mat); glMatrixMode(GL_MODELVIEW); }
void App::Draw() { //Use this to prepare for raw GL calls PrepareForGL(); glClearColor(0.5,0.5,0.5,1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //after our 2d rect call above, we need to prepare for raw GL again. (it keeps it in ortho mode if we don't for speed) PrepareForGL(); if (g_game->game_state_ == 0 || g_game->game_state_ == 4 || g_game->game_state_ == 2 || g_game->game_state_ == 3) //we draw main menu { g_game->draw_main_menu(); } else if (g_game->game_state_ == 1) { //tile_map[][] = [[...],...] int tile_map_size = g_game->world_size_; int tile_width = 80; int tile_height = 40; int sel_pos_x = 0; int sel_pos_y = 0; // i goes from zero to 9 // j goes from 1 to 10... f**k for (int i = 0; i < tile_map_size; i++) { int j = 13; g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"pared_1"); } for (int j = tile_map_size; j > 0; j--) { int i = -1; g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"pared_2"); } for (int i = 0; i < tile_map_size; i++) { for (int j = tile_map_size; j > 0; j--) { g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"floor_default"); //g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"floor_3"); //we draw the player if (g_game->player_.x_ == i && g_game->player_.y_ == (j-1)) { if (g_game->player_.looking_direction_ == 0) //left { g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"char_0"); } else if (g_game->player_.looking_direction_ == 1) //right { g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"char_1"); } else if (g_game->player_.looking_direction_ == 2) //up { g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"char_2"); } else if (g_game->player_.looking_direction_ == 3) //down { g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"char_3"); } } if (g_game->layer_vision[i][j-1] != 0) { g_game->draw_vision(i,j); } if (g_game->layer_enemigos[i][j-1] != 0) { g_game->draw_enemigo(i,j); } if (g_game->layer_map[i][j-1] != 0) { g_game->draw_item(i,j); } if (g_game->layer_top[i][j-1] != 0) { g_game->draw_item_top(i,j); } if (g_game->layer_walls[i][j-1] != 0) { g_game->draw_walls(i,j); } } } for (int i = 0; i < tile_map_size; i++) { for (int j = tile_map_size; j > 0; j--) { if (g_game->only_render[i][j-1] != 0) { g_game->draw_item_only_render(i,j); } } } } //the base handles actually drawing the GUI stuff over everything else, if applicable, which in this case it isn't. BaseApp::Draw(); }