问题描述
我正在开发一个包含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 (将#修改为@)