1

我正在使用Microsoft.DirectX.Direct3DMicrosoft.DirectX以 3D 形式呈现一些数据。

现在,我想绘制文本来指示空间内的高度值。如下图所示:

在此处输入图像描述

现在我面临两个主要问题:

问题 1:如您所见,绘制的文字是上下颠倒的。我该怎么做才能使其正确显示?

问题 2:Direct3DXException当我尝试旋转屏幕时出现错误。错误信息如下: 在此处输入图像描述

下面是我DrawText()使用Sprite类的代码

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);
4

1 回答 1

1

我认为这是因为您在每一帧中都创建了新的 Sprite 占用了大量内存。(每秒60帧?)
这个问题发生在使用鼠标事件旋转屏幕的地方,它将不断更新frontsprite中设备的结果。

因此,我建议您将部分代码移出。
将声明部分移动到全局,然后将初始化移动到 Initialization() 部分。
还将 fontsprite.End() 移动到 Final() 部分。
我希望能有所帮助。

于 2013-08-06T09:36:44.337 回答