微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C#WinForm中将文本添加到OpenTk glControl

如何解决在C#WinForm中将文本添加到OpenTk glControl

我正在开发一个包含OpenTk glControl的应用程序,在评估我选择使用从中获得的LoadTexture方法的不同方式之后,我必须添加将包含在模型中的文本您的论坛。问题是,当我运行它时,仅显示一个白色矩形而不是文本。我试图解决这个问题很多小时。但是,我没有能力。我附上了代码以寻求帮助。

#region "Region de Textos"

        Bitmap bmp1 = new Bitmap(glControl1.Width,glControl1.Height);
        Graphics g = Graphics.FromImage(bmp1);
        g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
        g.Clear(Color.Transparent);
        TextRenderer.DrawText(g,"text",new Font("Arial",10),new Point(0,0),Color.Yellow);
        bitmap = bmp1; // bitmap is a Global field

        texture = LoadTexture(bitmap);
        DrawImage(texture);
#endregion "Region de textos"

public static int LoadTexture(Bitmap bitmap)
    {
        if (bitmap == null)
            throw new ArgumentException("Bitmap is null.");

        int id = GL.GenTexture();
        GL.BindTexture(TextureTarget.Texture2D,id);

        GL.TexParameter(TextureTarget.Texture2D,TextureParameterName.TextureMinFilter,(int)TextureMinFilter.Linear);
        GL.TexParameter(TextureTarget.Texture2D,TextureParameterName.TextureMagFilter,(int)TextureMagFilter.Linear);

        BitmapData bmpdata = bitmap.LockBits(new Rectangle(0,bitmap.Width,bitmap.Height),ImageLockMode.ReadOnly,System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        GL.TexImage2D(TextureTarget.Texture2D,PixelInternalFormat.Rgba,bmpdata.Width,bmpdata.Height,PixelFormat.Bgra,PixelType.UnsignedByte,bmpdata.Scan0);

        bitmap.UnlockBits(bmpdata);

        return id;
    }
private void DrawImage(int texture)
    {
        float wt = Math.Max(1,glControl1.Width);
        float ht = Math.Max(1,glControl1.Height);

        SetupViewPort(wt,ht);

        GL.Enable(EnableCap.Texture2D);
        GL.ActiveTexture(TextureUnit.Texture0);
        GL.BindTexture(TextureTarget.Texture2D,texture);

        // Primitive for text rendering
        GL.Begin(PrimitiveType.Quads);
        GL.Color3(Color.Transparent);
        GL.TexCoord2(0f,1f); GL.Vertex2(0f,0f);
        GL.TexCoord2(1f,1f); GL.Vertex2(1f,0f); GL.Vertex2(1f,1f);
        GL.TexCoord2(0f,0f); GL.Vertex2(0f,1f);
        GL.End();

        GL.disable(EnableCap.Texture2D);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。