make building height consistent, at least independent of aspect ratio

This commit is contained in:
Hannes Janetzek 2013-04-02 20:38:23 +02:00
parent b7ca00ae8f
commit bac46ac6e2
5 changed files with 13 additions and 15 deletions

View File

@ -63,7 +63,7 @@ public class GLRenderer implements GLSurfaceView.Renderer {
static int CACHE_TILES = CACHE_TILES_MAX;
private static MapView mMapView;
static int mWidth, mHeight;
static int screenWidth, screenHeight;
private static MapViewPosition mMapViewPosition;
private static MapPosition mMapPosition;
@ -589,8 +589,8 @@ public class GLRenderer implements GLSurfaceView.Renderer {
if (width <= 0 || height <= 0)
return;
mWidth = width;
mHeight = height;
screenWidth = width;
screenHeight = height;
mMapViewPosition.getMatrix(null, mMatrices.proj, null);
@ -648,8 +648,8 @@ public class GLRenderer implements GLSurfaceView.Renderer {
mBufferMemoryUsage = 0;
mDrawTiles = null;
int numTiles = (mWidth / (Tile.TILE_SIZE / 2) + 2)
* (mHeight / (Tile.TILE_SIZE / 2) + 2);
int numTiles = (screenWidth / (Tile.TILE_SIZE / 2) + 2)
* (screenHeight / (Tile.TILE_SIZE / 2) + 2);
// Set up vertex buffer objects
int numVBO = (CACHE_TILES + (numTiles * 2));
@ -682,6 +682,7 @@ public class GLRenderer implements GLSurfaceView.Renderer {
public static final boolean debugView = false;
void clearBuffer() {
mNewSurface = true;
}

View File

@ -67,7 +67,7 @@ public final class TextureRenderer {
else
GLES20.glUniform1f(hTextureScale, 1);
GLES20.glUniform1f(hTextureScreenScale, 1f / GLRenderer.mWidth);
GLES20.glUniform1f(hTextureScreenScale, 1f / GLRenderer.screenWidth);
m.proj.setAsUniform(hTextureProjMatrix);
m.mvp.setAsUniform(hTextureMVMatrix);

View File

@ -59,8 +59,6 @@ public class ExtrusionLayer extends Layer {
public boolean compiled = false;
//private int[] mVboIds;
public ExtrusionLayer(int level) {
this.type = Layer.EXTRUSION;
this.level = level;
@ -89,12 +87,11 @@ public class ExtrusionLayer extends Layer {
// just a guessing to make it look ok
if (height == 0)
height = 10;
height = (int) (height * -Math.log(height / 100000f) * 2.0f);
if (minHeight != 0)
minHeight = (int) (minHeight * -Math.log(minHeight / 100000f) * 2.0f);
height = 14;
float sfactor = GLRenderer.COORD_SCALE * (400f / Tile.TILE_SIZE);
height *= sfactor;
minHeight *= sfactor;
int length = 0;
for (int ipos = 0, ppos = 0, n = way.geom.index.length; ipos < n; ipos++, ppos += length) {

View File

@ -332,7 +332,7 @@ public class ExtrusionOverlay extends RenderOverlay {
scale / GLRenderer.COORD_SCALE);
// scale height
m.mvp.setValue(10, scale / (1000f * GLRenderer.COORD_SCALE));
m.mvp.setValue(10, scale / GLRenderer.COORD_SCALE);
m.mvp.multiplyMM(m.viewproj, m.mvp);

View File

@ -416,7 +416,7 @@ public class MapViewPosition {
mRotMatrix.multiplyMM(mTmpMatrix, mRotMatrix);
// scale to window coordinates
mTmpMatrix.setScale(1 / mWidth, 1 / mWidth, 1);
mTmpMatrix.setScale(1 / mWidth, 1 / mWidth, 1 / mWidth);
mViewMatrix.multiplyMM(mRotMatrix, mTmpMatrix);