我正在使用OpenTK绘制2D图形。我通过根据OnMouseWheel
事件更改Projection矩阵中的Fovy值来进行放大。缩放效果很好,但受fovy> 0限制。我需要放大更多以在图表上查看更多详细信息。有没有一个不受任何数字限制的更好的放大方法?
private void OnRenderFrame()
{
Matrix4 view, projection;
projection = Matrix4.CreatePerspectiveFieldOfView(((float)fov * (float)Math.PI) /(float)180, (float)Width / (float)Height, 0.01f, 100f);
view = Matrix4.LookAt(CameraPos,
CameraPos + CameraFront, CameraUp);
shader.Use();
shader.SetMatrix4("model", Matrix4.Identity);
shader.SetMatrix4("view", view);
shader.SetMatrix4("projection", projection);
SwapBuffers();
base.OnRenderFrame(e);
}
protected override void OnMouseWheel(MouseWheelEventArgs e)
{
if (fov > 90.0f)
{
fov = 90.0f;
}
else if (fov <5.0f)
{
fov = 5.0f;
}
else
{
fov -= e.DeltaPrecise;
}
base.OnMouseWheel(e);
}
缩放效果很好,但是受到fovy的限制> 0
当然,透视投影定义了Viewing frustum。如果fovy == 0,则观看量为0,那根本没有任何意义。
在透视投影时,对象的大小会减小到视点的距离。因此可以“缩放”和物体到摄像机的距离分别使摄像机沿着视线移动。
视线是相机的前向量(CameraFront
)。