在地形上移动 - 防止移动到高处xna

时间:2012-03-30 13:41:05

标签: c# 3d xna

我有一个fps相机和一个跟随她的枪模型,我有一个地形,相机在地形上移动很好,但我有一个问题,我想停止运动,如果相机是移动到高处(如果它试图移动到悬崖或另一个高处,我想停止这个选择移动到很高的地方)我不是说防止在高处移动我的意思是只有在有很高的坡度时,希望你会明白并且能够提供帮助!

1 个答案:

答案 0 :(得分:3)

如果您能够从正在行走的地形获取信息,还可以获取有关地形角度的信息。

地形存在于不同的三角形之外,因为它是一个网格。每个三角形都有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