Навигация
Категории
C++,C#,C [19]
Уроки по средам разработки приложений с использованием C,C++,C#, а также .Net, DirectX, OpenGL и других
Delphi [14]
Уроки работы в среде программирования Delphi
Basic [13]
Уроки разработки приложений в среде Basic
DirectX [8]
Уроки по работе с DirectX, включая Direct3D и другие инструменты
Web [7]
Уроки по "Веб-программированию"
JavaScript [12]
Уроки по кодингу в Java и JavaScript
XNA [9]
Статьи и уроки программирование в среде XNA C++&C#
Профиль
Статистика
Rambler's Top100

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Locations of visitors to this page
Главная » Статьи » Программирование » XNA

Урок 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);
}

 

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

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



Источник: http://www.xnadev.ru/articles.php?cat_id=2&rowstart=15
Категория: XNA | Добавил: gforcer (31.01.2010) | Автор: Админ
Просмотров: 1196 | Комментарии: 3 | Теги: работа, программирование, xna, C#, c++ | Рейтинг: 0.0/0
Всего комментариев: 1
1  
Это код для XNA 4.0 я правильно понял?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Друзья сайта
Демотиваторы
Copyright Зямаев Денис © 2017