在 OpenGL C# 中放大/缩小
Zoom in / out in OpenGL C#
我正在尝试创建一个 OpenGL C# 项目来放大和缩小场景。我想在按下 Z 键时进入和退出 fom 缩放模式。然后,当我处于缩放模式(第一次按下 Z 键)时,使用鼠标滚轮放大/缩小场景。当我完成缩放动作时,我希望能够退出缩放模式(再次按 Z)然后鼠标滚轮将停止缩放我的场景。感谢您的帮助!
protected override void OnUpdateFrame(FrameEventArgs e)
{
base.OnUpdateFrame(e);
Matrix4 lookat = Matrix4.LookAt(eyeVector, targetVector, upVector);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadMatrix(ref lookat);
KeyboardState keyboard = Keyboard.GetState();
if (keyboard[Key.Z] && !keyboard.Equals(lastKeyPress))
{
}
if (keyboard[Key.Z] && !keyboard.Equals(lastKeyPress))
{
}
lastKeyPress = keyboard;
}
这是zoomOut的函数:
public Vector3 zoomOut(Vector3 actual)
{
if(zoomLimits[1]<=actual.X || zoomLimits[1] <= actual.Y || zoomLimits[1] <= actual.Z) {
Console.WriteLine("Limita de zoomOut a fost atinsa!");
return actual;
}
Vector3 nou = new Vector3(actual.X + 5, actual.Y + 5, actual.Z + 5);
return nou;
}
这里我只是改变了lookat矩阵中的eyeVector。但我有一些限制。如果我超过这些限制,场景就会消失。你有解决这个问题的想法吗?我不想限制缩放。
在没有看到您的完整代码的情况下,我只能提供这么多帮助,但是您检查过裁剪平面了吗?这听起来像是裁剪平面太近的教科书案例;检查你的透视矩阵。
当您调用 Matrix4.CreatePerspectiveFieldOfView
时,增加 depthFar,这应该可以解决您的问题。
我正在尝试创建一个 OpenGL C# 项目来放大和缩小场景。我想在按下 Z 键时进入和退出 fom 缩放模式。然后,当我处于缩放模式(第一次按下 Z 键)时,使用鼠标滚轮放大/缩小场景。当我完成缩放动作时,我希望能够退出缩放模式(再次按 Z)然后鼠标滚轮将停止缩放我的场景。感谢您的帮助!
protected override void OnUpdateFrame(FrameEventArgs e)
{
base.OnUpdateFrame(e);
Matrix4 lookat = Matrix4.LookAt(eyeVector, targetVector, upVector);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadMatrix(ref lookat);
KeyboardState keyboard = Keyboard.GetState();
if (keyboard[Key.Z] && !keyboard.Equals(lastKeyPress))
{
}
if (keyboard[Key.Z] && !keyboard.Equals(lastKeyPress))
{
}
lastKeyPress = keyboard;
}
这是zoomOut的函数:
public Vector3 zoomOut(Vector3 actual)
{
if(zoomLimits[1]<=actual.X || zoomLimits[1] <= actual.Y || zoomLimits[1] <= actual.Z) {
Console.WriteLine("Limita de zoomOut a fost atinsa!");
return actual;
}
Vector3 nou = new Vector3(actual.X + 5, actual.Y + 5, actual.Z + 5);
return nou;
}
这里我只是改变了lookat矩阵中的eyeVector。但我有一些限制。如果我超过这些限制,场景就会消失。你有解决这个问题的想法吗?我不想限制缩放。
在没有看到您的完整代码的情况下,我只能提供这么多帮助,但是您检查过裁剪平面了吗?这听起来像是裁剪平面太近的教科书案例;检查你的透视矩阵。
当您调用 Matrix4.CreatePerspectiveFieldOfView
时,增加 depthFar,这应该可以解决您的问题。