void CDynWater::Update() { if (!mapInfo->water.forceRendering && readmap->currMinHeight > 1.0f) return; oldCamPosBig=camPosBig; camPosBig.x=floor(std::max((float)WH_SIZE, std::min((float)gs->mapx*SQUARE_SIZE-WH_SIZE, (float)camera->pos.x))/(W_SIZE*16))*(W_SIZE*16); camPosBig.z=floor(std::max((float)WH_SIZE, std::min((float)gs->mapy*SQUARE_SIZE-WH_SIZE, (float)camera->pos.z))/(W_SIZE*16))*(W_SIZE*16); glDisable(GL_DEPTH_TEST); glDepthMask(0); glDisable(GL_BLEND); glDisable(GL_ALPHA_TEST); /* if(mouse->buttons[0].pressed){ float3 pos=camera->pos+mouse->dir*(-camera->pos.y/mouse->dir.y); AddSplash(pos,20,1); }*/ AddShipWakes(); AddExplosions(); DrawDetailNormalTex(); DrawWaves(); glEnable(GL_DEPTH_TEST); glDepthMask(1); }
void MapWindow::Render(Canvas &canvas, const PixelRect &rc) { const NMEAInfo &basic = Basic(); // reset label over-write preventer label_block.reset(); render_projection = visible_projection; if (!render_projection.IsValid()) { canvas.ClearWhite(); return; } // Calculate screen position of the aircraft PixelPoint aircraft_pos{0,0}; if (basic.location_available) aircraft_pos = render_projection.GeoToScreen(basic.location); // General layout principles: // - lower elevation drawn on bottom layers // - increasing elevation drawn above // - increasing importance drawn above // - attempt to not obscure text //////////////////////////////////////////////// items on ground // Render terrain, groundline and topography draw_sw.Mark("RenderTerrain"); RenderTerrain(canvas); draw_sw.Mark("RenderRasp"); RenderRasp(canvas); draw_sw.Mark("RenderTopography"); RenderTopography(canvas); draw_sw.Mark("RenderOverlays"); RenderOverlays(canvas); draw_sw.Mark("DrawNOAAStations"); RenderNOAAStations(canvas); //////////////////////////////////////////////// glide range info draw_sw.Mark("RenderFinalGlideShading"); RenderFinalGlideShading(canvas); //////////////////////////////////////////////// airspace // Render airspace draw_sw.Mark("RenderAirspace"); RenderAirspace(canvas); //////////////////////////////////////////////// task // Render task, waypoints draw_sw.Mark("DrawContest"); DrawContest(canvas); draw_sw.Mark("DrawTask"); DrawTask(canvas); draw_sw.Mark("DrawWaypoints"); DrawWaypoints(canvas); //////////////////////////////////////////////// aircraft level items // Render the snail trail if (basic.location_available) RenderTrail(canvas, aircraft_pos); DrawWaves(canvas); // Render estimate of thermal location DrawThermalEstimate(canvas); //////////////////////////////////////////////// text items // Render topography on top of airspace, to keep the text readable draw_sw.Mark("RenderTopographyLabels"); RenderTopographyLabels(canvas); //////////////////////////////////////////////// navigation overlays // Render glide through terrain range draw_sw.Mark("RenderGlide"); RenderGlide(canvas); draw_sw.Mark("RenderMisc1"); // Render weather/terrain max/min values DrawTaskOffTrackIndicator(canvas); // Render track bearing (projected track ground/air relative) draw_sw.Mark("DrawTrackBearing"); RenderTrackBearing(canvas, aircraft_pos); draw_sw.Mark("RenderMisc2"); DrawBestCruiseTrack(canvas, aircraft_pos); // Draw wind vector at aircraft if (basic.location_available) DrawWind(canvas, aircraft_pos, rc); // Render compass DrawCompass(canvas, rc); //////////////////////////////////////////////// traffic // Draw traffic #ifdef HAVE_SKYLINES_TRACKING DrawSkyLinesTraffic(canvas); #endif DrawTeammate(canvas); if (basic.location_available) DrawFLARMTraffic(canvas, aircraft_pos); //////////////////////////////////////////////// own aircraft // Finally, draw you! if (basic.location_available) AircraftRenderer::Draw(canvas, GetMapSettings(), look.aircraft, basic.attitude.heading - render_projection.GetScreenAngle(), aircraft_pos); //////////////////////////////////////////////// important overlays // Draw intersections on top of aircraft airspace_renderer.DrawIntersections(canvas, render_projection); }
int readFile(string& filename) { float stime[8][1024]; float wave[8][1024]; int nsample=0; string dir("data/"); //filename=dir+filename; printf("Reading file:%s \n ",filename.c_str()); ifstream file; file.open(filename.c_str()); if(!file){ printf("%s : cannot be opened.\n",filename.c_str()); return 1; }else{ printf("%s : opened successfully.\n",filename.c_str()); } //anal.SetWaveTime(0,stime[0],wave[0]); //anal.SetWaveTime(1,stime[1],wave[1]); //anal.SetWaveTime((float**) stime,(float**) wave); string line; bool dflag=0,eflag=0; int nlines=0,ndat=0; int nmaxsample=NDIM; if(nsample>0) nmaxsample=nsample; nsample=0; while (getline(file,line)) { //if(nlines<10)printf("%s \n", line.c_str()); //printf("%s \n", line.c_str()); if(line.find("Event") != string::npos){ printf("%s \n", line.c_str()); eflag=1; continue; } if(line.find("t1[ns]") != string::npos){ if(!eflag){ printf("Error: unexpected line sequence.\n"); return 1; } eflag=0; if(dflag){ printf("close sample %i \n",ndat); if(ndat != NDIM){ printf("ErrorL ndat= %i \n",ndat); return 1; } anal.Compare2Waves(0,1); ndat=0; nsample++; if(nsample>=nmaxsample){ printf("Warning: nsample=%i \n",nsample); return 0; } } printf("open sample \n"); dflag=1; continue; } // take data vector<string> items; splitstring(line,items," "); int nitems=items.size(); if((nitems != 4) && (nitems != 8)){ printf("Expexted number of items in line != 4 : %i \n",nitems); return 1; } double t1,t2; //cout << atof(items[0].c_str()) << endl; t1=atof(items[0].c_str()); wave[0][ndat]=atof(items[1].c_str()); t2=atof(items[2].c_str()); wave[1][ndat]=atof(items[3].c_str()); stime[0][ndat]=t1; stime[1][ndat]=t2; //if(t1 != t2){ // printf("Warning: t1 != t2 %f %f \n",t1,t2); //} if(ndat >= NDIM){ printf("Error: unexpected size of data %i \n",ndat); return 1; } nlines++; ndat++; } if(dflag){ printf("close sample %i \n",ndat); if(ndat != NDIM){ printf("ErrorL ndat= %i \n",ndat); return 1; } //anal.Compare2Waves(0,1); nsample++; } Float_t* tt1=stime[0]; Float_t* tt2=stime[1]; Float_t* w1=wave[0]; Float_t* w2=wave[1]; DrawWaves(tt1,tt2,w1,w2); printf("All samples read nsample: %i \n",nsample); return 0; }