如何找到投影矩阵的近平面大小?

时间:2014-07-11 10:07:29

标签: opengl matrix projection opentk plane

这个函数应该给我一个近似剪裁平面的确切大小。

public Vector2 NearplaneSize
    {
        get
        {
            float w = 2 * Mathf.Tan(Mathf.Deg2Rad(Fov) / 2) * ZNear;
            return new Vector2(w, w / AspectRatio);
        }
    }

我正在创建一个这样的飞机:

Vector2 s = cam.NearplaneSize;
Mesh = PrimitiveFactory.CreatePlane(s.X / -2, s.Y / -2, -(cam.ZNear + 0.1f), s.X, s.Y, 1, 1, Quaternion.FromAxisAngle(Vector3.UnitX, Mathf.Deg2Rad(90)));

在相机前面,但它略大于屏幕的一半。显然计算错了。我似乎无法找到更好的公式。

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:1)

我不知道OpenTK,但由于旧的gluPerspective调用,“Fov”通常被理解为fov y,而不是fovx。

所以我假设

float h = 2 * Mathf.Tan(Mathf.Deg2Rad(Fov) / 2) * ZNear;
return new Vector2(h * AspectRatio, h);

应该这样做。