06.05.2024 16:22:01
Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 2

· Пользователей: 0

· Всего пользователей: 7,142
· Новый пользователь: Sarahseato
Последние фото
Thurs Puzzle
Thurs Puzzle
Альбом: XNA Games

Thurs Puzzle
Thurs Puzzle
Альбом: XNA Games

Thurs Puzzle
Thurs Puzzle
Альбом: XNA Games

Блоги
general
» Unity3D – Chunky ...
general
» Unity3D: Simple p...
dampirik
» Записки программи...
dampirik
» Локализация прило...
dampirik
» Эффективность рас...
general
» HLSL: Шейдер воды
general
» Unity 3D: Управле...
general
» Unity 3D: FPS scr...
yavshoke
» XboxOne - интерес...
dampirik
» Push уведомления ...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Урок 3. Как рисовать простые 3D-объекты с помощью BasicEffect
Генерация массива вершин и рисование на его основе 3D-объекта с помощью BasicEffect. Перед изучением данного урока вам нужно ознакомиться со следующими уроками:
Шаг 1. Добавьте в класс Program новые поля для массива вершин, описания формата вершин и для базового эффекта.
class Program : Game 
{
// графический компонент
GraphicsDeviceManager graphics;
 
// массив вершин
VertexPositionColor[] vertexList;
 
// описание формата вершин
VertexDeclaration vertexDeclaration;
 
// эффект BasicEffect
BasicEffect effect;
...

 

Шаг 2. Добавьте в метод LoadContent() код создания массива вершин и заполнения его тремя вершинами. Вершины будут иметь типVertexPositionColor. В этом типе вершин можно задать позицию и цвет каждой вершины - их мы указываем в конструкторе при создании объектов вершин.
protected override void LoadContent()
{
// создать массив-контейнер для хранения трёх вершин
vertexList = new VertexPositionColor[3];
 
// создать в массиве вершин три вершины типа VertexPositionColor описывающих 3D-треугольник
vertexList[0] = new VertexPositionColor(new Vector3(0, 0.5f, 0), Color.Gray);
vertexList[1] = new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0), Color.Gray);
vertexList[2] = new VertexPositionColor(new Vector3(0.5f, -0.5f, 0), Color.Gray);
}

 

Шаг 3. Добавьте в метод LoadContent() код создающий объект-описание формата вершин которые мы используем для рисования.
protected override void LoadContent()
{
// создать массив-контейнер для хранения трёх вершин
vertexList = new VertexPositionColor[3];
 
// создать в массиве вершин три вершины типа VertexPositionColor
// описывающих 3D-треугольник
vertexList[0] = new VertexPositionColor(new Vector3(0, 0.5f, 0),
Color.Gray);
vertexList[1] = new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0),
Color.Gray);
vertexList[2] = new VertexPositionColor(new Vector3(0.5f, -0.5f, 0),
Color.Gray);
 
// создать описание формата вершин
vertexDeclaration = new VertexDeclaration(
graphics.GraphicsDevice,
VertexPositionColor.VertexElements);
}

 

Шаг 4. Добавьте в метод LoadContent() код создающий объект класса BasicEffect. Объекты данного класса содержат в себе код простого шейдера что избавляет нас от необходимости писать свой шейдер руками.
protected override void LoadContent()
{
// создать массив-контейнер для хранения трёх вершин
vertexList = new VertexPositionColor[3];
 
// создать в массиве вершин три вершины типа VertexPositionColor
//описывающих 3D-треугольник
vertexList[0] = new VertexPositionColor(new Vector3(0, 0.5f, 0),
Color.Gray);
vertexList[1] = new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0),
Color.Gray);
vertexList[2] = new VertexPositionColor(new Vector3(0.5f, -0.5f, 0),
Color.Gray);
 
// создать описание формата вершин
vertexDeclaration = new VertexDeclaration(
graphics.GraphicsDevice,
VertexPositionColor.VertexElements);
 
// создать эффект BasicEffect
effect = new BasicEffect(graphics.GraphicsDevice, null);
}

 

Шаг 5. В метод Draw() нужно добавить код рисования треугольника. Этот код начинается с "включения" эффекта и его первого прохода.
protected override void Draw(GameTime gameTime)
{
// отчистка экрана в синий цвет
graphics.GraphicsDevice.Clear(Color.Blue);
 
// использовать для отрисовки эффект BasicEffect
effect.Begin();
 
// начать отрисовку первого прохода
effect.CurrentTechnique.Passes[0].Begin();
 
// вывод сцены на экран
base.Draw(gameTime);
}

 

Шаг 6. В методе Draw() после "включения" эффекта укажите описание формата вершин которые будут выводиться на экран и отключите отсечение невидимых поверхностей - мы хотим видеть треугольник всегда не зависимо от того какой стороной он повернётся к экрану.
protected override void Draw(GameTime gameTime)
{
// отчистка экрана в синий цвет
graphics.GraphicsDevice.Clear(Color.Blue);
 
// использовать для отрисовки эффект BasicEffect
effect.Begin();
 
// начать отрисовку первого прохода
effect.CurrentTechnique.Passes[0].Begin();
 
// указать описание формата вершин
graphics.GraphicsDevice.VertexDeclaration = vertexDeclaration;
 
// отключить отсечение невидимых поверхностей
graphics.GraphicsDevice.RenderState.CullMode = CullMode.None;
 
// вывод сцены на экран
base.Draw(gameTime);
}

 

Шаг 7. И наконец вызовом метода DrawUserPrimitives() мы рисуем треугольник используя массив вершин.
protected override void Draw(GameTime gameTime)
{
// отчистка экрана в синий цвет
graphics.GraphicsDevice.Clear(Color.Blue);
 
// использовать для отрисовки эффект BasicEffect
effect.Begin();
 
// начать отрисовку первого прохода
effect.CurrentTechnique.Passes[0].Begin();
 
// указать описание формата вершин
graphics.GraphicsDevice.VertexDeclaration = vertexDeclaration;
 
// отключить отсечение невидимых поверхностей
graphics.GraphicsDevice.RenderState.CullMode = CullMode.None;
 
// нарисовать треугольник используя массив вершин
graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionColor>
(PrimitiveType.TriangleList, vertexList, 0, 1);
 
// вывод сцены на экран
base.Draw(gameTime);
}

 

Шаг 8. После отрисовки треугольника мы должны "выключить" эффект.
protected override void Draw(GameTime gameTime)
{
// отчистка экрана в синий цвет
graphics.GraphicsDevice.Clear(Color.Blue);
 
// использовать для отрисовки эффект BasicEffect
effect.Begin();
 
// начать отрисовку первого прохода
effect.CurrentTechnique.Passes[0].Begin();
 
// указать описание формата вершин
graphics.GraphicsDevice.VertexDeclaration = vertexDeclaration;
 
// отключить отсечение невидимых поверхностей
graphics.GraphicsDevice.RenderState.CullMode = CullMode.None;
 
// нарисовать треугольник используя массив вершин
graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionColor>
  (PrimitiveType.TriangleList, vertexList, 0, 1);
 
// завершить первый проход
effect.CurrentTechnique.Passes[0].End();
 
// завершить использование эффекта BasicEffect
effect.End();
 
// вывод сцены на экран
base.Draw(gameTime);
}

 

Теперь при запуске приложения мы увидим пустое окно в котором будет нарисован треугольник.

В секции загрузок лежит архив с исходным кодом этого и других уроков.


Комментарии
#1 | Dmitruy 21.01.2011 04:48:11
Сделал все как описано в уроке. Синее окошко есть, а треугольника на нем нет. В чем дело не пойму. Shock
#2 | Hale_32bit 21.01.2011 21:44:23
Скачай архив исходников и запусти.
Скажешь работает или нет?
#3 | UchihaScuall 23.06.2011 19:06:39
На 4.0 код немножко другой, вот рабочий:
GeSHi: C#
  1. using System;
  2. using System.Collections.Generic;
  3. using Microsoft.Xna.Framework;
  4. using Microsoft.Xna.Framework.Graphics;
  5.  
  6. class Program : Microsoft.Xna.Framework.Game
  7. {
  8. GraphicsDeviceManager graphics;
  9. // массив вершин
  10. VertexPositionColor[] vertexList;
  11.  
  12. // описание формата вершин
  13. VertexDeclaration vertexDeclaration;
  14.  
  15. // эффект BasicEffect
  16. BasicEffect effect;
  17.  
  18. //Объявляем графический компонент - который будет использоваться для вывода
  19. protected override void LoadContent()
  20. {
  21. // создать массив-контейнер для хранения трёх вершин
  22. vertexList = new VertexPositionColor[3];
  23.  
  24. // создать в массиве вершин три вершины типа VertexPositionColor описывающих 3D-треугольник
  25. vertexList[0] = new VertexPositionColor(new Vector3(0, 0.5f, 0), Color.Gray);
  26. vertexList[1] = new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0), Color.Gray);
  27. vertexList[2] = new VertexPositionColor(new Vector3(0.5f, -0.5f, 0), Color.Gray);
  28.  
  29. // создать описание формата вершин
  30. vertexDeclaration = new VertexDeclaration(VertexPositionTexture.VertexDeclaration.GetVertexElements());
  31.  
  32. // создать эффект BasicEffect
  33. effect = new BasicEffect(graphics.GraphicsDevice);
  34. }
  35.  
  36. protected override void Update(GameTime gameTime)
  37. {
  38. //обновление различных параметров (напр. Использование физики)
  39. }
  40.  
  41. protected override void Draw(GameTime gameTime)
  42. {
  43. // отчистка экрана в синий цвет
  44. graphics.GraphicsDevice.Clear(Color.Blue);
  45.  
  46. // начать отрисовку первого прохода
  47. effect.CurrentTechnique.Passes[0].Apply();
  48.  
  49. // отключить отсечение невидимых поверхностей
  50. GraphicsDevice.RasterizerState = RasterizerState.CullNone;
  51.  
  52. // нарисовать треугольник используя массив вершин
  53. graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionColor>
  54. (PrimitiveType.TriangleList, vertexList, 0, 1);
  55.  
  56. // вывод сцены на экран
  57. base.Draw(gameTime);
  58. }
  59. public Program()
  60. {
  61. graphics = new GraphicsDeviceManager(this);
  62. //настраиваем устройство
  63. this.graphics.PreferredBackBufferWidth = 1280;//Задаем ширину
  64. this.graphics.PreferredBackBufferHeight = 1024;//И высоту
  65.  
  66. //перед тем как задавать формат пиксела рекомендуется удостовериться, что
  67. //этот форат поддерживает ваша видеокарта
  68. this.graphics.PreferredBackBufferFormat = SurfaceFormat.Bgr565; //Устанавливаем формат пиксела
  69.  
  70. //Задаем режим fullscreen
  71. this.graphics.IsFullScreen = true;
  72. }
  73. static void Main(string[] args)
  74. {
  75. using (Program game1 = new Program())
  76. {
  77. game1.Run();
  78. }
  79. }
  80. }
Добавлено за 0.018 секунд, используя GeSHi 1.0.8.2
#4 | Stormmm 21.11.2011 19:13:02
Вот так оно выходит
на 3.0 XNA

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
class program : Microsoft.Xna.Framework.Game
{
//графический компонент
GraphicsDeviceManager graphics;
//массивы вершин
VertexPositionColor[] vertexList;
//описание формата вершин
VertexDeclaration vertexDeclaration;
//эфект BasicEffect
BasicEffect effect;
static void Main(string[] args)
{
using (program game1 = new program())
{
game1.Run();
}
}
public program()
{
graphics = new GraphicsDeviceManager(this);
graphics.PreferredBackBufferWidth = 640;
graphics.PreferredBackBufferHeight = 480;
Content.RootDirectory = "Content";
}

protected override void LoadContent()
{
//создать массив-контейнер для хранения трех вершин
vertexList = new VertexPositionColor[3];
// создать в массиве вершин три вершины типа VertexPositionColor описываюших 3D-треугольник
vertexList[0] = new VertexPositionColor(new Vector3(0,0.5f,0),Color.Gray);
vertexList[1] = new VertexPositionColor(new Vector3(-0.5f,-0.5f,0),Color.Gray);
vertexList[2] = new VertexPositionColor(new Vector3(0.5f,-0.5f,0),Color.Gray);
//создание описание формата вершин
vertexDeclaration = new VertexDeclaration(graphics.GraphicsDevice,VertexPositionColor.VertexElements);
//создать эфект BasicEffect
effect = new BasicEffect(graphics.GraphicsDevice, null);
}
protected override void Update(GameTime gametime)
{
//физика
}
protected override void Draw(GameTime gameTime)
{
//очистка экрана в синий цвет
graphics.GraphicsDevice.Clear(Color.Blue);

//использовать для отрисовки эффект BasicEffect
effect.Begin();
//начать отрисовку первого прохода
effect.CurrentTechnique.Passes[0].Begin();
//укозать формат вершин
graphics.GraphicsDevice.VertexDeclaration = vertexDeclaration;
//отключить отсечение невидимых поверхностей
graphics.GraphicsDevice.RenderState.CullMode = CullMode.None;
//нарисовать треугольник используя массив вершин
graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionColor>
(PrimitiveType.TriangleList,vertexList,0,1);
//Завершить первый проход
effect.CurrentTechnique.Passes[0].End();
//завершить используймый эффект BasicEffect
effect.End();
//вывод сцены на экран
base.Draw(gameTime);
}
}
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Отлично! Отлично! 89% [8 Голоса]
Очень хорошо Очень хорошо 0% [Нет голосов]
Хорошо Хорошо 0% [Нет голосов]
Удовлетворительно Удовлетворительно 11% [1 Голос]
Плохо Плохо 0% [Нет голосов]
Авторизация
Логин

Пароль



Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

11.12.2023

11.12.2023
[img]https://x.pin
-up-world.com/imag
es/img4.jpg[/img]
[url=https://ofoi.
cenditt.loan/new-k
atiana-kay-fucking
-with-lucky-fan-p1
-porn-scenes/]133K
67% New Katiana

11.12.2023
[img]https://wwt.s
sgameadmin2.com/im
ages/img4.jpg[/img
]
[url=https://k.smi
letaxservice.com/r
edirect/SFpEdDR1cG
V4czNKMmxlQi9tVytI
d3dxWW9GWTd5Zk52TD
VVMG1mc3YvUmlDMWUw

11.12.2023

11.12.2023

10.12.2023
[img]https://ey.os
prey-holidays.uk/i
mages/img10.jpg[/i
mg]
[url=https://nby.h
ighlyresponsible.c
om/696488/sexyfeet
girl2020-gotta-kee
p-them-soft-lookin
g-

30.11.2023
[img]https://nuggi
e.army/images/img1
5.jpg[/img]
German Porno kostenlos - Deutsche Pornos &amp; Pornofilme. [url=ht

30.11.2023

30.11.2023
[img]https://where
ijoin.com/images/i
mg8.jpg[/img]
Voir Films VF VOSTFR - . [url=http://mvig.j
ulieemontelaro.com
/]omegleX

30.11.2023
[img]https://steam
unlocked.tangobliv
ion.com/images/img
14.jpg[/img]
Top - Rated Live Sex Cam Videos to Watch Online. [

29.11.2023

29.11.2023
[img]https://chaii
t.com/images/img8.
jpg[/img]
Ottmaza.live - Ottmaza.Com Official Website | Ottmaza | Ottmaza.Net | Ottmaz

29.11.2023
[img]https://ezyja
mb.co.uk/images/im
g10.jpg[/img]
Free Porn - Sex, Tube Videos, XXX Pics, Pussy in Porno

29.11.2023
[img]https://launc
hbusinessloans.org
/images/img15.jpg[
/img]
Asyalı - Koreli Japon Seks Filmleri Türkçe A

29.11.2023
[img]https://panen
poker.org/images/i
mg8.jpg[/img]
[url=http://watchm
ovies.seoullittlem
all.com/]Junkie Musik Lossless &#ff7dee MГєsica ElectrГіnica p

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 0,88 секунд 13,298,436 уникальных посетителей