【问题标题】:c# winform sharpgl, get modelview matrix and openglControl doesen't drawingc# winform sharpgl,获取模型视图矩阵和openglControl不绘制
【发布时间】:2021-01-31 09:21:24
【问题描述】:

我有一个有趣的事情。 我想获取渲染对象的窗口坐标。当我在 OpenGLDraw 事件中使用它时:

        var modelview = new double[16];            
        gl.GetDouble(OpenGL.GL_MODELVIEW_MATRIX, modelview);

绘图不起作用。 环境:VS 2019社区版,SharpGL.WinForms 3.1.1.,c# winform项目,framework 4.6.1

OpenGLControl 事件: 初始化,我只需要二维空间。

    private void RenderPanel_OpenGLInitialized(object sender, EventArgs e)
{
    gl = RenderPanel.OpenGL;
    gl.Disable(OpenGL.GL_DEPTH_TEST);
    gl.Enable(OpenGL.GL_BLEND);
    gl.BlendFunc(OpenGL.GL_SRC_ALPHA, OpenGL.GL_ONE_MINUS_SRC_ALPHA);

    gl.LoadIdentity();
    gl.MatrixMode(OpenGL.GL_PROJECTION);
    gl.LoadIdentity();
    gl.Viewport(0, 0, RenderPanel.Width, RenderPanel.Height);
    gl.Ortho(0, RenderPanel.Width, RenderPanel.Height, 0, 1, -1);
    gl.MatrixMode(OpenGL.GL_MODELVIEW);
    gl.LoadIdentity();
}

绘图:效果很好,绘制对象

        private void RenderPanel_OpenGLDraw(object sender, RenderEventArgs args)
    {
        gl.ClearColor(1, 1, 1, 1);
        gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
        gl.LoadIdentity();
        glColor(Color.White);
        gl.Enable(OpenGL.GL_TEXTURE_2D);
        foreach (ImageItem img in ImageItems.Items)
        {
            img.Draw();
        }
    }

我想在 foreach 循环中使用它,在 img.Draw()(部分代码)之后

    var modelview = new double[16];
    var projection = new double[16];
    var viewport = new int[4];
    var winx = new double[1];
    var winy = new double[1];
    var winz = new double[1];
    gl.GetDouble(OpenGL.GL_MODELVIEW_MATRIX, modelview);
    gl.GetDouble(OpenGL.GL_PROJECTION_MATRIX, projection);
    gl.GetInteger(OpenGL.GL_VIEWPORT, viewport);
    gl.Project(0, 0, 0, modelview, projection, viewport, winx, winy, winz);

尝试调试,逐行注释。我看到使用 gl.GetDouble() 绘图时消失了。我得到一个正确的窗口坐标,只是最后一个对象消失了。 .Draw() 很简单

    gl.BindTexture(OpenGL.GL_TEXTURE_2D, TextureID);
    gl.LoadIdentity();
    gl.Color(1f, 1f, 1f, pos.a);
    gl.Translate(pos.x, pos.y, 0);
    gl.Rotate(pos.r, 0, 0);
    OpenGLDraw.DrawQuad(pos.w, pos.h);

【问题讨论】:

    标签: c# winforms sharpgl


    【解决方案1】:

    这是一个错误。我将这 2 行种植到一些示例项目和绘图方法 borken(一些对象消失)。 我尝试了很多事情。最后改变了renderContextType,最后一个对象出现了。我认为这不是一个好的解决方案,但有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      相关资源
      最近更新 更多