> I have a programmer's superstitions about always using powers of 2, which are more > pleasing to the spirit of the machine. -mewo2, whose sentiment I share grid generation --------------- The basic sequence is: - pick N random points - relax them a lil - generate their voronoi diagram Picking N random points it quite straightforward. For relaxation, I indent to just step over MxM points, get the closest of the set of N, and compute the averages to get the centroids. This, again, should be quite simple. Voronoi generation is then just a matter of using rhill's library. terrain generation ------------------ mewo2 does this automatically; I'd like to do it interactively. Their primitives list is helpful to me though! I'd like to have "brushes" for these things, so that you can pick a radius and strength and then just go to town adding features. - constant slope: not entirely sure how this would work (pick a point and make things slope from there to the center?) - cones: pretty solid imo - round blobs: also pretty solid - relax: lerp with the average of neighboring points, with the lerp strength relative to brush strength and radius. - round: same as relax, but lerp with a point's own square root. Normalization seems probably superfluous -- we'd like to be able to have really tall mountains and stuff, and it could also make some of the other operations a bit weird (like having stuff that was previously land disappear under water while building a mountain). One thing to keep in mind is the effect of map scaling on brush radius size. I think I'd like to have the visual radius stay the same size, and shrink the internal radius to match it. Rivers and erosion are interesting -- I may want to have an "erosion" and "rain" brush to generate these features. rendering --------- tba, not sure what I want to do here additional features ------------------- I want to take the same approach as OpenStreetMap and have all other features (and possibly even some, like rivers) be *nodes*, that exist independently of the terrain grid. These can be zero-, one-, or two-dimensional. Each node should exist on a *layer*, so that different layers can be viewed at any given time. Additionaly, nodes may be assigned a relevance level, which corresponds to the scale required to view them. The highest-level nodes are only visible when broadly zoomed out, and reflect things like major cities, nations, and large-scale geographic features. The lowest-level nodes would represent things like individual buildings and only be visible when highly zoomed in. Node should be able to indicate things like climate regions or land use patterns as well, and those kinds of nodes should be on their own layers, so that the user can view or ignore relevant data at any time. nodes ----- node types: - point - path - polygon all nodes can be selected to view properties in the right pane. They can then be edited by clicking a button on the pane. All nodes can be moved when editing. Path and polygon nodes can have their constituent points moved and can insert new nodes. Nodes have an associated "relevance level" - building (smallest) - neighborhood - city - province - nation - global (largest) depending on a map's scale, some of these may not be relevant (i.e. a map only showing a city would not use higher relevance levels).