我正在使用OpenTK在C#中进行2D应用程序,以渲染我使用QuickFont库的文本。 我的问题是,当我想改变我的点标签的颜色时,它们根本不会改变,它们总是颜色为白色,我不知道为什么。
这是我的代码:
Color _labelColor = Color.Green; // For example
//... More code ...//
QFont.Begin();
_pointLabel = new QFont(new Font("Tahoma", 5f, FontStyle.Regular));
_pointLabel.Options.Colour = _labelColor; // Here is correct, it's Green
QFont.End();
foreach (MyPoint p in _points)
{
if (p.Visible)
{
// Draw labels only for visible points
_pointLabel.Print(p.Label, new Vector2(p.X, p.Y));
}
}
我希望我的标签颜色随var _labelColor 而变化,但它不起作用。标签的颜色是总是白色,即使我强制为绿色或其他颜色。
我认为我的代码的这一部分是正确的,但我认为我需要首先正确配置OpenTK相机,但我不知道该怎么做。
要添加信息,如果有帮助,我正在使用普通纹理和精灵纹理。
任何帮助都会非常苛刻。
抱歉我的英文。
答案 0 :(得分:0)
我找到了答案,问题是我加载了纹理错误,所以我不知道为什么我不能为字体设置颜色。
我的加载纹理功能现在如下:
private int LoadTexture(Image img)
{
Bitmap bmp = new Bitmap(img);
int id_textura = GL.GenTexture();
GL.BindTexture(TextureTarget.Texture2D, id_textura);
BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, bmp_data.Width, bmp_data.Height, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bmp_data.Scan0);
bmp.UnlockBits(bmp_data);
// We haven't uploaded mipmaps, so disable mipmapping (otherwise the texture will not appear).
// On newer video cards, we can use GL.GenerateMipmaps() or GL.Ext.GenerateMipmaps() to create
// mipmaps automatically. In that case, use TextureMinFilter.LinearMipmapLinear to enable them.
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
return id_textura;
}
我在问题中写的代码是正确的。我希望它对任何人都有帮助。
抱歉我的英文。
答案 1 :(得分:0)
检查此示例
QFontRenderOptions textOpts;
textOpts = new QFontRenderOptions()
{
Colour = Color.White, //Color.DarkRed, etc
DropShadowActive = false
};
QFont myFont = new QFont(folder+"arial.ttf", 7, new QFontBuilderConfiguration(true));
QFontDrawing drawing = new QFontDrawing();
drawing.Print(myFont, "cad", position, QFontAlignment.Left, textOpts);
drawing.RefreshBuffers();
drawing.Draw();