Форум программистов, компьютерный форум, киберфорум
XNA/MonoGame
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
1

Рисование геометрических примитивов в XNA

29.10.2012, 14:36. Показов 5024. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Как мне нарисовать линию, квадрат(или полигон), круг и вывести строку в XNA?
Можешь ли это сделать без привязки текстур?
Если есть где можно почитать про это, можете оставить ссылку на ресурс?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2012, 14:36
Ответы с готовыми решениями:

Вывод графических примитивов на XNA
Как на XNA выводить на экран примитивы линию или полосу?

Рисование примитивов
Недавно начал изучать c#, и не могу сделать вот такое задание: Создать программу которая позволяет...

C++ Рисование примитивов
Как отобразить на экране куб, если известны 2 его точки А(0, 0, 0) и С1(200, 200, 200) ? Есть...

Рисование графических примитивов
Задача такова: Необходимо нарисовать ромб. Ну а почему бы и нет? Можно и треугольник (не квадрат...

2
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 19
30.10.2012, 07:47 2
насколько я понял в XNA нет нужных функций. можно лишь отрисовать текстуру. ТО есть как наверное единственный выход - брать рисовать либо программно либо ручками изображение необходимых объектов. Линию например можно изобразить как диагональ квадратного изображения.
Для вывода строк используют тот же самый SpriteBatch и SpriteFont
C#
1
spriteBatch.DrawString(someFont, "blablabla", new Vector2(0,0), Color.Red);
someFont - переменная типа SpriteFont.
загружается так:
C#
1
someFont = Content.Load<SpriteFont>("fontFileName");
Файл шрифта (fontFileName.spritefont) имеет такой вид:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?xml version="1.0" encoding="utf-8"?>
<!--
Этот файл содержит XML-описание шрифта и будет считываться конвейером контента
платформы XNA. Следуйте комментариям, чтобы настроить внешний вид
шрифта в игре и изменить символы, которыми можно
рисовать.
-->
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
  <Asset Type="Graphics:FontDescription">
 
    <!--
    Измените эту строку, чтобы сменить импортируемый шрифт.
    -->
    <FontName>Cooper Black</FontName>
 
    <!--
    Size — это плавающее значение, задаваемое в пунктах. Измените его,
    чтобы поменять размер шрифта.
    -->
    <Size>12</Size>
 
    <!--
    Spacing — это плавающее значение, задаваемое в пикселях. Измените его,
    чтобы поменять расстояние между символами.
    -->
    <Spacing>0</Spacing>
 
    <!--
    UseKerning задает кернинг шрифта. Если это значение равно "true", сведения о кернинге
    будут использованы при размещении символов.
    -->
    <UseKerning>true</UseKerning>
 
    <!--
    Style задает стиль шрифта. Допустимые значения: "Regular", "Bold", "Italic"
    и "Bold, Italic", регистр учитывается.
    -->
    <Style>Regular</Style>
 
    <!--
    Если снять знак комментария с этой строки, символ по умолчанию будет подставляться при
    отрисовке или измерении текста вместо символов, не включенных в шрифт.
    -->
    <!-- <DefaultCharacter>*</DefaultCharacter> -->
 
    <!--
    CharacterRegions указывает, какие буквы доступны в шрифте. Все символы
    от Start до End будут построены и доступны для отрисовки. Диапазон
    по умолчанию: от 32 (пробел ASCII) до 126 ("~"), что покрывает базовый набор
    символов латиницы. Символы упорядочены согласно Юникоду.
    Дополнительные сведения см. в документации.
    -->
    <CharacterRegions>
      <CharacterRegion>
        <Start> </Start>
        <End>ÿ</End>
      </CharacterRegion>
    </CharacterRegions>
  </Asset>
</XnaContent>

Создается в проекте контента через контекстное меню (Add.. New Item -> там будет тип файла spritefont). весь файл генерируется сразу необходимо лишь поставить нужное семейство шрифтов размер и диапазон символов.
0
25 / 25 / 0
Регистрация: 02.10.2012
Сообщений: 63
30.10.2012, 18:18 3
Нарисовать линию можно двумя способами:
  1. С помощью текстуры.
  2. С помощью GraphicsDevice.
Чтобы рисовать полигоны, сплошные треугольники, текстурированные треугольники и т.п. надо опять же использовать GraphicsDevice.

Чтобы нарисовать линию текстурой надо рассчитать прямоугольник текстуры, дистанцию между точками, угол между двумя точками относительно какой-небудь оси и центр между теми же двумя точками:
C#
1
2
3
4
5
6
7
8
9
10
float distance = Vector2.Distance(Point1, Point2);
Rectangle texRect = new Rectangle(0, 0, distance, Texture.Height);
float angle = GetAngleInDegrees(Point1, Point2);
float center = Center(Point1, Point2);
SpriteBatch.Draw(
    Texture, center, texRect, Color.White, 
    MathHelper.ToRadians(angle), 
    new Vector2(distance / 2f, Texture.Height / 2f),
    1f, SpriteEffects.None, 0f
);
Я 1 полный день писал класс для рисования всех видов примитивов, и выложить его здесь я не могу, ибо жалко. Но я могу дать пример подобного класса: Farseer Physics Engine 3.3.1 Testbed XNA, там есть класс DebugView, в нем реализованы отрисовки всех видов примитивов, а вообще этот класс предназначен для отрисовки содержимого класса World физического движка Farseer Physics.
Надеюсь это поможет.
0
30.10.2012, 18:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2012, 18:18
Помогаю со студенческими работами здесь

Рисование примитивов в GTK
Прошу помощи, я уже замаялся. Куда не глянь предлагают разные примеры, и то, кусочками: GdkPixmap,...

Рисование графических примитивов
Приложение, которое читает данные из файла о координатах и размерах различных графических...

Рисование графических примитивов на форме
Народ. Интересует рисование на форме, то есть круги, треугольники, линии движением мыши, но начиная...

Рисование множества примитивов. Производительность
Добрый день, уважаемые форумчане! Столкнулся с нестандартной задачей вывести около тысячи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru