Нарисуйте простой круг в XNA - PullRequest
9 голосов
/ 25 марта 2010

Я хочу нарисовать 2d заполненный круг. Я искал повсюду и не могу найти ничего, что хотя бы отдаленно помогло мне нарисовать круг. Я просто хочу указать высоту, ширину и местоположение на моем холсте.

Кто-нибудь знает как?

Спасибо!

Ответы [ 7 ]

11 голосов
/ 26 марта 2010

XNA обычно не имеет представления о холсте, на котором можно рисовать. Вместо этого вы можете либо создать круг в вашей любимой программе рисования и отобразить его как спрайт, либо создать серии вершин в 3D-сетке, чтобы приблизить круг и отобразить его.

8 голосов
/ 26 марта 2010

Вы также можете проверить пример структуры, которую Джефф Вебер использует в Farseer:
http://www.codeplex.com/FarseerPhysics

У демоверсий есть динамический генератор текстур, который позволяет ему создавать круги и прямоугольники (которые затем используют образцы для визуализации физического моделирования). Вы можете просто использовать это: -)

6 голосов
/ 03 декабря 2013

Была такая же проблема, как уже предлагали другие, вам нужно нарисовать квадрат или прямоугольник с текстурой круга на нем. Здесь следует мой метод для создания круговой текстуры во время выполнения. Не самый эффективный или причудливый способ сделать это, но он работает.

Texture2D createCircleText(int radius)
{
    Texture2D texture = new Texture2D(GraphicsDevice, radius, radius);
    Color[] colorData = new Color[radius*radius];

    float diam = radius / 2f;
    float diamsq = diam * diam;

    for (int x = 0; x < radius; x++)
    {
        for (int y = 0; y < radius; y++)
        {
            int index = x * radius + y;
            Vector2 pos = new Vector2(x - diam, y - diam);
            if (pos.LengthSquared() <= diamsq)
            {
                colorData[index] = Color.White;
            }
            else
            {
                colorData[index] = Color.Transparent;
            }
        }
    }

    texture.SetData(colorData);
    return texture;
}
3 голосов
/ 26 марта 2010

Кажется, здесь есть решение с использованием пиксельного шейдера - http://www.xnainfo.com/resources.php?view=Code%20snippets

3 голосов
/ 26 марта 2010

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

Здесь есть некоторая полезная информация:

http://forums.xna.com/forums/t/7414.aspx

Мой вам совет - просто раскрасить краску или что-то в этом роде, самостоятельно создать основные фигуры и использовать конвейер содержимого.

2 голосов
/ 26 марта 2010

Другой вариант (если вы хотите использовать более сложную кисть градиента или что-то в этом роде) - нарисовать квадратик, выровненный по экрану, и использовать пиксельный шейдер.

0 голосов
 public Texture2D createCircleText(int radius, GraphicsDevice Devise,Color color,int tickenes)
    {
        Texture2D texture = new Texture2D(Devise, radius, radius);
        Color[] colorData = new Color[radius * radius];
        if (tickenes >= radius) tickenes = radius - 5;
        float diam = radius / 2f;
        float diamsq = diam * diam;
        float intdiam = (radius-tickenes) / 2f;
        float intdiamsq = intdiam * intdiam;

        for (int x = 0; x < radius; x++)
        {
            for (int y = 0; y < radius; y++)
            {
                int index = x * radius + y;
                Vector2 pos = new Vector2(x - diam, y - diam);
                if (pos.LengthSquared() <= diamsq)
                {
                    colorData[index] = color;
                }
                else
                {
                    colorData[index] = Color.Transparent;
                }
                if (pos.LengthSquared() <= intdiamsq)
                {
                    colorData[index] = Color.Transparent; 
                }
            }
        }

        texture.SetData(colorData);
        return texture;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...