C# 当透视图发生变化时,OpenGL图形会从屏幕上延伸出来

C# 当透视图发生变化时,OpenGL图形会从屏幕上延伸出来,c#,opengl,C#,Opengl,我有一个简单的OpenGL程序,用c#编写,使用SharpGL 该程序从文件中获取一系列点,并使用GLBegin/GLEnd方法进行渲染 那部分很好用。当我尝试更改和调整渲染的透视图时,问题就出现了。如果我更改OpenGLControl的大小和位置,然后调用: public void AdjustPerspective(double width, double height) { _gl.MatrixMode(OpenGL.GL_PROJECTION);

我有一个简单的OpenGL程序,用c#编写,使用SharpGL

该程序从文件中获取一系列点,并使用GLBegin/GLEnd方法进行渲染

那部分很好用。当我尝试更改和调整渲染的透视图时,问题就出现了。如果我更改OpenGLControl的大小和位置,然后调用:

    public void AdjustPerspective(double width, double height)
    {
        _gl.MatrixMode(OpenGL.GL_PROJECTION);
        _gl.LoadIdentity();
        _gl.Perspective(45.0f,  width / height, .1, 400.0);
        _gl.MatrixMode(OpenGL.GL_MODELVIEW);
    }
渲染开始从屏幕向外延伸

它应该是什么样子的:

现在,这种情况并不总是发生,而且只有在调用AdjustPerspective方法之后才会发生

该方法是从调整OpenGLControl大小时调用的事件调用的

我对此完全不知所措,因为它并不总是发生。我的第一个想法是,这与附近的飞机有关,但鉴于这并不总是发生,这不可能

我唯一的想法是glPerspective在多次调用时会产生一些负面影响


如果有帮助,还可以从事件调用draw调用

在初始化OpenGLControls时,我通过将RenderContextType设置为SharpGL.RenderContextType.NativeWindow来修复它

图像有什么问题?你期待什么?哦,对不起。我将把它添加到主帖子中。当你调整大小时,我想到的另一件事是glViewPort。你用新的尺寸来称呼它吗?我从来没有叫过它,诺威尔,你应该这么说。然而,我怀疑这是唯一的问题。但是尝试一下,发布一个更新。