Moving mesh over terrain

Started by
5 comments, last by DJTN 11 years, 10 months ago
If I have a mesh and I want to move it over a terrain, how can I do that?

I am using C++ and DirectX 9
Advertisement
Depends greatly what you want exactly to do. Moving a player character is much simpler than a vehicle for example.

Otherwise, it is a good starting point to code functions to get the terrain height at certain x,y point. This allows you to place objects on the terrain and then move them in a way that they stay on the terrain.

If you a looking for some general collision detection solution, bullet physics for example could work for you. With bullet physics you may create a terrain body and a character controller / vehicle controller without much of troubles.

Cheers!
[color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif]

[background=rgb(250, 251, 252)]>[/background]

[/font]

[background=rgb(250, 251, 252)] [/background]

[color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif]

[background=rgb(250, 251, 252)]it is a good starting point to code functions to get the terrain height at certain x,y point[/background]

[/font]

[color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif]

[background=rgb(250, 251, 252)]That's what I thought about doing, I think I need to get the top vertex Y axis based on the character/[/background]

[/font][color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif]

[background=rgb(250, 251, 252)]vehicle X and Y, however I am not sure about how to get the Y axis from the terrain vertex, any idea?[/background]

[/font]

It depends on how you create your terrain too. If you create it from a height map you can store the vertex with the left and right normal in a collection and then quickly pull that cell up based off the mesh's X and Z location -to determin the Y (height) on the terrain with a DOT product (ray cast).

If you've created the terrain in a modeling pkg you can create bounding boxes (in most cases) and test for intersection.
I have created the terrain in 3Ds Max, however, I dont find creating bounding box efficient since I could be having alot of heights and the character will be moving on the terrain (up and down).
Hi,

A problem with terrains generated with 3DS max is that it is quite hard to make assumptions about the way the data is stored. You can't be absolutely sure that the terrain is a regular grid for example. What you have is a called triangle soup.

It isn't impossible to work with such a terrain. Practically it is a question of ray-triangle intersection test. The problem is that your terrain probably has plenty of triangles and testing against each triangle will probably take too much CPU power. You will need some sort of spatial separation structure such as octree to narrow down the problem (ie. to minimize ray-triangle calculations).

Cheers!

I have created the terrain in 3Ds Max, however, I dont find creating bounding box efficient since I could be having alot of heights and the character will be moving on the terrain (up and down).



In that case, you’re going to have to create your own grid of cells that contain multiple triangles of your imported terrain. Each cell will have a world minimum and maximum x and z value and contain a list of triangles. At start up you’ll go through your terrain and allocate each triangle to one or more of these cells. It is 'one or more' because triangles will quite often overlap cell edges and in that case they should belong in both cells. When carrying out our collisions test you can now look up, in a similar way to using a regular grid, the correct cell. You can then loop through each triangle in the cell doing a point in polygon test until you find the correct triangle.



The point here is to limit the number of triangles to check each frame. Grouping them in buckets will acommplish this. Also you can save resources by only doing the collision test if the object you're checking is moving.


Good Luck!

This topic is closed to new replies.

Advertisement