[英]How to use Sprite class in Microsoft.DirectX to draw text and allow the mouse to rotate the screen?
我正在使用Microsoft.DirectX.Direct3D
和Microsoft.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.