Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как выводить текст в DirectX C#


Автор: drdoom 25.1.2009, 14:18
Есть проблема не могу вывести текст в девайс  директ икса

Автор: EgoBrain 27.1.2009, 11:22
Цитата(drdoom @ 25.1.2009,  14:18)
Есть проблема не могу вывести текст в девайс  директ икса

Такого термина как "вывод текста в устройство" нет в компьютерной графики. Скажите что именно необходимо сделать или в чем проблема. Я знаю два варианта: вывод двухмерного текста в экранных координатах или вывод 3-Д текста в пространстве:
Код

...
Microsoft.DirectX.Direct3D.Font font = null;
Mesh textMesh = null;
font = new Microsoft.DirectX.Direct3D.Font(device, new System.Drawing.Font(..., ..., ...));
textMesh = Mesh.TextFromFont(device, new System.Drawing.Font(..., ..., ...), "3-D TEXT", 0.001f, 0.4f);
...
textMesh.DrawSubset(0); //Рисовать 3-Д текст
font.DrawText(null, "2-D TEXT", new Rectangle(x, y, this.Width, this.Height), DrawTextFormat.NoClip | //Рисовать 2-Д текст
                DrawTextFormat.ExpandTabs | DrawTextFormat.WordBreak, Color.Black);
...

Автор: drdoom 28.1.2009, 14:15
текст вывел, но чет не понял как поменять ему размер, изменение размера фонта ниче не дало, и еще вопрос как в пространстве его размещать в любом месте, он в центре координат исключительно рисуется? это я о3D тексте. Заранее спасибо

Автор: EgoBrain 29.1.2009, 12:01
Цитата(drdoom @ 28.1.2009,  14:15)
текст вывел, но чет не понял как поменять ему размер, изменение размера фонта ниче не дало, и еще вопрос как в пространстве его размещать в любом месте, он в центре координат исключительно рисуется? это я о3D тексте. Заранее спасибо

Вообще 3-Д текст - это ж мех-объект, значит поддается всем правилам мех. Напиши специальную функцию для рисования 3-Д текста для удобства программирования, как это советует Том Миллер, только я чутка доработал:
Код

private void Draw3DText(float roll, float pitch, float yaw, float x, float y, float z, float xscale, float yscale, float zscale)
        {
            device.Transform.World = device.Transform.World = Matrix.RotationYawPitchRoll(yaw, pitch, roll) *
                 Matrix.Scaling(xScaling, yScaling, zScaling) * Matrix.Translation(x, y, z);
            device.Material = meshMaterial;
            mesh.DrawSubset(0);
        }

Просто в аргументах задаешь вращения вокруг осей, положение в системе и масштабирование, можешь по желанию кучу всего добавить, например, настройки материала, и каждый новый раз как тебе необходимо нарисовать текст - просто вызываешь функцию.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)