0

我在 SharpGL 中有此代码,其中实现了缩放和平移。这是de draw方法:

private void OpenGLDraw(object sender, SharpGL.WPF.OpenGLRoutedEventArgs args)
{
    // Enable finish button
    if (openFileOk && dispCBOk) { finish_btn.IsEnabled = true; }
    else { finish_btn.IsEnabled = false; }

    //  Get the OpenGL object
    OpenGL gl = GLControl.OpenGL;

    //  Set The Material Color
    float[] glfMaterialColor = new float[] { 0.4f, 0.2f, 0.8f, 1.0f };

    float w = (float)GLControl.ActualWidth;
    float h = (float)GLControl.ActualHeight;

    //  Perspective projection
    gl.Viewport(0, 0, (int)w, (int)h);

    gl.Ortho(0, w, 0, h, -100, 100);

    //  Clear The Screen And The Depth Buffer
    gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
    gl.Material(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_AMBIENT_AND_DIFFUSE, glfMaterialColor);

    gl.MatrixMode(MatrixMode.Modelview);
    gl.LoadIdentity();

    gl.Scale(scale,scale,1);

    //  Camera Position
    gl.LookAt(_position[0], _position[1], _position[2],
        _viewPoint[0], _viewPoint[1], _viewPoint[2],
        _upVector[0], _upVector[1], _upVector[2]);

    // Draw the helix
    float[][] points = vertexes.ToArray();
    Helix(points.Length, points);
        }

我这里有一个使用视口的透视投影(正交投影和比例用于缩放)。这是平移屏幕上绘制的任何内容的代码:

//  pan
//  y axis
//  Up
if (keyCode == 1)
{
    _viewPoint[1] += _moveDistance;
    _position[1] += _moveDistance;
}
//  Down
else if (keyCode == 2)
{
    _viewPoint[1] += -_moveDistance;
    _position[1] += -_moveDistance;
}

//  x axis
//  Left
else if (keyCode == 3)
{
    _viewPoint[2] += _moveDistance;
    _position[2] += _moveDistance;
}
//  Right
else if (keyCode == 4)
{
    _viewPoint[2] += -_moveDistance;
    _position[2] += -_moveDistance;
}

问题是,当我向任何一侧(上、下、左、右)移动太多时,绘图会变得非常扭曲。起初我没有注意到它,因为我正在处理非常放大的图像并且看不到差异,但现在我看到失真总是发生,它越远离图像越强烈。我只想知道为什么会发生这种情况,如果可能的话,一个解决方案,谢谢。

下面是一个例子:

普通视图

扭曲的视图

4

0 回答 0