Hi everyone,

Thanks for the feedback on my idea. Based on the feedback and the tests
I made the past few days, I wrote a GSoC application.

http://www.google-melange.com/gsoc/proposal/public/google/gsoc2015/michaelz/5750085036015616

Feel free to leave feedback/your thoughts on this.

Regards,
Michael

Am 09.03.2015 um 18:19 schrieb Michael Zangl:
> Hi,
>
> I'm also posting this on the JOSM-List in hope to get feedback on the
> technical parts here.
>
> Regards,
> Michael
>
> -------- Weitergeleitete Nachricht --------
> Betreff: [OSM-dev] GSoC: OpenGL view for JOSM
> Datum: Mon, 09 Mar 2015 13:58:41 +0100
> Von: Michael Zangl <openstreet...@michael.fam-zangl.net>
> An: d...@openstreetmap.org
>
> Hello,
>
> This is a thing that annoyed me for a long time: JOSM is slow when
> zooming out. I would like to improve this and have enough spare time
> this summer to work on this as GSoC project.
>
> I am currently studying computer science at the KIT (Karlsruhe,
> Germany). My OSM name is "michael2402".
>
> Motivation
> Currently, JOSM uses the default Java 2D framework. While this is
> portable (it just works) and also supports 2d graphic acceleration using
> OpenGL, it is not as fast as a plain OpenGL implementation would be.
> This is why I would suggest adding a second render mode to JOSM which
> would then use OpenGL and all it's modern features like VBOs to
> accelerate rendering and allow a smooth moving of a zoomed-out map.
>
> The idea:
> I would like to add a second rendering mode that only uses OpenGL. Users
> are then able to chose between classic rendering and the new OpenGL
> render styles.
>
> The basic idea is that this interface can be used if you want to work in
> an urban area with a lot of details and change e.g. the public transport
> system so you need to zoom out a lot. The current renderer is pretty
> slow as soon as there are many objects in the view. Therefore, even a
> not-fully-featured Renderer can be beneficial for users to get an
> overview over the area.
>
> I would then add a new rendering interface that exposes the new features
> required/provided by OpenGL. That interface should be prepared to accept
> 3D-Positions (although I don't plan on using them, but maybe someone
> might want to add shadows or even a real 3D building view in the
> future). We have to discuss how this works, but currently I am in favor
> of offsetting all nodes to the ground elevation (so a barrier=wall might
> be from 0 to 1 meter), then adding the elevation we got from elevation
> tags (ele, NASA data, ...)
>
> That rendering interface can then be used by plugins to add their own
> styles. This would be necessary if one wanted to add real 3D objects,
> like trees. This is more like a bonus feature, so I will be writing a
> test plugin to test the interface. We also need a way to add "ground"
> (=> Background) images for background layers.
>
> I would then create one plugin that can uses MapCSS to render a style in
> the view. That way, many existing styles can be used with the new
> interface. This will be the most part of the work on this project.
>
> As library I would currently prefer JOGL, since I already have
> experience with it and it contains some additional features we would
> need (like text rendering support and the ability to be added as swing
> panel).
>
> Current status:
> - Currently, each layer draws it self to the Java Graphics. Most layers
> are not really extensible (like the GPX-Track feature), which makes it
> hard to modify them using plugins (like adding non-standard accuracy
> info to GPX and drawing the accuracy area instead of the line).
> - Layers are drawn the way they are ordered in the side view.
> - There are basically two types of layers: Background layers
> (ImageryLayer.java, TMSLayer.java, ...) and data layers (GpxLayer.java,
> OsmDataLayer.java, ...)
>
> Implementation details/ideas (so far):
> - JOSM create a list of "Drawer" objects for each layer.
> - I would like to use a 2D plane (which can then be offsetted using
> shaders) to be the background for all of the map. There is only one
> background pane with the textures of background layers added to it. I
> will have to look more into shaders (like supporting an unlimited number
> of textures on a single area) but I hope this is possible.
> -- Fallback: Just render the images as rectangle, one over the other,
> using opacity settings and disabling the depth buffer (the way it is
> done currently). Cache using VBOs. This is not as modern as shaders
> would be, but it is simple.
> - Layers make heavy use of VBOs. I would like to provide a nice
> interface to draw and cache VBO structures. This will also speed up
> drawing of the map a lot, since the map does not change. Thinks it
> should do include:
> -- Draw a point at the given lat/lon
> -- Draw a line of width x with given (lat/lon/width) point pairs and
> color, closed or open.
> -- Draw a filled area (without contour)
> -- Add text at a given position.
> -- MapCSS properties this basically supports: width, color (rgba),
> dashes, linecap, linejoin, fill-color (rgba), font-size, text-color,
> text-offset, text.
> -- What we won't support: z-index (but we could order the elements
> before drawing), casing, extrude, icons, text-position.
> - Each VBO is tied to map objects that it depends on. That way, it only
> needs to be updated if those objects change. Doing this is done by the
> renderer (which also has knowledge of all MapCSS styles).
> -- The MapCSS renderer needs to be adjusted to keep track of object
> changes and re-create a VBO as soon as it's rules change.
>
> Implementation schedule (12 weeks until "pencils down")
> 2 Weeks: Getting to know JOSM and adding the OpenGL view to the core
> (and an interface to use it).
> 2 Weeks: Adding the OpenGL interfaces we need (like computing the
> OpenGL-Coordinates for a point on earth and the objects it should render).
> 3 Weeks: Create a VBO drawing library.
> 3 Weeks: Add a mappaint style renderer (hopefully being able to use as
> much of an existing renderer as possible). Make objects clickable. Bonus
> (I can't tell if I have time, but basically this should be the same as
> any other observed object changes): Support hover and active.
> 2 Weeks: (to be discussed which): Add a new render layer for background
> images. It should then be possible to draw a GeorefImage list and e.g.
> the Bing map.
>
> Main challenges:
> - Prevent code-duplication as much as possible.
> - Get the OpenGL-Part as stable as possible (not fully featured, but
> non-crashing), so that it can be included in trunk after GSoC is over.
>
> To be discussed:
> - How much of this can be a plugin? Is it possible to use a plugin for
> all of this or should as much of it be in core? I would suggest adding
> the basic OpenGL stuff to Core and implementing the layer renderers as
> plugins. That way, each of them can be improved independently.
> - Should the layer Painters be a private for to each layer (and provided
> by it) or should they be provided by a central system (get me the
> Painter for ...)
> - Use shaders for the background images.
> - I did not find an OpenGL MapCSS renderer. This could be a nice project
> to have (for other editors, smartphones, ...). Are there any efforts
> currently? We don't need to do things twice...
> - Should we support multiple renderers? I really opt for this, we could
> e.g. add a mini-map to the sidebar to show where you are on the map or
> even support opening multiple Edit-Windows (imagine having the official
> Map with house numbers on one screen and the map with Bing sattelite on
> the other, house number mapping would just get so much easier ;-))
>
> What are your thoughts on this?
>
> In hope of a lot of feedback,
> Michael Zangl
>
> _______________________________________________
> dev mailing list
> d...@openstreetmap.org
> https://lists.openstreetmap.org/listinfo/dev
>
>
>
> _______________________________________________
> josm-dev mailing list
> josm-dev@openstreetmap.org
> https://lists.openstreetmap.org/listinfo/josm-dev
>


_______________________________________________
josm-dev mailing list
josm-dev@openstreetmap.org
https://lists.openstreetmap.org/listinfo/josm-dev

Reply via email to