2015-10-27 3 views
2

Я искал по Интернету, чтобы попытаться найти код, который позволяет мне нарисовать текст из обычного шрифта (а не шрифта спрайта) и найти только фрагменты, которые мне совсем не помогли.Как нарисовать текст с помощью SharpDX?

У кого-то есть полный исходный файл, который позволяет мне легко рисовать текст с помощью SharpDX и D3D11/DirectWrite? Я хочу создать прозрачное оверлейное окно, которое отображает некоторую информацию (например, Fraps). Я нашел учебник, который это делает, но он использует шрифт sprite, и я хочу, чтобы он настраивался с точки зрения размера и шрифта.

Это то, что я до сих пор:

using System; 
using SharpDX; 
using SharpDX.Direct3D11; 
using SharpDX.Windows; 
using SharpDX.Direct2D1; 
using SharpDX.DirectWrite; 
using SharpDX.DXGI; 

namespace SharpDXRenderer 
{ 
    static class Program 
    { 

     [STAThread] 
     static void Main() 
     { 
      SharpDX.DirectWrite.TextFormat directWriteTextFormat; 
      SharpDX.DirectWrite.Factory directWriteFactory; 
      SharpDX.Direct2D1.SolidColorBrush directWriteFontColor; 
      SharpDX.Direct2D1.RenderTarget direct2DRenderTarget; 
      Surface d2dSurface; 

      RenderForm form = new RenderForm("Example"); 

      var desc = new SwapChainDescription() 
      { 
       BufferCount = 1,//buffer count 
       ModeDescription = new ModeDescription(form.ClientSize.Width,  form.ClientSize.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),//sview 
       IsWindowed = true, 
       OutputHandle = form.Handle, 
       SampleDescription = new SampleDescription(1, 0), 
       SwapEffect = SwapEffect.Discard, 
       Usage = Usage.RenderTargetOutput 
      }; 



      var d2dFactory = new SharpDX.Direct2D1.Factory(); 
      d2dSurface = backBuffer.QueryInterface<Surface>(); 

      direct2DRenderTarget = new SharpDX.Direct2D1.RenderTarget(d2dFactory, d2dSurface, new  SharpDX.Direct2D1.RenderTargetProperties(new  SharpDX.Direct2D1.PixelFormat(Format.Unknown,  SharpDX.Direct2D1.AlphaMode.Premultiplied))); 

      directWriteFactory = new SharpDX.DirectWrite.Factory(); 

      directWriteTextFormat = new SharpDX.DirectWrite.TextFormat(directWriteFactory, "Calibri", 12) {  TextAlignment = SharpDX.DirectWrite.TextAlignment.Leading, ParagraphAlignment =  SharpDX.DirectWrite.ParagraphAlignment.Near }; 

      directWriteFontColor = new SharpDX.Direct2D1.SolidColorBrush(direct2DRenderTarget, Color.White); 
     } 
    } 
} 

Я знаю, что отсутствует SwapChain, устройство, и я думаю, что текстуры, но я не уверен, если мне нужно больше вещей. Этот backBuffer - это то, что мне не хватает, но я не знаю, какой он тип.

d2dSurface = backBuffer.QueryInterface<Surface>(); 

Любая помощь в отношении текста и основного рисунка рисунка оценивается.

Заранее спасибо.

+0

Добро пожаловать на переполнение стека. Как бы то ни было, ваш вопрос может быть проголосован за удаление, потому что вы запрашиваете внешний ресурс. Вместо этого вам нужно сделать shre ваш код и что не так с ним. Тогда люди могут помочь вам. –

+0

Спасибо. У вас есть вопрос. Где я могу поместить код? У меня уже есть часть, но мне не хватает чего-то, чтобы заставить ее работать. Должен ли я опубликовать его как ответ на этот вопрос или что-то еще? Еще раз спасибо. – SPACoD

+0

Просто отредактируйте свой пост и добавьте его в конец. Префикс каждой строки кода с 4 пробелами, и он будет отформатировать его. –

ответ

1

Я совершенно не знаком с SharpDx, поэтому принимайте мое предложение с солью, но я использую SharpDX.Direct2D1.DeviceContext для рендеринга текста в своем приложении. Я понимаю, что Direct2D делает текст относительно легким для рендеринга. (В 2D, по крайней мере) Есть много примеров/деталей на https://github.com/spazzarama/Direct3D-Rendering-Cookbook (которая связывает в книге SharpDx одним и тем же именем)

context2D.DrawText("myTextHere", _textFormat, new RectangleF(0, 0, 100, 100), _gradeLines[ii].ForegroundBrush); 
+0

Как вы вызываете DrawText на Direct2D1.DeviceContext? Кажется, такого метода нет. Это на RenderTarget: http://sharpdx.org/wiki/class-library-api/direct2d1.html – Asik

+0

SharpDX.Direct2D1.DeviceContext расширяет родительский класс RenderTarget, и вы правы, он находится в классе RenderTarget – millejos

+0

Duh, должен был проверить это. Благодаря! – Asik

Смежные вопросы