Using 3dmax model as terrain

hello,



how can I use a 3dmax model or how to import it as a terrain? - I

in the update method in ur main game loop, u need to update the player's height according to the current height of the terrain.



do a collision detection to find the height and add that to the bouding of the player then set that as the player's y coordinate.

well, I did the collision test… but I did not find any class or method that return me the information I need.



my " Terrain " is a model that I load as a Node and the Player is another Node… - I can do what you said if I change to a TerrainPage or TerrainBlock class, but that way I cant import the model… (at least I couldnt make it work)



is there any piece of code that you could share to make things clearer to me?

theres no built in classes to do these kind stuff, u need to write ur own collision check.



heres the utility method i wrote b4, u can try to modify it to suit ur case



   /**
    * Find the intersection of the player's island and the ray passed in. The returned value
    * is in the player's current island's local coordinate system.
    * If the target cannot be found or the ray does not hit the target, return null.
    * @param ray The ray defines the direction of searching.
    * @param player The player that is looking for the intersection.
    * @return A Vector3f which defines the intersection point.
    */
   public static Vector3f findIntersection(Ray ray, Player player) {
      Vector3f intersection = new Vector3f();
      PickResults results = new TrianglePickResults();
      // Use the ray to find all the models on the player's island which are hit by the ray.
      results.clear();
      player.getIsland().findPick(ray, results);

      // Find the target model in the results.
      boolean found = false;
      boolean hit = false;
      for(int i = 0; i < results.getNumber() && found == false; i++)
      {
         TriMesh model = (TriMesh)results.getPickData(i).getTargetMesh().getParentGeom();
         if(model.getName().equalsIgnoreCase(player.getIsland().getName()))
         {
            found = true;
            // Find the intersection where the ray hits the target's boundingBox in world
            // coordinate system.
            Vector3f[] vertices = new Vector3f[3];
            for(int j = 0; j < model.getTriangleCount() && hit == false; j++)
            {
               model.getTriangle(j, vertices);
               hit = ray.intersectWhere(
                     vertices[0].addLocal(model.getWorldTranslation()),
                        vertices[1].addLocal(model.getWorldTranslation()),
                           vertices[2].addLocal(model.getWorldTranslation()), intersection);
            }
         }
      }
      // If there is an intersection found, translate coordinate system.
      if(found == true && hit == true)
      {
         // Translate the worldCoordinates into the player's island local coordinate system.
         intersection.subtractLocal(player.getIsland().getWorldTranslation());
      }
      // If the target cannot be found or the ray does not hit the target, return null.
      if(found == false || hit == false)
      {
         return null;
      }
      // Return the intersection.
      return intersection;
   }

thx again Neakor, I will try that…

Reverendo said:

thx again Neakor, I will try that..


no problem, i wrote alot collision detection methods to help my game work with models. coz basically everything in my game is a 3d max model.