In my westerngame I did it pretty simple. The gun shoots straight forward, and you can shoot 150m. But a real bullet doesn't shoot like that. Let me take an AG3 for example, since that is the gun I have used the most.

You shoot the bullet out in one height. Then the first 30 meters it is a pretty straight line. Then it will start to go upwards, and after 115m it is 8cm higher then where it started, then after 200m it is at the same height as it started, and then it will slowly go down to the ground.

Now the problem is to adapt this to the game. Because the bullet will move in about 790m/s. And it can last for up to 4000m. If I have calculated right (lets say you have 30frames per sec) then it will move about 26m the first frame. So now is the problem. What would be the best way to do this:

1: Check where the bullet was last frame, and make a line from the last point, to the point it is NOW, and check to see if it penetrated through something.

2: First check if it passed through a surface (xy/yz) where someone/something is, and if it did then calculate the distance, and then check in a look up table for the height of the bullet at that point, and check if it did hit the polygon/mesh.

3: Any other good solutions?