Skip to content
AMDmi3 edited this page Apr 1, 2011 · 18 revisions

Framework

Rendering (libglosm-client)

  • Drop quads, add support for generalized indexed triangle strips/fans instead
  • Add materials support; store vertex buffers per-material, render correspondingly; use PolygonOffset for ordering; lines are `material' too
  • Add texture coordinate support (enhances materials)
  • Add shadows (stencil?) (requires materials and landuse polygons)
    • To begin with, use preprojected polygonal shadows (needs polygon merger)
  • Tweak lines so they don't fill (ortho) map on low zoom levels
  • Completely switch to new-world OpenGL
    • glBegin/end/color -> glUniform
    • Fixed pipeline -> shaders
    • gl*Pointer, glClient* -> glVertexAttribPointer
  • Support for billboards (for POIs)
  • Support for street names

OSM data support (libglosm-server)

  • Implement tagdict for efficient tag storage
  • Add support for tagged nodes
  • Add support for osm-diff loading (data may be added, changed and removed)
  • Add support for working in replication mode without having to hold planet (or some fixed region) in memory; database support is needed, maybe with external utilities

Geometry generation (libglosm-geomgen)

  • Add generic `polygon' primitive to represent general and multi-polygons
  • Support landuse=* and natural=* polygons (needs materials)
  • Add point feature support
    • For starters, power=tower and amenity=bench
  • Fix road turns (curves instead of sharp spike)
  • Add proper support for street intersections
  • Render lanes
  • Multipolygon support
  • Basic CSG - don't draw edges on flat joined walls
  • Automatic edger - takes geometry, creates edges for it, automatically removes duplicate edges and edges for flat surfaces
  • Automatic merger for flat polygons (roads)
  • Straight skeleton implementation for arbitrary hipped roofs
  • Less restrictions on building shapes for other roof types (done for pyramidal/conical)

GPXLayer

  • Some-tree indexing of points
  • Render lines as well
  • BBox support
  • Multiple LODs implemented in a same way as interlaced png's, e.g. each 8 (contig.) track points will be distributed into 4 levels as follows: L1 will 0th, L2 will hold 4th, L3 will hold 2nd, 6th and L3 will hold 1st, 3rd, 5th and 7th. By rendering L1, L1+L2, L1+L2+L3 or L1+L2+L3+L4 one can achieve desired point density.

TerrainLayer/SRTMDatasource

  • Proper handling of absent SRTM files - don't just die
  • Add support in other layers
    • Buildings should just be risen to appear on the ground
    • Flat objects should be split, preferably into indexed strips as well
  • LODs should be implemented (as simple as 2^-n * x grid downscaling)

Tiling

  • PreloadedXmlDatasource needs feature index by bbox
  • Frustum culling (at render phase)

General refactoring

  • OsmDatasource should have iterator-based interface with postgres schema in mind (are things like way-by-node possible? - required for geomgen)
  • All external interfaces (especially Viewers) should have double "human unit" (lot/lan/height/angle) interface, not obscure internal fixed points
  • Split geomgen into topic files (Roofs, Walls, Roads etc.)

Documentation

  • Document most class methods and members

New layers

  • SRTM landscape layer (separate from geometry for now)
  • TMS layer (displays image tiles from mapnik and other sources)

Performance/optimizations

  • XML parsing takes most of time: finish libfastosm (my very fast XML parser specially for OSM) and use it
  • In geometry generation optimization focus should be optimal tags processing (std::string ops take quite a lot of time) and TranslatePoints optimization
  • Add pprof (google-perf-tools) profiling support to cmake

Applications

Tiler

  • Render multiple tiles in one go (e.g. 16x16)
  • Optionally, symlink empty tiles
  • Use multiple threads for png saving
  • getopt_long interface
  • Ability to render single image of arbitrary size
  • Need 16x multisampling for proper eyecandy, while hardware only provides 4x. Can think of accum buffer (it's very slow, but rendering likely won't be a bottleneck anyway) or render to texture with following downscaling
  • Add jpeg saving support (more useful than png when texture support is added)
  • Support rendering over existing tiles (allows to add more regions to existing tileset)

Viewer

  • Add support for loading multiple .osm files

New applications

  • Qt viewer
  • Mobile viewer (likely Qt as well)
  • Geometry generator (like tiler, but for geometry)
  • Persistent app for continuous database change watching and geometry tile updating - can be a base for other services (usable client, tile rendering infrastructure)