Визуальное моделирование местности с мельницами и лопастями

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,51 Мб
  • Опубликовано:
    2013-01-16
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Визуальное моделирование местности с мельницами и лопастями

СОДЕРЖАНИЕ

Введение

. Описание программы

.1 Общие сведения

.2 Функциональное назначение

.3 Описание алгоритма функционирования программы

.4 Логическая структура

.5 Используемые технические и программные средства

.6 Вызов и загрузка

.7 Входные данные

.8 Выходные данные

. Программа и методика испытаний

.1 Цель испытаний

.2 Средства и порядок испытаний

. Руководство системного программиста

.1 Назначение и условия применения программы

.2 Характеристика программы

.3 Структура программы

.4 Описание алгоритмов, функций и переменных

.5 Настройка программы

. Руководство оператора

. Задачи

Задача 1

Задача 2

Задача 3

Задача 4

Задача 5

Задача 6

Задача 7

Задача 8

Заключение

Список используемых источников

Приложение 1 Листинг программы

ВВЕДЕНИЕ

C# (произносится си шарп) - объектно-ориентированный <#"607153.files/image001.gif">

Рис.1. Диаграмма классов

В данной программе реализована следующая диаграмма классов, представленная на Рис.1

1.5 Используемые технические и программные средства

Программное обеспечение разработано для персонального компьютера IBM PC с процессором не ниже Pentium3 со следующими характеристиками:

ü Обьем ОЗУ не менее 256 Мб;

ü  3D-видеоадаптер с памятью 128 МБ, совместимый с DirectX® 9.0

(c GeForceFX 5200 или Radeon 9500);

ü Клавиатура

Реализована данное программное обеспечение на языке С #.

.6 Вызов и загрузка

Вызов программы производится из файла с программой, которая может находиться как на компьютере, так и на произвольном носителе. Запуск производится с нажатия файла Programm progect .sln

Объем занимаемого места на носителе составляет 52Мб. Объем памяти занимаемой программой в ОЗУ составляет около 400 кб.

.7 Входные данные

Входные данные - это данные положения наблюдателя. С помощью клавиатуры можно перемещать наблюдателя в нужную точку экрана.

.8 Выходные данные

Выходные данные реализуются выводом программы на монитор компьютера.

2. ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ

.1 Цель испытаний

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

Любое испытание нужно, чтобы проверить работу программы, ее исправность. Для нас это очень важно, потому что от исправности зависит качество продукта. Цель испытаний - выявить все ошибки в программе и исправить их. Это необходимо для корректной работы программы и получения верного результата, т.е. необходимо установить правильность выходных данных для любого произвольного набора входных. Программу перед ее полным использованием нужно испытать и проверить. Для каждого файла программы можно использовать разные способы проверки, они могут быть похожи, но отличия будут. Нам нужно, чтобы программа быстро и точно выводила верный результат на экран.

К данной программе предъявляются следующие требования:

·    система должна работать в консольном режиме и поддерживать работу с клавиатурой;

·    вывод необходимых данных на экран;

·        выход из программы.

.2 Средства и порядок испытаний

Технические и программные средства, используемые во время испытаний:

Технические:

Виртуальная машина

Тип ЦП: 2,40 GHz;

Системная память: 4,00 ГБ;

Видеоадаптер: 512 МБ;

Клавиатура;

Манипулятор типа «мышь»;

Программные:

Операционная система: MicrosoftWindows 7 / Microsoft C# 2008, XNA 3.1

Испытания проходили в следующей последовательности:

1)   проверка корректного написания и последующее исправление ошибок, если таковые имеются, о наличии которых можно судить по сообщениям, выдаваемым редактором или отсутствии ожидаемого результата;

2)   проверка правильности работы для каждого пункта программы:

- передвижение наблюдателя по экрану

выход из программы

Было выполнено несколько раз испытание на правильное функционирование.

В ходе испытаний ошибок или сбоев найдено не было. Все работает верно.

3. РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА

.1 Назначение и условия применения программы

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

Программное обеспечение разрабатывается для персонального компьютера IBM PC с процессором не ниже Pentium-120 со следующими характеристиками:

объем ОЗУ не менее 20 Mb;

графический адаптер SVGA;

манипулятор типа "мышь" и "клавиатура".

ЭВМ должна работать под управлением операционной системы не ниже Windows 98.

.2 Характеристика программы

Данная программа работает в графическом режиме и поддерживает работу с клавиатурой.

.3 Структура программы

Программа состоит из 2-х классов (Game1, Program). Game1 - основной класс, где описаны все команды для загрузки контента, рисования изображения на экране, обновления и движения. Program - класс, который запускает игру.

3.4 Описание алгоритмов, функций и переменных


Вся программа реализована в классе Game1, который является ребенком класса Game. Диаграмма классов представлена на рис .1

GraphicsDeviceManager graphics - графикаspriteBatch - оболочка рисункаworldMatrix - матрица визуального пространства[] worldMel - матрица, задающая преобразование мельниц[] worldLop - матрица, задающая преобразование лопастей мельниц

Model modelMel -модель мельницыmodelLop - модель лопастиviewMatrix - матрица наблюдателяprojectionMatrix - матрица проецирования D e - текстура фона: стены1D n - текстура фона: стены2D s - текстура фона: стены3D w - текстура фона: стены4D up - текстура фона: небо[] e1; - массив координат вершин с координатами текстур, описывающих позицию стен и неба, вокруг мельницыind - переменная построения текстуры вокруг мельницыindz - переменная построения координат текстуры вокруг мельницыb - коробка вокруг нашего дома d1 - пересечение выстрелом (лучом)коробки домаd2 - пересечение приближением коробки дома

Разработка объектов сцены

На сцене расположено 4 одинаковых мельницы. Для каждой мельницы имеется лопасть, которая вращается. Помимо этого на сцене расположен куб, представляющий собой визуализацию пространства.

Размер модели «Мельница» имеет размер 1920*1080 пикселов

Размер модели «Лопасть» имеет размер 1920*1080 пикселов

Рисование мельницы и лопасти осуществляется в методе Draw.

Рис.1. Модель «Мельница по оси Z, Y»

 

Рис.2. Модель «Лопасть по оси Z, Y»

Для визуализации пространства используется куб размером стороны 30 м. Каждая сторона куба предствлена 2 треугольниками. На стороны куба наложены текстуры стены1 (sahara_east.bmp, размером - 1024*1024пикселов), стены2 (sahara_north.bmp, размером - 1024*1024пикселов) , стены3 (sahara_south.bmp, размером - 1024*1024пикселов), стены3 (sahara_north.bmp, размером - 1024*1024пикселов) и неба (sahara_up.bmp, размером - 1024*1024пикселов ).

Текстура стены представлена на рис. 3, рис. 4 рис. 5, рис. 7.


Текстура неба представлена на рис. 6.

Алгоритм движения

·    движение наблюдателя

Для описания положения наблюдателя используется матрица 4*4 viewMatrix. В Update происходит изменение матрицы в соответствии с действиями пользователя. При нажатии на клавишу E происходит поворот наблюдателя вокруг оси Y. Для этого происходит умножение текущей матрицы viewMatrix на матрицу поворота

Ryα = ,

где α=0.1рад.

При нажатии на клавишу Up происходит перемещение вперед, то есть вдоль оси Z. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T= , где dz=0.1рад.

При нажатии на клавишу Down происходит перемещение назад, то есть вдоль оси Z. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T= , где dz=-0.1рад.

При нажатии на клавишу W происходит перемещение вверх, то есть вдоль оси Y. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T= , где dy=-0.1рад.

При нажатии на клавишу Q происходит перемещение вперед, то есть вдоль оси Y. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T= , где dy=0.1рад.

При нажатии на клавишу Right происходит перемещение вперед, то есть вдоль оси X. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T= , где dx=-0.1рад.

При нажатии на клавишу Left происходит перемещение вперед, то есть вдоль оси X. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T= , где dx=0.1рад.

Модели мельницы и лопасти были смоделированы в программе Blender. Они находятся в папке Content и загружаются при загрузке программы. Мельница состоит из 2 объектов: Основание мельницы и лопасть. Сделано для того, чтобы лопасть вращалась вокруг мельницы по оси X.

MLI = MLI* Mm

MLI -матрица модели лопасти

Mm- матрица поворота лопасти по оси X за 1 кадр

I=1,…,10 - кол-во матриц лопастей

Алгоритм генерации координат мельниц I-ая мельница имеет координаты xi,yi,zi.

MLl=T(xi,yi,zi)*Mm

где T-матрица поворота мельниц

MMl= MM* Mm(b1[i]+3, yi, a1[i])

MLl= ML* Mm(b1[i], yi, a1[i])

a1[i]- сдвиг матриц Мельницы, Лопасти по оси Z

b1[i]- сдвиг матриц Мельницы, Лопасти по оси Х

.5 Настройка программы

Настройка данной программы не требуется.

4. РУКОВОДСТВО ОПЕРАТОРА

Скопируйте папку с программой на компьютер, либо запустить с внешнего носителя.

При запуске программы на экране появляется изображение смоделированной архитектуры домов с фоном (Рис.9):


Далее у пользователя появляется возможность передвигаться по программе в выбранном направлении. Поворот вокруг Y - E (Рис.8.); влево - Left (Рис.9.);вправо - Right (Рис.10.); вверх - W (Рис.11.); вниз - Q (Рис.12.); ближе - Up (Рис.13.); дальше - Down (Рис.14.).

Рис.10. Приближение

Для закрытия программы нажимается  или клавиша Esc.

5. ЗАДАЧИ

Задача 1

Осуществить заливку методом “С затравочным пикселом” замкнутой растровой фигуры.



























*













































Шаг 0: Стек= (7,3)

Шаг 1: ТП= (7,3) Стек= (Пусто)

Шаг 2: Заливка= (3,3)-( 9,3)

Шаг 3: Стек= (4,2), (7,2), (4,4), (7,4)














*



*

















*



*



































Шаг 1: ТП= (7,4) Стек = (4,2), (7,2), (4,4)

Шаг 2: Заливка = (7,4)-(8,4)

Шаг 3: Стек = (4,2), (7,2), (4,4), (8,5)














*



*

















*














*























Шаг 1: ТП= (8,5) Стек = (4,2), (7,2), (4,4)

Шаг 2: Заливка = (8,5)-(9,5)

Шаг 3: Стек = (4,2), (7,2), (4,4), (9,6)














*



*

















*

























*













Шаг 1: ТП= (9,6) Стек =(4,2), (7,2), (4,4)

Шаг 2: Заливка = (9,6)

Шаг 3: Стек = (4,2), (7,2), (4,4)














*



*

















*






































Шаг 1: ТП= (4,4) Стек = (4,2), (7,2)

Шаг 2: Заливка= (4,4)-(5,4)

Шаг 3: Стек= (4,2), (7,2), (4,5)














*



*



























* 8          8




























Шаг 1: ТП= (4,5)

Стек = (4,2), (7,2)

Шаг 2:

Заливка = (2,5)-(4,5)

Шаг 3: Стек = (4,2), (7,2), (2,4), (3,6)














*



*















*





















*



















Шаг 1: ТП= (3,6) Стек = (4,2), (7,2),(2,4)

Шаг 2: Заливка = (3,6)

Шаг 3: Стек = (4,2), (7,2), (2,4)














*



*















*








































Шаг 1: ТП= (2,4) Стек = (4,2), (7,2)

Шаг 2: Заливка = (2,4)

Шаг 3: Стек = (4,2), (7,2)














*



*























































Шаг 1: ТП= (4,2) Стек = (7,2)

Шаг 2: Заливка = (4,2) - (5,2)

Шаг 3: Стек = (7,2)

















*























































Шаг 1: ТП= (7,2) Стек = пусто :)

Шаг 2: Заливка = (7,2) - (8,2)

Шаг 3: Стек = пусто =:)


Получить уравнение прямой, проходящей через 2 точки A и B

№ Варианта

A

B

9

4,2,1

5,6,2


Уравнение прямой, проходящей через две точки, имеет вид:

В каноническом форме:


Уравнение прямой AB:


В параметрической форме:

 = (-∞;∞)

Уравнение прямой AB:

 

 

Задача 3

Вычислить координаты точек пересечения прямых AB и CD, лежащих на плоскости

№ Варианта

A

B

C

D

9

2,4

5,1

4,1

-1,0


)Получаем уравнение прямой AB:

)Аналогично получаем уравнение прямой CD:

)Найдем точку пересечения прямых AB и CD - точку E:

Составим систему уравнений:

 

Точка пересечения прямых AB и CD имеет координаты: E (5 ; 1)

Задача 4

Получить уравнение плоскости, проходящей через 3 точки A, B и C и получить уравнение нормали к этой плоскости

№ Варианта

A

B

C

9

1,5,2

-2,1,7

3,6,2


Находим значение


Уравнение нормали

==i(6)-j(-5)+k(-1)=6i+5j-k

Задача 5

Получить матрицу преобразования на плоскости для последовательного выполнения трех простейших преобразований.

№ Варианта

Преобр1

Преобр3

9

Масш X 2 Y 3

Пов -30

Сдвиг X 1 Y 2


Преобразование:

1. Поворот на 300 против часовой стрелки

 

M1 = R30* M1 = * M1 =

 

2. Поворот на 250 против часовой стрелки

 

M2 = R30 * M1 =

3. Сдвиг X2

M1 =

Задача 6

Получить матрицу преобразования в пространстве для последовательного выполнения трех простейших преобразований

№ Варианта

Преобр1

Преобр2

Преобр3

9

Масш X 2 Y 3

Пов Z -30

Сдвиг Y 1 Z 2

1. Матрица с масштабированием Масш Y 2 Z 2

M1=

2.Матрица для операции вращения на угол 300 против часовой стрелки вокруг оси X:

RX30 =

3. Матрица для операции вращения на угол 300 против часовой стрелки вокруг оси Z:

RZ30 =

. Итоговая матрица преобразований:

 

M = RZ30 * RX30 * SY2Z2 =

программирование язык моделирование визуальный

Задача 7

Вычислить координаты вершин квадрата, заданного координатами левого верхнего угла и длиной стороны. Стороны квадрата до преобразования параллельны осям координат и плоскость квадрата параллельна плоскости 0xy. Осуществить преобразование над квадратом в соответствии с вариантом из задания 6. Получить координаты вершин после преобразования.

№ Варианта

Вершина

Длина

9

3,5,4

3


Координаты вершин квадрата следующие:

A(1;3;5), B(3;3,5), C(3;1;5), D(1;1;5),)

Исходная матрица для этой фигуры:

 

M1 =

 

Решение:

 

M2 = M * M1 =

 

Координаты вершин после преобразования:

AП(0,964; -0,33;11,66), BП (2,696; -1,33; 11,66), CП (0,964; -4.33; 9,66), DП (-0,768; -3,33; 9,66)

Задача 8

Повернуть четырехугольник, полученный в предыдущем задании, вокруг вершины C на 30 градусов против часовой стрелки вокруг оси Z.

.Сдвигаем вершину С к началу координат:

 

TXcYcZc =

 

2. Вращаем на угол 300 против часовой стрелки вокруг оси Z:

RZ30 =

3.Сдвигаем вершину С на старое место:

 

T1XcYcZc =     

. Итоговая матрица преобразований:

 

M3 = T1XcYcZc *RZ30 * TXcYcZc * M2 =

ЗАКЛЮЧЕНИЕ

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

1.       Разработка компьютерной графики с .NET C# и OpenGL API. http://esate.ru/page/uroki-OpenGL-c-sharp

2.      Горнаков С.Г. Программирование компьютерных игр под Windows в XNA Game Studio Express. - М.:ДМК Пресс, 2008.-384с.: ил.

3.       Порев В.Н. Компьютерная графика - СПб.: БХВ-Петербург, 2002.-432 с.: ил.

Приложение 1.

Листинг программы

 

Файл Game1.cs

using System;System.Collections.Generic;System.Linq;Microsoft.Xna.Framework;Microsoft.Xna.Framework.Audio;Microsoft.Xna.Framework.Content;Microsoft.Xna.Framework.GamerServices;Microsoft.Xna.Framework.Graphics;Microsoft.Xna.Framework.Input;Microsoft.Xna.Framework.Media;Microsoft.Xna.Framework.Net;Microsoft.Xna.Framework.Storage;Lab5

{

/// <summary>

/// This is the main type for your game

/// </summary>class Game1 : Microsoft.Xna.Framework.Game

{graphics;spriteBatch;worldMatrix;viewMatrix;projectionMatrix;effect;[] worldMel = new Matrix[10]; //Мельница[] worldLop = new Matrix[10]; //Лопости МельницыmodelMel; //Модель МельницыmodelLop; //Модель ЛопостиD e;D n;D s;D w;D up;[] e1;[] ind;[] indz; b;d1 = false;d2 = false;[] a = new float[4];[] b1 = new float[4];Game1()

{= new GraphicsDeviceManager(this);.RootDirectory = "Content";

}

/// </summary>override void Initialize()

{

// TODO: Add your initialization logic here.RenderState.CullMode = CullMode.None; //Показывать плоскости с двух сторон= new BasicEffect(GraphicsDevice, new EffectPool());r = new Random();(int i = 0; i < 10; i++)

{[i] = Convert.ToSingle(r.NextDouble() * 100 - 50);[i] = Convert.ToSingle(r.NextDouble() * 100 - 50);[i] = Matrix.CreateScale(0.04f, 0.04f, 0.04f) * Matrix.CreateTranslation(b1[i]+3, -9.2f, a[i]);[i] = Matrix.CreateScale(0.04f, 0.04f, 0.04f) * Matrix.CreateTranslation(b1[i], 0, a[i]);

}= Matrix.CreateTranslation(0, -4, -30); //наблюдатель= Matrix.CreateTranslation(new Vector3(0, 0, 0));= new VertexPositionTexture[4];= new int[6];[0].Position = new Vector3(100, 0, 100);[0].TextureCoordinate = new Vector2(1, 1);[1].Position = new Vector3(-100, 0, 100);[1].TextureCoordinate = new Vector2(0, 1);[2].Position = new Vector3(-100, 100, 100);[2].TextureCoordinate = new Vector2(0, 0);[3].Position = new Vector3(100, 100, 100);[3].TextureCoordinate = new Vector2(1, 0); = new int[6] {0,1,3,3,1,2 };

//Коробка вокруг нашей стены= new BoundingBox();.Min = new Vector3(1, 1, -0.1f);.Max = new Vector3(10, 7, 0.1f);.Initialize();

}

/// <summary>

/// LoadContent will be called once per game and is the place to load

/// all of your content.

/// </summary>override void LoadContent()

{

// Create a new SpriteBatch, which can be used to draw textures.= new SpriteBatch(GraphicsDevice);aspectRatio;= (float)graphics.GraphicsDevice.Viewport.Width / (float)graphics.GraphicsDevice.Viewport.Height /1.3f;FOV = MathHelper.PiOver4;= Matrix.CreatePerspectiveFieldOfView(FOV, aspectRatio, 1f, 1000f);= Content.Load<Model>("2");= Content.Load<Model>("1");

// TODO: use this.Content to load your game content here= Content.Load<Texture2D>("e1");= Content.Load<Texture2D>("n1");= Content.Load<Texture2D>("s1");= Content.Load<Texture2D>("w1");= Content.Load<Texture2D>("up");

}

/// <summary>

/// UnloadContent will be called once per game and is the place to unload

/// all content.

/// </summary>override void UnloadContent()

{

// TODO: Unload any non ContentManager content here\.Unload();

}

/// <summary>

/// Allows the game to run logic such as updating the world,

/// checking for collisions, gathering input, and playing audio.

/// </summary>

/// <param name="gameTime">Provides a snapshot of timing values.</param>override void Update(GameTime gameTime)

{

// Allows the game to exit(GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed).Exit();(int i = 0; i < 10; i++)

{[i] = Matrix.CreateTranslation(0, 0, -a[i]) * Matrix.CreateRotationX(0.02f) * Matrix.CreateTranslation(0, 0, a[i]) * worldLop[i];

}

// TODO: Add your update logic herekeyboardState;= Keyboard.GetState();(keyboardState.IsKeyDown(Keys.Escape) == true).Exit();

//Повороты плавные(keyboardState.IsKeyDown(Keys.Up) == true) //поворот вокруг X= Matrix.Multiply(viewMatrix, Matrix.CreateRotationX(0.01f));(keyboardState.IsKeyDown(Keys.Down) == true) //поворот вокруг X= Matrix.Multiply(viewMatrix, Matrix.CreateRotationX(-0.01f));(keyboardState.IsKeyDown(Keys.Right) == true) //поворот вокруг Y= Matrix.Multiply(viewMatrix, Matrix.CreateRotationY(0.01f));(keyboardState.IsKeyDown(Keys.Left) == true) //поворот вокруг Y= Matrix.Multiply(viewMatrix, Matrix.CreateRotationY(-0.01f));

//Шаги плавные(keyboardState.IsKeyDown(Keys.A) == true) //вправо= Matrix.Multiply(viewMatrix, Matrix.CreateTranslation(new Vector3(1, 0, 0)));(keyboardState.IsKeyDown(Keys.D) == true) //влево= Matrix.Multiply(viewMatrix, Matrix.CreateTranslation(new Vector3(-1, 0, 0)));(keyboardState.IsKeyDown(Keys.E) == true) //вверх= Matrix.Multiply(viewMatrix, Matrix.CreateTranslation(new Vector3(0, 1, 0)));(keyboardState.IsKeyDown(Keys.Q) == true) //вниз= Matrix.Multiply(viewMatrix, Matrix.CreateTranslation(new Vector3(0, -1, 0)));(keyboardState.IsKeyDown(Keys.S) == true) //ближе= Matrix.Multiply(viewMatrix, Matrix.CreateTranslation(new Vector3(0, 0, -1)));(keyboardState.IsKeyDown(Keys.W) == true) //дальше= Matrix.Multiply(viewMatrix, Matrix.CreateTranslation(new Vector3(0, 0, 1)));

//Матрица m задает положение наблюдателя относительно объекта (стенки)m = Matrix.Multiply(worldMatrix, Matrix.Invert(viewMatrix));

//Задаем вектор направления взгляда из точки расположения наблюдателяr = new Ray(m.Translation, m.Forward);

//Определяем пересечение взгляда наблюдателя с коробкой вокруг объекта (стенки)? f1 = b.Intersects(r);= (f1 != null);//Если d1 = true then есть попадание

//Задаем сферу вокруг наблюдателяs = new BoundingSphere(m.Translation, 1.2f);= b.Intersects(s); //Если d2 = true then наблюдатель близко к объекту.Update(gameTime);

}

/// <summary>

/// This is called when the game should draw itself.

/// </summary>

/// <param name="gameTime">Provides a snapshot of timing values.</param>override void Draw(GameTime gameTime)

{

// TODO: Add your drawing code here(d2) //Фон красный, если наблюдатель близко к объекту 1.Clear(Color.Red);(d1) //Фон желтый, если наблюдатель направлен на объект 1 (попадет при выстреле).Clear(Color.Yellow);//Фон синий, если не попадет в объект 1 и не близко.Clear(Color.CornflowerBlue);

//Задаем учет глубины.GraphicsDevice.RenderState.DepthBufferEnable = true;(int i = 0; i < 10; i++)

{(ModelMesh mesh in modelMel.Meshes)

{(BasicEffect effect in mesh.Effects)

{.World = worldMel[i]; //при рисовании мельницы надо учесть только ее движение .View = viewMatrix;.Projection = projectionMatrix;.Texture = null;.TextureEnabled = false;

}.Draw();

}

}(int i = 0; i < 10; i++)

{(ModelMesh mesh in modelLop.Meshes)

{.World = worldLop[i]; //при рисовании лопости надо учесть только ее движение .View = viewMatrix;.Projection = projectionMatrix;.Texture = null;.TextureEnabled = false;

}.Draw();

}

}

//Рисование объекта 4 (стена перпендикулярно направлению взгляда)(indz.Length > 0)

{.View = viewMatrix;.Projection = projectionMatrix;.World = worldMatrix;.Texture = e;.TextureEnabled = true;.Begin();(EffectPass pass in effect.CurrentTechnique.Passes)

{.Begin();.VertexDeclaration = new VertexDeclaration(GraphicsDevice, VertexPositionTexture.VertexElements);.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, e1, 0, e1.Length, indz, 0, indz.Length / 3);.End();

}.End();

}

//Рисование объекта 5 (стена перпендикулярно направлению взгляда)(indz.Length > 0)

{.View = viewMatrix;.Projection = projectionMatrix;.World = worldMatrix * Matrix.CreateRotationY(MathHelper.Pi);.Texture = w;.TextureEnabled = true;.Begin();(EffectPass pass in effect.CurrentTechnique.Passes)

{.Begin();.VertexDeclaration = new VertexDeclaration(GraphicsDevice, VertexPositionTexture.VertexElements);.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, e1, 0, e1.Length, indz, 0, indz.Length / 3);.End();

}.End();

}

//Рисование объекта 6 (стена перпендикулярно направлению взгляда)(indz.Length > 0)

{.View = viewMatrix;.Projection = projectionMatrix;.World = worldMatrix * Matrix.CreateRotationY(MathHelper.PiOver2);.Texture = s;.TextureEnabled = true;.Begin();(EffectPass pass in effect.CurrentTechnique.Passes)

{.Begin();.VertexDeclaration = new VertexDeclaration(GraphicsDevice, VertexPositionTexture.VertexElements);.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, e1, 0, e1.Length, indz, 0, indz.Length / 3);.End();

}.End();

}

//Рисование объекта 7 (стена перпендикулярно направлению взгляда)(indz.Length > 0)

{.View = viewMatrix;.Projection = projectionMatrix;.World = worldMatrix * Matrix.CreateRotationY(-MathHelper.PiOver2);.Texture = n;.TextureEnabled = true;.Begin();(EffectPass pass in effect.CurrentTechnique.Passes)

{.Begin();.VertexDeclaration = new VertexDeclaration(GraphicsDevice, VertexPositionTexture.VertexElements);.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, e1, 0, e1.Length, indz, 0, indz.Length / 3);.End();

}.End();

}

//Рисование объекта 8 (стена перпендикулярно направлению взгляда)(indz.Length > 0)

{.View = viewMatrix;.Projection = projectionMatrix;.World = worldMatrix * Matrix.CreateTranslation(0,100,0);.Texture = up;.TextureEnabled = true;.Begin();(EffectPass pass in effect.CurrentTechnique.Passes)

{.Begin();.VertexDeclaration = new VertexDeclaration(GraphicsDevice, VertexPositionTexture.VertexElements);.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, e1, 0, e1.Length, indz, 0, indz.Length / 3);.End();

}.End();

}.Draw(gameTime);

}

}

}

Файл Program.cs

using System;Lab5

{class Program

{

/// <summary>

/// The main entry point for the application.

/// </summary>void Main(string[] args)

{(Game1 game = new Game1())

{.Run();

}

}

}

}

Похожие работы на - Визуальное моделирование местности с мельницами и лопастями

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!