Tuesday, 6 March 2012

Terrain Following


Moving a model over a contoured surface

This tutorial builds on the last. However, It also uses a different environment, You will need to download terrain.dir which includes the code from the collision 2 tutorial.
1. Open the terrain.dir movie, and open the scene controlbehavior. Add the following to the end of the characterMove handler:

  -- move along terrain  -- create reference for terrain (ground)  terrain = p3Dmember.model("Terrain")
  -- store character's position  charPos = pCharacter.worldPosition
  -- cast a ray down  collisData = \
p3Dmember.modelsUnderRay(charPos,vector(0,0,-1),#detailed)

  -- if model is picked up on ray
  if collisData.count then
    -- store total no of models detected by the ray    totalCount = collisData.count
    repeat with modelNo = 1 to totalCount
      -- check if over the terrain model      if (collisData[modelNo].model = terrain) then
        terrainPos = collisData[modelNo].isectPosition
        -- find out the distance the character should move        -- up or down        diff = (terrainPos.z - \
pCharacter.worldPosition.z) + 45

        -- move the character        pCharacter.translate(0,0,diff,#world)
      end if

    end repeat
  end if
In the above, we used the modelsUnderRay command to send a ray down and check the distance between the character and the ground. Since there could be other models on the ground, we do a check through the list of models to make sure that we only move the character if the terrain model is on the collision list.

2.  Play the movie and test what you just created.
You will notice that when you try walk through the wall on the flat part of the ground, you are prevented from doing so. However, if you walk up the mound, you can walk through the wall. The reason for this is that the ray being cast forward is missing the wall (is going over it).
You can download the completed movie from here.

0 comments:

Post a Comment

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More