public BillboardSingleText3D() { Positions = new Vector3Collection(); Colors = new Color4Collection(); TextureCoordinates = new Vector2Collection(); TextInfo = new TextInfo(); }
internal void DrawCharacter(Character character, Vector3 origin, float w, float h, float kerning, TextInfo info) { var cw = character.Bounds.Width; var ch = character.Bounds.Height; var cu = character.Bounds.Left; var cv = character.Bounds.Top; // CCW from top left var a = new Vector2(origin.X + kerning, origin.Y); var b = new Vector2(origin.X + kerning, origin.Y + ch); var c = new Vector2(origin.X + cw + kerning, origin.Y); var d = new Vector2(origin.X + cw + kerning, origin.Y + ch); var uv_a = new Vector2(cu/w, cv/h); var uv_b = new Vector2(cu/w, (cv + ch)/h); var uv_c = new Vector2((cu + cw)/w, cv/h); var uv_d = new Vector2((cu + cw)/w, (cv + ch)/h); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Colors.Add(new Color4(0, 0, 0, 1)); Colors.Add(new Color4(0, 0, 0, 1)); Colors.Add(new Color4(0, 0, 0, 1)); Colors.Add(new Color4(0, 0, 0, 1)); Colors.Add(new Color4(0, 0, 0, 1)); Colors.Add(new Color4(0, 0, 0, 1)); TextureCoordinates.Add(uv_b); TextureCoordinates.Add(uv_d); TextureCoordinates.Add(uv_a); TextureCoordinates.Add(uv_a); TextureCoordinates.Add(uv_d); TextureCoordinates.Add(uv_c); info.Offsets.Add(a); info.Offsets.Add(c); info.Offsets.Add(b); info.Offsets.Add(b); info.Offsets.Add(c); info.Offsets.Add(d); }
private void DrawCharacter(string text, Vector3 origin, float w, float h, TextInfo info) { Positions.Clear(); Colors.Clear(); TextureCoordinates.Clear(); info.Offsets.Clear(); // CCW from top left var a = new Vector2(-w / 2, -h / 2); var b = new Vector2(-w / 2, h / 2); var c = new Vector2(w / 2, -h / 2); var d = new Vector2(w / 2, h / 2); var uv_a = new Vector2(0, 0); var uv_b = new Vector2(0, 1); var uv_c = new Vector2(1, 0); var uv_d = new Vector2(1, 1); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Colors.Add(FontColor); Colors.Add(FontColor); Colors.Add(FontColor); Colors.Add(FontColor); Colors.Add(FontColor); Colors.Add(FontColor); TextureCoordinates.Add(uv_b); TextureCoordinates.Add(uv_d); TextureCoordinates.Add(uv_a); TextureCoordinates.Add(uv_a); TextureCoordinates.Add(uv_d); TextureCoordinates.Add(uv_c); info.Offsets.Add(a); info.Offsets.Add(c); info.Offsets.Add(b); info.Offsets.Add(b); info.Offsets.Add(c); info.Offsets.Add(d); }
internal void DrawCharacter(Character character, Vector3 origin, float w, float h, float kerning, TextInfo info) { var cw = character.Bounds.Width; var ch = character.Bounds.Height; var cu = character.Bounds.Left; var cv = character.Bounds.Top; // CCW from top left var a = new Vector2(origin.X + kerning, origin.Y); var b = new Vector2(origin.X + kerning, origin.Y + ch); var c = new Vector2(origin.X + cw + kerning, origin.Y); var d = new Vector2(origin.X + cw + kerning, origin.Y + ch); var uv_a = new Vector2(cu / w, cv / h); var uv_b = new Vector2(cu / w, (cv + ch) / h); var uv_c = new Vector2((cu + cw) / w, cv / h); var uv_d = new Vector2((cu + cw) / w, (cv + ch) / h); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Positions.Add(info.Origin); Colors.Add(new Color4(0, 0, 0, 1)); Colors.Add(new Color4(0, 0, 0, 1)); Colors.Add(new Color4(0, 0, 0, 1)); Colors.Add(new Color4(0, 0, 0, 1)); Colors.Add(new Color4(0, 0, 0, 1)); Colors.Add(new Color4(0, 0, 0, 1)); TextureCoordinates.Add(uv_b); TextureCoordinates.Add(uv_d); TextureCoordinates.Add(uv_a); TextureCoordinates.Add(uv_a); TextureCoordinates.Add(uv_d); TextureCoordinates.Add(uv_c); info.Offsets.Add(a); info.Offsets.Add(c); info.Offsets.Add(b); info.Offsets.Add(b); info.Offsets.Add(c); info.Offsets.Add(d); }
internal void DrawText(TextInfo info) { //Positions.Clear(); //Colors.Clear(); //TextureCoordinates.Clear(); // http://www.cyotek.com/blog/angelcode-bitmap-font-parsing-using-csharp int x = 0; int y = 0; var w = bmpFont.TextureSize.Width; var h = bmpFont.TextureSize.Height; char previousCharacter; previousCharacter = ' '; var normalizedText = bmpFont.NormalizeLineBreaks(info.Text); foreach (char character in normalizedText) { switch (character) { case '\n': x = 0; y -= bmpFont.LineHeight; break; default: Character data = bmpFont[character]; int kerning = bmpFont.GetKerning(previousCharacter, character); //DrawCharacter(data, x + data.Offset.X + kerning, y + data.Offset.Y, builder); DrawCharacter(data, new Vector3(x,y,0), w, h, kerning, info); x += data.XAdvance + kerning; break; } previousCharacter = character; } }