перемещение по местности - предотвращение движения на высокие места xna - PullRequest
0 голосов
/ 30 марта 2012

У меня есть камера fps и модель пистолета, которая следует за ней, и у меня есть местность, камера движется по местности очень хорошо, но у меня есть проблема, я хочу остановить движение, если камерапереход на высокое место (если он пытается переместиться на утес или другое высокое место, я хочу прекратить эту возможность перемещения на очень высокие места), я не имею в виду предотвращение перемещения на высокие места, я имею в виду только при очень высоком склоне, надеюсьВы поймете и сможете помочь!

1 Ответ

3 голосов
/ 30 марта 2012

Если вы можете получить информацию о местности, по которой вы идете, также можно получить информацию об угле местности.

Ландшафт существует из разных треугольников, так как это сетка. Каждый треугольник имеет 3 вершины, но также имеет так называемое: normal .

Нормаль лица - это направление вверх. С помощью простых вычислений угла вы можете проверить, слишком ли велик угол или нет.

// in pseudo code:
public bool TooSteep(Vector3 position, float maxAngle)
{
    // get your information from the terrain
    // there is probably some function, or you have to write it,
    // that returns the normal from the terrain
    Vector3 normal = myTerrain.GetNormal(position);

    // then we calculate the angle between the 'up'-vector and our normal vector
    if (Vector3.Angle(normal, Vector3.up) > maxAngle)
        return true;
    else return false;
}

Итак, предположим, что наш максимальный угол составляет 45 градусов, и мы имеем очень крутой нормальный. Угол между вектором вверх и нормалью будет большим. Больше нашего maxAngle и поэтому вернется: да, он слишком крутой.

enter image description here

...