我正在尝试创建一个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。但是我有一些限制。如果我超过这些限制,场景将消失。您有什么想法要解决吗?我不想限制缩放。
答案 0 :(得分:0)
在没有看到完整代码的情况下,我只能提供太多帮助,但是您是否检查了剪切平面?这听起来像教科书中的剪裁平面太近了。检查您的透视矩阵。
致电Matrix4.CreatePerspectiveFieldOfView
时,请增加depthFar,这应该可以解决您的问题。