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

Есть ли в XNA другие примитивы?

06.08.2011, 22:26. Показов 2825. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
я знаю один примитив - rectangle, а какие еще есть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2011, 22:26
Ответы с готовыми решениями:

Добавить свой UserControl либо другие элементы управления в Xna
Всем доброго времени суток. Кто знает, как вообще можно добавить свой UserControl либо другие...

Есть ли у XNA классы для работы с кватернионами (если есть, где можно почитать)
Уважаемые гуру! Буду признателен за ответы на следующие вопросы: 1. Есть ли у XNA классы для...

Есть ли еще смысл в XNA?
Есть ли еще смысл в XNA?Хочу использовать в своем проекте... но... боюсь что не запустится на...

Есть ли смысл учить XNA?
В силу того, что я нормально учил только шарп, хотелось бы использовать технологию связанную с...

5
444 / 348 / 32
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
07.08.2011, 00:04 2
Лучший ответ Сообщение было отмечено za5 как решение

Решение

пример здесь. так рисуется всё что угодно.

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

Rectangle это структура и там нет инфы о цвете пикселей.
1
0 / 0 / 0
Регистрация: 05.08.2011
Сообщений: 15
07.08.2011, 00:48  [ТС] 3
а как нарисовать программную окружность ? что то типа ректангла только окружность
0
444 / 348 / 32
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
07.08.2011, 02:56 4
Лучший ответ Сообщение было отмечено za5 как решение

Решение

просто(через LineStrip):
C#
1
2
3
4
5
6
7
8
9
10
Vector3 CENTER = new Vector3(100, 100, 0);//Координаты центра
float R = 100;//Радиус
lineStripIndices = new short[points];
for (int i = 0; i < points; i++) lineStripIndices[i] = (short)(i);
pointList = new VertexPositionColor[points];
for (int i = 0; i < points; i++)
{
    float phi = (float)(i) / (float)(points-1) * MathHelper.TwoPi;
    pointList[i] = new VertexPositionColor( new Vector3(CENTER.X + R * (float)Math.Sin(phi), CENTER.Y + R * (float)Math.Cos(phi), 0), Color.White);
}
переделанный пример:
C#
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
 
namespace DrawUserPrimitivesWindows
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        Matrix worldMatrix;
        Matrix viewMatrix;
        Matrix projectionMatrix;
 
        BasicEffect basicEffect;
        VertexDeclaration vertexDeclaration;
        VertexPositionColor[] pointList;
        VertexBuffer vertexBuffer;
 
        int points = 80;
        short[] lineStripIndices;
        RasterizerState rasterizerState;
 
        GraphicsDeviceManager graphics;
 
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }
        protected override void Initialize()
        {
            viewMatrix = Matrix.CreateLookAt(new Vector3(0.0f, 0.0f, 1.0f), Vector3.Zero, Vector3.Up);
            projectionMatrix = Matrix.CreateOrthographicOffCenter(0, (float)GraphicsDevice.Viewport.Width, (float)GraphicsDevice.Viewport.Height, 0, 1.0f, 1000.0f);
            vertexDeclaration = new VertexDeclaration(new VertexElement[]{new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), 
                new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0)});
            basicEffect = new BasicEffect(GraphicsDevice);
            basicEffect.VertexColorEnabled = true;
            worldMatrix = Matrix.CreateTranslation(GraphicsDevice.Viewport.Width / 2f - 150,
                GraphicsDevice.Viewport.Height / 2f - 50, 0);
            basicEffect.World = worldMatrix;
            basicEffect.View = viewMatrix;
            basicEffect.Projection = projectionMatrix;
 
            //Заполняем точки:
            InitializeLineStrip();
 
            rasterizerState = new RasterizerState();
            rasterizerState.FillMode = FillMode.WireFrame;
            rasterizerState.CullMode = CullMode.None;
            base.Initialize();
        }
        protected override void LoadContent()
        {
        }
        private void InitializeLineStrip()
        {
 
            //Координаты центра:
            Vector3 CENTER = new Vector3(100, 100, 0);
            //Радиус:
            float R = 100;
            lineStripIndices = new short[points];
            for (int i = 0; i < points; i++) lineStripIndices[i] = (short)(i);
            pointList = new VertexPositionColor[points];
            for (int i = 0; i < points; i++)
            {
                float phi = (float)(i) / (float)(points-1) * MathHelper.TwoPi;
                pointList[i] = new VertexPositionColor(
                    new Vector3(CENTER.X - R * (float)Math.Sin(phi), CENTER.Y - R * (float)Math.Cos(phi), 0), Color.White);
            }
            vertexBuffer = new VertexBuffer(graphics.GraphicsDevice, vertexDeclaration,
                points, BufferUsage.None);
            vertexBuffer.SetData<VertexPositionColor>(pointList);
        }
 
        protected override void Update(GameTime gameTime)
        {
            base.Update(gameTime);
        }
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.SteelBlue);
            foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes)
            {
                pass.Apply(); DrawLineStrip();
            }
            base.Draw(gameTime);
        }
 
        private void DrawLineStrip()
        {
            GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(
                PrimitiveType.LineStrip,
                pointList,
                0,   // vertex buffer offset to add to each element of the index buffer
                points,   // number of vertices to draw
                lineStripIndices,
                0,   // first index element to read
                points-1    // number of primitives to draw
            );
        }
    }
}


поменяй в этом примере point = 4 - будет треугольник, point = 5 - квадрат и т.д.
1
0 / 0 / 0
Регистрация: 05.08.2011
Сообщений: 15
07.08.2011, 03:44  [ТС] 5
а как теперь на эту окружность надеть текстуру и заставить отскакивать от краев экрана?
0
444 / 348 / 32
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
07.08.2011, 15:27 6
Лучший ответ Сообщение было отмечено za5 как решение

Решение

можно просто в редакторе вырезать кружок из текстуры, остальное прозрачным.
можно через эффект:
C#
1
2
3
4
5
6
7
8
9
//............................................
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
     float4 Color = 0;
     //выберем круг из текстуры.2R=WIDTH=HEIGHT;
     if(distance(input.TexUV, float2(0.5,0.5)) <=0.5) Color = tex2D(tex_sampler,input.TexUV);
     return Color;
}
//............................................
0
07.08.2011, 15:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2011, 15:27
Помогаю со студенческими работами здесь

Есть ли серьезные игры, разработанные на XNA
Задался вопросом, а есть ли серьезные игры, разработанные на XNA. В моем понимании серьезные, это...

Как конвертировать готовый рабочий проект написаный на xna 3.1 в xna 4.0?
Помогите пожалуйста ! Есть рабочий проект игры &quot;Mario&quot; написанный на xna 3.1 нужно как то исправить...

Насколько актуальна XNA и будет ли XNA 5.0
Насколько актуально сейчас изучение/разработка на XNA? Я пока не очень хорошо разбираюсь в вопросе,...

Есть ли другие суставы типо джоитов ?
Есть ли другие суставы типо джоитов ?

Длинная арифметика или есть другие пути?
Проблема состоит в том, что необходимо решать физические задачи, где фигурируют числа в 20-23...

Перетаскивание 2D объекта, в котором есть другие объекты, мышью
Здрасте! У меня возникла проблема - есть 2D СТАКАН в него падают другие объекты, нужно...


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

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