From 0bfd5aa2a31dbbe9b3f38955fbfabccd8cb3d36d Mon Sep 17 00:00:00 2001 From: "ant..om" Date: Thu, 12 May 2011 18:20:23 +0000 Subject: [PATCH] fixed a bug calculating camera cell Test is updated to not use LOD and physics for testing purposes git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7488 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../jme3/terrain/geomipmap/TerrainGrid.java | 6 ++-- .../jme3test/terrain/TerrainGridTest.java | 30 +++++++++++-------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/engine/src/terrain/com/jme3/terrain/geomipmap/TerrainGrid.java b/engine/src/terrain/com/jme3/terrain/geomipmap/TerrainGrid.java index 70827b292..bb3f3d69c 100644 --- a/engine/src/terrain/com/jme3/terrain/geomipmap/TerrainGrid.java +++ b/engine/src/terrain/com/jme3/terrain/geomipmap/TerrainGrid.java @@ -86,19 +86,19 @@ public class TerrainGrid extends TerrainQuad { // 2: grids are associated with locations, and no incremental update is done, we load new grids for new locations, and unload those that are not needed anymore Vector3f cam = locations.get(0); Vector3f camCell = this.getCell(cam); - if (!camCell.equals(this.currentCell)) { + if (camCell.x != this.currentCell.x || camCell.z != currentCell.z) { this.updateChildrens(camCell); for (TerrainGridListener l : this.listeners.values()) { l.gridMoved(camCell); } } - super.update(locations); + //super.update(locations); } public Vector3f getCell(Vector3f location) { final Vector3f v = location.clone().divideLocal(this.getLocalScale().mult(this.quadSize)).add(0.5f, 0, 0.5f); - return new Vector3f(FastMath.floor(v.x), FastMath.floor(v.y), FastMath.floor(v.z)); + return new Vector3f(FastMath.floor(v.x), 0, FastMath.floor(v.z)); } protected void removeQuad(int idx) { diff --git a/engine/src/test/jme3test/terrain/TerrainGridTest.java b/engine/src/test/jme3test/terrain/TerrainGridTest.java index a0b46aa29..c1b21054c 100644 --- a/engine/src/test/jme3test/terrain/TerrainGridTest.java +++ b/engine/src/test/jme3test/terrain/TerrainGridTest.java @@ -31,6 +31,7 @@ public class TerrainGridTest extends SimpleApplication { private float grassScale = 64; private float dirtScale = 16; private float rockScale = 128; + private boolean usePhysics = false; public static void main(final String[] args) { TerrainGridTest app = new TerrainGridTest(); @@ -85,24 +86,25 @@ public class TerrainGridTest extends SimpleApplication { BulletAppState bulletAppState = new BulletAppState(); stateManager.attach(bulletAppState); - RigidBodyControl body = new RigidBodyControl(new HeightfieldCollisionShape(terrain.getHeightMap(), terrain.getLocalScale()), 0); - terrain.addControl(body); - bulletAppState.getPhysicsSpace().add(terrain); this.getCamera().setLocation(new Vector3f(0, 256, 0)); this.viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f)); - CapsuleCollisionShape capsuleShape = new CapsuleCollisionShape(0.5f, 1.8f, 1); - this.player3 = new CharacterControl(capsuleShape, 0.5f); - this.player3.setJumpSpeed(20); - this.player3.setFallSpeed(30); - this.player3.setGravity(30); + if (usePhysics) { + RigidBodyControl body = new RigidBodyControl(new HeightfieldCollisionShape(terrain.getHeightMap(), terrain.getLocalScale()), 0); + terrain.addControl(body); + bulletAppState.getPhysicsSpace().add(terrain); + CapsuleCollisionShape capsuleShape = new CapsuleCollisionShape(0.5f, 1.8f, 1); + this.player3 = new CharacterControl(capsuleShape, 0.5f); + this.player3.setJumpSpeed(20); + this.player3.setFallSpeed(30); + this.player3.setGravity(30); - this.player3.setPhysicsLocation(new Vector3f(0, 256, 0)); - - bulletAppState.getPhysicsSpace().add(this.player3); + this.player3.setPhysicsLocation(new Vector3f(0, 256, 0)); + bulletAppState.getPhysicsSpace().add(this.player3); + } this.initKeys(); } @@ -178,7 +180,9 @@ public class TerrainGridTest extends SimpleApplication { this.walkDirection.addLocal(camDir.negate()); } - this.player3.setWalkDirection(this.walkDirection); - this.cam.setLocation(this.player3.getPhysicsLocation()); + if (usePhysics) { + this.player3.setWalkDirection(this.walkDirection); + this.cam.setLocation(this.player3.getPhysicsLocation()); + } } }