# Proper updating of GeoClipMaps

I have been working on an implementation of gpu-based geo clip maps, but there is a section of the GPU Gems 2 article that I just can't seem to understand, specifically this paragraph, and more precisely the bolded part:

The choice of grid size n = 2k−1 has the further advantage that the finer level is never exactly centered with respect to its parent next-coarser level. In other words, it is always offset by 1 grid unit either left or right, as well as either top or bottom (see Figure 2-4), depending on the position of the viewpoint. In fact, it is necessary to allow a finer level to shift while its next-coarser level stays fixed, and therefore the finer level must sometimes be off-center with respect to the next-coarser level. An alternative choice of grid size, such as n = 2k−3, would provide the possibility for exact centering

Let's take an example image from the article:

My "understanding" of the way the clip maps were updated was that you floor the position of the viewpoint to an int, and as such get the center vertex point. If this is not the same as the previous center point, you update the entire map. Now, this obviously is not the case. What I am failing to understand is this:

If you look at the image above, if the viewpoint was to move one unit to the right, then the inner ring (the one just around the view point + white center square) would end up getting a 1 unit space on both the left and right side of itself. But there is nothing in the paper that deals with this. What I mean is that it would end up looking like this:(excuse my crummy cut-and-paste editing of the above image):

This is obviously not a valid state. So, would the solution be that a clip ring (layer) can only move in increments of the ring/layer it's contained within? Wouldn't this end up being very restrictive? I feel like I am missing some crucial understanding of parts of the algorithm, but I have been over both this paper and the original paper from 2004 and I just can't see what I am not getting.

I think you have the right idea.

So, would the solution be that a clip ring (layer) can only move in increments of the ring/layer it's contained within?

Yes

Wouldn't this end up being very restrictive?

No, this system the innermost level can always move in 1-unit increments. Then each ring at level n out from the innermost one needs to be updated once every 2n increments.

Not having the half-blockwidth strips makes generating the patch strips easier as well.

### Animated Demo

Here is what the sliding windows should look like, as far as I can tell from the paper. Note that there isn't any of the "half-edge strips" in your example, and the innermost block is still able to move in smooth 1-unit increments.