簡體   English   中英

如何在Microsoft.DirectX中使用Sprite類繪制文本並允許鼠標​​旋轉屏幕?

[英]How to use Sprite class in Microsoft.DirectX to draw text and allow the mouse to rotate the screen?

我正在使用Microsoft.DirectX.Direct3DMicrosoft.DirectX渲染3D數據。

現在,我想繪制文本以指示空間內的高度值。 如下圖所示:

在此處輸入圖片說明

現在,我面臨兩個主要問題:

問題1:如您所見,圖形文字被顛倒了。 我該怎么做才能使其正確顯示?

問題2:嘗試旋轉屏幕時出現Direct3DXException錯誤。 錯誤消息如下: 在此處輸入圖片說明

下面是我使用Sprite類的DrawText()代碼

Microsoft.DirectX.Direct3D Device = new Device(0, DeviceType.Hardware, this.panel1,
                CreateFlags.HardwareVertexProcessing, presentationParameters);

private void Render()
{
    device.BeginScene();

    if(checkBox1.checked)
    {
        DrawText();
    }

    device.EndScene();
    device.SetTexture(0, null);
    device.Present();     
}

private void DrawText()
{
    Sprite fontsprite = new Sprite(device);
    fontsprite.Begin(SpriteFlags.AlphaBlend | SpriteFlags.ObjectSpace);
    _font = new Microsoft.DirectX.Direct3D.Font(device, 10, 10, FontWeight.Bold, 1, false, CharacterSet.Ansi, Precision.Default, FontQuality.ClearType, PitchAndFamily.DefaultPitch, "face1");
    _font.DrawText(fontsprite, "1.5 Km", 120, 15, Color.Black);
    _font.DrawText(fontsprite, "2.5 Km", 120, 25, Color.Black);
    _font.DrawText(fontsprite, "3.5 Km", 120, 35, Color.Black);
    fontsprite.Transform.Translate(120, 100, 100);
    fontsprite.End();
}

在解決問題1和問題2時需要一些幫助。謝謝。

更新:問題1已由我自己解決。 現在只剩下問題2。

解決問題的代碼1:

fontsprite.Transform = Matrix.RotationZ((float)Math.PI);
fontsprite.Transform *= Matrix.Translation(heightBoxSize, heightValue, heightBoxSize);
fontsprite.Transform.Translate(100, 100, 100);

我認為這是因為高內存消耗,因為您要在每個幀中創建新的Sprite。 (每秒60幀?)
發生此問題的地方是,使用鼠標事件旋轉屏幕會不斷更新frontsprite中的設備結果。

因此,我建議您將部分代碼移出。
將聲明部分移動到全局,然后將初始化移動到Initialization()部分。
還將fontsprite.End()移到Final()部分。
希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM