放大 OpenGL
Zooming-in OpenGL
我正在使用 OpenTK 绘制二维图形。我通过根据 OnMouseWheel
事件更改投影矩阵中的 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);
}
The zooming works fine but it is limited by fovy > 0
当然透视投影定义了一个Viewing frustum。如果 fovy == 0 则观看音量为 0,这根本没有任何意义。
在透视投影中,物体的大小随着到视点的距离而减小。因此可以"zoom"和物体通过到相机的距离分别沿视线移动相机。
视线是相机的前方矢量(CameraFront
)。
我正在使用 OpenTK 绘制二维图形。我通过根据 OnMouseWheel
事件更改投影矩阵中的 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);
}
The zooming works fine but it is limited by fovy > 0
当然透视投影定义了一个Viewing frustum。如果 fovy == 0 则观看音量为 0,这根本没有任何意义。
在透视投影中,物体的大小随着到视点的距离而减小。因此可以"zoom"和物体通过到相机的距离分别沿视线移动相机。
视线是相机的前方矢量(CameraFront
)。