43312

Візуалізація графічних зображень

Курсовая

Информатика, кибернетика и программирование

Що стосується візуалізації даних, наданих у вигляді матричних структур, із подальшим їх перетворенням у графові моделі, то сьогодні накопичений відносно невеликий досвід їх вирішення. Основними завданнями при цьому є як фундаментальні (пояснюються недосконалістю існуючих методів візуалізації), так і технічні (пов’язані із складністю вибору та забезпеченням взаємодії різних програмних та апаратних засобів. Отже, актуальним завданням є виокремлення основних аспектів побудови прикладного програмного забезпечення, яке надавало б розробникам можливість із створення високорівневих засобів візуалізації даних, заданих у матричній формі

Украинкский

2013-11-04

365 KB

6 чел.

ВСТУП

У сучасних умовах комп’ютерна графіка стрімко розвивається, оскільки забезпечує високий рівень інформативності, відтворює найвагоміші аспекти процесу або явища. Найбільшу реалістичність забезпечує тривимірна графіка, основана на роботі з просторовими моделями об’єктів, що обумовлює її широке використання в багатьох галузях, пов’язаних з комп’ютерним моделюванням та проектуванням.

За останні роки комп’ютерні засоби моделювання та візуалізації перетворились із інструментів вирішення різного роду задач на потужний апарат дослідження суспільних явищ та технічних проблем.  Вони з успіхом використовуються у таких галузях, як системний аналіз, автоматизація проектування, організація роботи обчислювальних засобів та комп’ютерних мереж [4]. Різноманітність галузей, у яких використовуються програмні засоби моделювання й візуалізації, пояснюється неможливістю або трудомісткістю проведення реальних експериментів на окремих групах досліджуваних об’єктів.  З огляду на це,  проблема створення нових програмних систем переводиться в площину використання вже наявних програмних компонентів та їх адаптаціїдо нових задач [5].  

Що стосується візуалізації даних,  наданих у вигляді матричних структур,  із подальшим їх перетворенням у графові моделі, то сьогодні накопичений відносно невеликий досвід їх вирішення. Основними завданнями при цьому є як фундаментальні (пояснюються недосконалістю існуючих методів візуалізації),  так і технічні  (пов’язані із складністю вибору та забезпеченням взаємодії різних програмних та апаратних засобів. Отже, актуальним завданням є виокремлення основних аспектів побудови прикладного програмного забезпечення,  яке надавало б розробникам можливість із створення високорівневих засобів візуалізації даних, заданих у матричній формі.

РОЗДІЛ 1. ТЕОРЕТИЧНА ЧАСТИНА

1.1.Основні поняття  дисципліни «Обчислювальна геометрія та комп'ютерна графіка»

 Комп’ютерна графіка – це галузь знань, як авивчає та розробляє засоби та методи створення та перетворення графічних зображень обєктів за допомогою компютера [1].

Основні задачі комп’ютерної графіки: введення до комп’ютера інформації, що початково має графічну форму або визначає її; обробка, оптимізація характеристик, зберігання на носіях, захист, передання локальних та глобальних мереж цієї інформації; виведення інформації в графічній формі з комп’ютера.

Під графічною формою подання інформації розуміють: ескізи, креслення, візуальне подання каркасних, поверхневих та твердотільних 3D-моделей різноманітних об’єктів, схеми, діаграми, графіки, рисунки, фотографії, відео, анімацію, голограми, мультимедійну інформацію[1].

У комп’ютерній графіці використовують геометричну версію математичного  моделювання: дво-, три- та n-вимірні (n>3) зображення розглядають як такі, що складені з точок, ліній та поверхонь (цей підхід традиційно вважають найнаочнішим та найзручнішим).

Математичне забезпечення комп’ютерноъ графіки становлять:

геометричні моделі, складовими частинами яких є елементарні компоненти – графічні примітиви(точки , відрізки суцільних та пунктирних прямих ліній, дуги кіл та еліпсів, трикутники, прямокутники, багатокутники), поєднані в ієрархічні структури даних (списки, стеки, черги, дерева, мережі) ;

методи та алгоритми перетворення геометричних моделей. Складовими частинами яких є елементарні операції перенесення, масштабування, обертання та дзеркального відбиття зображень, виділення вікна[2].

Прграмне забезпечення (ПЗ) комп’ютерної графіки поділяють на базове  та прикладне, апаратно-залежне та апаратно-незалежне.

Для створення прикладного графічного ПЗ застосовують такі класи інструментальних засобів:

стандартні графічні пакети (наприклад, графічні редактори, системи автоматизованого проектування, видавничі системи);

стандарті програмні системи, що не спеціалізуються на графіці, але підтримують певний набір графічних функцій (наприклад, офісні пакети та текстові процесори);

авторські середовища розробки графічного ПЗ (авторські системи для створення мультимедійної та гіпермедійної продукції, наприклад, для побудови презентацій тощо);

мови програмування високого рівня, що містять візуальні компонентні об’єктно-орієнтовані середовища розробника;

мови програмування низького рівня.

Залежно від використаних розробником засобів побудови зображення, які надають мови програмування , графічні прграми можна класифікувати так: ті, що базуються на стандартних компонентах, процедурах  та функціях графічних бібліотек; ті,що створюють графічні зображення засобами BIOS (Basic Input/Output System); ті, що реалізують найшвидший спосіб (пряме звертання до портів відеоадаптеру та чарунок відеопам’яті); ті, в яких код, написаний мовою програмування високого рівня, доповнений вставками, що виконують графічні дії мовою асемблера або в машинному коді[3].

  

1.2.Основні підходи до побудови програмних засобів візуалізації об’єктів

Сучасні засоби візуалізації будуються у напрямку розроблення гнучкої структури прикладної програми, яка може змінюватись залежно від вимог, що висуваються користувачем. Забезпечення цієї модифікації накладає деякі обмеження на розробників, найважливішим серед яких є неможливість часткової перебудови системи відповідно до нових вимог. Це завдання є вкрай важливим, оскільки його вирішення дасть змогу скоротити процес як розроблення, так і модифікації програм цього класу. Незважаючи на актуальність завдання,  сьогодні накопичений відносно невеликий досвід її вирішення,  особливо щодо комп’ютерної реалізації [4].

На сучасному етапі розвитку інформаційних технологій значно ускладнюється процедурапобудови та швидкої модифікації інформаційних систем, які виникають у різних галузях людської діяльності. Не є винятком засоби візуалізації матричних, які характеризуються:

• складністю опису, що вимагає забезпечення складного процесу моделювання й аналізу даних та процесів;

• сукупністю взаємодіючих компонентів, які мають свої локальні завдання й мету функціонування. Наприклад, підпрограми моделювання графічної форми зображення, аналітичної обробки розташування вершин;

• відсутністю прямих аналогів, що обмежує можливість використання яких-небудь типових проектних рішень і прикладних систем;

• необхідністю функціонування в неоднорідному середовищі (у різних операційних системах та апаратних платформах);

• істотною часовою протяжністю проекту, обумовленою обмеженими можливостями колективу розробників та різним ступенем готовності окремих частин системи.

1.3. Основні принципи перетворення графічних об’єктів

У курсовому проекті використані афінні перетворення об’єктів у просторі. Далі розглянемо загальний вигляд 3D-афінних перетворень, поняття та відповідний математичний апарат, які необхідні для побудови фігур у 3D просторі із можливістю їх переміщення та зміни власних розмірів.

1.3.1. Загальний вигляд 3D- афінних перетворень [6].

На початку введемо однорідні координати для деякої 3D- точки  М(x, y, z): (x, y, z, 1) = (hx, hy, hz, h) = (x1, x2, x3, x4), де xi, i=1..4, не всі рівні нулю. Загальний вигляд 3D- афінних перетворень буде наступний

Запишемо цей вираз у матричному вигляді: X=X*[A], де X=(x1, x2, x3, x4), a [A] – матриця системи, яка задає загальний вигляд 3D- афінних перетворень.

Потім необхідно виділити елементарні операції і зробити їх математичну формалізацію. Після цього будь-яке перетворення можна буде записати в матричному вигляді.

1.3.2. Елементарні 3D-афінні перетворення:

1)Обертання навколо координатних вісей

При цьому перетворенні всі точки плоского перерізу, перпендикулярного вісі обертання, обертаються в своїй площині навколо точки вісі(навколо центра координат). У результаті, матриці обертання навколо відповідних вісей приймають наступний вигляд:

 

    

 

2) Розтяг(стиснення) вздовж координатних вісей [6].

Задається своїм центром у початку координат та невід’ємними коефіцієнтами розтягу (стиснення)  вздовж координатних вісей OX, OY та OZ, відповідно. Записується, як X^=X*DIL, де

3) Відображення відносно координатних площин. Ці перетворення задаються наступними матрицями:

    

4)  Перенесення на вектор t=(a,b,c). У матричному вигляді записується так:

Тепер відмітимо, що загальний вигляд матриці 3D- афінного перетворення буде

,

де в класичній матриці [A33] містяться елементи, які задані операціями повороту, відображення, розтягу - зтиснення, а три елементи четвертого рядка задаються переносом. 

1.3.3. Проекції(паралельні та центрові) [6].

В комп’ютерній графіці для зображення об’єктів на площині використовується паралельне та центральне  проектування.

Паралельне проектування, перпендикулярне площині, що співпадає з однією із координатних площин (або паралельній їй) дасть ортографічну проекцію. Матриця проектування вздовж вісі ОХ на площину YOZ має вигляд:

У випадку, якщо площина проектування паралельна координатній площині, необхідно помножити матрицю  на матрицю зсуву. В результаті отримуємо:

Аналогічно можна отримати матриці проектування вздовж інших координатних вісей.

1.4. Сучасні засоби візуалізації графічних об’єктів

Клас редакторів 3D набув за останні 1-2 роки достатньо широкого розповсюдження не тільки у колах спеціалістів, які користуються спеціалізованими дуже міцними графічними станціями, а й у колах користувачів середнього класу, у т. ч. й користувачів домашніх комп’ютерів. Цьому, перш за все, сприяє розвиток спрямованих на працю з 3D графікою не тільки програмних продуктів, а й поява апаратних засобів, також спрямованих на підтримку та прискорення різноманітних 3D процесів.

Далі розглянемо розвиток інструментів розробки від Microsoft. У 1993 році, коли поточна версія Microsoft C/C++  була «сімка», фірма презентувала Visual C++1.0. Microsoft C/C++ був вдосконаленим MS DOSпродуктом. Але вдосконаленим на стільки, що велика кількість програмістів стала супротив при переході на  Visual C++. Однак IDE, що повністю базувалась на  Windows, з інтегрованим редактором, відладчиком, компоновщиком та браузером виходного тексту зробили перехід на Visual C++ неминучим. Представлення Microsoft Foundation Classes (MFC) 2.0 також позитивно вплинуло на ріст популярності Visual C++. Visual C++ дозволив швидко створювати Win32- та MFC- додатки для Windows, не зв’язуючись з MS DOC.

Технологія .NET, що зробила можливим створення виключно еффективно керованих додатків та Web-сервісів XML з’явилась через 9 років. На цей момент Visual Studio, вперше презентована у 1998 році, налічувала вже шосту версію. Цей інструмент, що являв собою комбінацію декількох прдуктів (Visual C++, Visual Basic, Visual InterDev та Visual J++), став одним з найбільш популярних засобів розробки. Visual Studio дозволяє створювати додатки для цілого ряду платформ : Win32, MFC, COM, ActiveX, Active Template Library (ATL), Java.DirectX та для Web.

Розглянемо OpenGL, що є одною із найбільш популярних програмних інтерфейсів (APIApplication Programming Interface) для розгобки додатків в оболасті двумірної та трьохмірної компьютерної графіки.

OpenGL (Open Graphics Library - відкрита графічна бібліотека, графічне API) -специфікація, що визначає незалежний від мови програмування крос-платформний програмний інтерфейс для написання додатків, що використовують двовимірну і тривимірну комп'ютерну графіку.Включає більше 250 функцій для малювання складних тривимірних сцен з простих примітивів. Використовується при створенні комп'ютерних ігор, САПР, віртуальної реальності, візуалізації в наукових дослідженнях. На платформіWindows конкурує з Direct3D.

Стандарт OpenGL було розроблено та затверджено у 1992 році провідними фірмами у розробці програмного забезпечення, як ефективний апаратно-незалежний інтерфейс, що придатний для реалізації на різних платформах. Основою стандарту стала бібліотека IRIS GLб що була розроблена фірмою Silicon Graphics Inc. Бібліотека нараховує близько 120 команд, котрі програміст може застосовувати для задання об’єктів та операцій, що необхідні для написання інтерактивних графічних додатків. Сучасна графічна система OpenGL підтримується більшістю виробників апаратних та програмних додатків.  Ця система доступна тим, хто працює у Windows, користувачам компьютерів Apple.Вільно розповсюджувані коди системи Mesa (пакет API на біазі OpenGL) можно компілювати у більшості ОС, у тому числі і Linux.

На базовому рівні, OpenGL – це просто специфікація, тобто документ, що описує набір функцій і їх точну поведінку. Виробники обладнання на основі цієї специфікації створюють реалізації - бібліотеки функцій, які відповідають набору функцій специфікації. Реалізація використовує можливості обладнання там, де це можливо. Якщо апаратура не дозволяє реалізувати будь-яку можливість, вона повинна бути емулювати програмно. Виробники повинні пройти специфічні тести (conformance tests - тести на відповідність) перш ніж реалізація буде класифікована як OpenGL реалізація. Таким чином, розробникам програмного забезпечення досить навчитися використовувати функції, описані в специфікації, залишивши ефективну реалізацію останніх розробникам апаратного забезпечення.

Ефективні реалізації OpenGL існують для Windows, Unix-платформ, PlayStation 3 і Mac OS. Ці реалізації звичайно надаються виробниками відеоадаптерів і активно використовують можливості останніх. Існують також суто програмні реалізації специфікації OpenGL, однією з яких є бібліотека Mesa. З ліцензійних міркувань Mesa є «неофіційною» реалізацією OpenGL, хоча повністю з нею сумісна на рівні коду.

РОЗДІЛ 2. ПРАКТИЧНА ЧАСТИНА

Необхідно розробити програму, що візуалізує графічний об’єкт літери «С» та дозволяє проводити над ним афінні перетворення у просторі.

Результатом  цієї програпи повинні бути функції, щоб дозволяли проводити над заданим обєктом дії: розтягування відносно осей координат OX, OY, OZ, перенесення, поворот на заданий кут. Значення за якими обраховуються вище перелічені функції повинні вводитись користувачем у задані поля для  введення даних.

2.1. Розробка алгоритму візуалізації графічного об’єкта

Виконання програми ґрунтується на тих же положеннях, що і всі інші базові перетворення комп’ютерної графіки, що властиві для використання DirectX для побудови яких би то ні було зображень на формі чи іншому об’єкті, що може бути використаний для цього.

Отже на першому етапі створенню програми є ініціалізація початкових координат графічної візуалізації, основна ідея полягає в залежності точок об’єкта від його межі, тому нам потрібно спочатку запрограмувати можливість динамічно змінювати точки самої межі об’єкта. Це дасть змогу змінити лише координати точок його межі, а координати точок візуалізації зміняться автоматично, оскільки вони залежать від координат межі.

На другому етапі ми програмуємо можливість зміни розташувань об’єкта, використовуючи значення різниць змін координат між теперішніми і попередніми.

2.1. Схема алгоритму візуалізації графічного об’єкта.

2.2. Вимоги до апаратного і програмного забезпечення.

Основні вимоги:

  1.  Процесор  2,51 ГГц;
  2.  Windows XP, Windows 7 ;
  3.  Наявність відеокарти з підтримкою DirectX7;
  4.  Для повного перегляду проекту – наявність встановленої Visual Studio 2005, 2008, 2010;
  5.  Мишка, клавіатура; 

2.3. Інструкції користувача.

 Для того, щоб переглянути візуалізований графічний обєкт необхідно:

  1.  Відкрити Visual Studio будь-якої версії (2005-2010);
  2.  Через виконання послідовних команд FileOpenProject/Solution відкрити файл даного курсового проекту у папці Шклярчук Я. з назвою  OGKG_KP;
  3.  Далі натиснути кнопку Start Debugging, для того щоб переглянути візуалізований графічний  об’єкт літери «С»;
  4.  У формі, що з’явилася можна змінювати параметри ввівши необхідніо цифри в значення: обертання, перенесення, розтягнення та відображення.

ВИСНОВОК

Під час виконання даного курсового проекту  були закріпленні знання, уміння практичних навичок візуалізації та їх реалізації на платформі .NET FrameWork 2.0/3.5

Були розроблені  Windows застосування візуалізації ліітери «С».

Курсовий проект надав можливість на практиці засвоїти основні концепції  проектування та створення  відображення, редагування, перетворення та документування графічної та символьної інформації для розв'язку прикладних задач, реалізованих у середовищі Visual Studio 2008/2010.

Виконання курсового проекту на тему: «Візуалізація графічних зображень» дало можливість ще раз переконатися у необхідності створення та візуалізації графічних обєктів.

СПИСОК ЛІТЕРАТУРНИХ ДЖЕРЕЛ

  1.  Веселовська Г.В., Ходаков В.Є., Веселовський В.М. В-38 Основи комп’єтерної графіки. Навчальний посібник/ Під ред. В.Є.Ходакова. – К.: Центр навчальної літератури, 2004.-392с.
  2.  Прикладна геометрія та інженерна графіка: Міжвідомий науково-технічний збірник. – К.: КНУБА.
  3.  Арбаш М. Таинства программирования графики. – К.: ЕвроСИБ, 2002. – 512 с.
  4.  Галузинський Г.П., Гордієнко І.В. Сучасні технологічні засоби обробки інформації: Навч. посібник. – К.: КНЕУ, 1998. – 224с.
  5.  Басюк Т.М.  Аналіз та класифікація методів візуалізації //  Поліграфія і видавнича справа. – 2003. –  № 40. –  С. 109–114с.
  6.  Карнаухова Г.В.Обчислювальна геометрія та комп'ютерна графіка.Полтава.РВВ ПУСКУ,2008.-109с.
  7.   Вячеслав Понамарев, Программирование на C++/C# в Visual Studio.NET 2003: Петербург: БХВ, 2004. – 352с.

ДОДАТОК А

Програмна реалізація візуального обєкта:

using System;

using System.Drawing;

using System.Windows.Forms;

using Microsoft.DirectX;

using Microsoft.DirectX.Direct3D;

namespace OGKG_KP_Project1

{

   public partial class Form1 : Form

   {

       private Panel1 d3d = new Panel1();// Stvoryuemo ekzemplyar klasu korustuva4a

       public int rotateX, rotateY, rotateZ, transferA, transferB, transferC, extendX, extendY, extendZ;// zadaemo zminni

       public float reflectX, reflectY, reflectZ;//

       public Form1()//Opus elementiv golovnoi formu ta obrobnukiv podiy,inicializaciya po4atkovuh danuh

       {

           InitializeComponent();

           d3d.BorderStyle = panel1.BorderStyle;

           d3d.Location = panel1.Location;

           d3d.ClientSize = panel1.ClientSize;

           d3d.Cursor = panel1.Cursor;

           this.Controls.Remove(panel1);

           this.Controls.Add(d3d);

           this.Load += new EventHandler(rotation_TextChanged);

           this.Load += new EventHandler(transfer_TextChanged);

           d3d.InitializeGraphics();

           rotateX = (int)Convert.ToDouble(textBox1.Text);

           rotateY = (int)Convert.ToDouble(textBox2.Text);

           rotateZ = (int)Convert.ToDouble(textBox3.Text);

           textBox1.TextChanged += new EventHandler(rotation_TextChanged);

           textBox2.TextChanged += new EventHandler(rotation_TextChanged);

           textBox3.TextChanged += new EventHandler(rotation_TextChanged);

           transferA = (int)Convert.ToDouble(textBox4.Text);

           transferB = (int)Convert.ToDouble(textBox5.Text);

           transferC = (int)Convert.ToDouble(textBox6.Text);

           textBox4.TextChanged += new EventHandler(transfer_TextChanged);

           textBox5.TextChanged += new EventHandler(transfer_TextChanged);

           textBox6.TextChanged += new EventHandler(transfer_TextChanged);

           checkBox1.CheckedChanged += new EventHandler(reflection_CheckedChanged);

           checkBox2.CheckedChanged += new EventHandler(reflection_CheckedChanged);

           checkBox3.CheckedChanged += new EventHandler(reflection_CheckedChanged);

           textBox7.TextChanged += new EventHandler(transfer_TextChanged);

           textBox8.TextChanged += new EventHandler(transfer_TextChanged);

           textBox9.TextChanged += new EventHandler(transfer_TextChanged);

       }

       private void rotation_TextChanged(object sender, EventArgs e)// Obrobnuk povorotu

       {

           if (textBox1.Text != "" && textBox1.Text != "-") { rotateX = (int)Convert.ToDouble(textBox1.Text); }

           if (textBox2.Text != "" && textBox2.Text != "-") { rotateY = (int)Convert.ToDouble(textBox2.Text); }

           if (textBox3.Text != "" && textBox3.Text != "-") { rotateZ = (int)Convert.ToDouble(textBox3.Text); }

           if (textBox1.Text != "" && textBox1.Text != "-" && Convert.ToDouble(textBox1.Text) < -360) { textBox1.Text = "-360"; }

           if (textBox2.Text != "" && textBox2.Text != "-" && Convert.ToDouble(textBox2.Text) < -360) { textBox2.Text = "-360"; }

           if (textBox3.Text != "" && textBox3.Text != "-" && Convert.ToDouble(textBox3.Text) < -360) { textBox3.Text = "-360"; }

           if (textBox1.Text != "" && textBox1.Text != "-" && Convert.ToDouble(textBox1.Text) > 360) { textBox1.Text = "360"; }

           if (textBox2.Text != "" && textBox2.Text != "-" && Convert.ToDouble(textBox2.Text) > 360) { textBox2.Text = "360"; }

           if (textBox3.Text != "" && textBox3.Text != "-" && Convert.ToDouble(textBox3.Text) > 360) { textBox3.Text = "360"; }

           d3d.rotation(rotateX, rotateY, rotateZ);

       }

       private void transfer_TextChanged(object sender, EventArgs e)// Obrobnuk perenesennyz i roztyagnennya

       {

           if (textBox4.Text != "" && textBox4.Text != "-") { transferA = (int)Convert.ToDouble(textBox4.Text); }

           if (textBox5.Text != "" && textBox5.Text != "-") { transferB = (int)Convert.ToDouble(textBox5.Text); }

           if (textBox6.Text != "" && textBox6.Text != "-") { transferC = (int)Convert.ToDouble(textBox6.Text); }

           if (textBox7.Text != "" && textBox7.Text != "-") { extendX = (int)Convert.ToDouble(textBox7.Text); }

           if (textBox8.Text != "" && textBox8.Text != "-") { extendY = (int)Convert.ToDouble(textBox8.Text); }

           if (textBox9.Text != "" && textBox9.Text != "-") { extendZ = (int)Convert.ToDouble(textBox9.Text); }

           d3d.transfer(transferA, transferB, transferC);

           d3d.extention(extendX, extendY, extendZ);

           d3d.InitializeGraphics();

       }

       private void reflection_CheckedChanged(object sender, EventArgs e)// Obrobnuk vidobragennya

       {

           if (checkBox1.Checked) { reflectX = (float)Math.PI; } else { reflectX = 0; }

           if (checkBox2.Checked) { reflectY = (float)Math.PI; } else { reflectY = 0; }

           if (checkBox3.Checked) { reflectZ = (float)Math.PI; } else { reflectZ = 0; }

           d3d.reflection(reflectX, reflectY, reflectZ);

       }

       private void panel1_Paint(object sender, PaintEventArgs e)

       {

       }

       private void Form1_Load(object sender, EventArgs e)

       {

       }

   }

   public class Panel1 : Panel//opus clasu korustuva4a

   {

       public Panel1()//konstruktor formu

       {

           this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);

       }

       public int rotateX, rotateY, rotateZ, transferA, transferB, transferC, extendX, extendY, extendZ;

       public float reflectX, reflectY, reflectZ;

       public void rotation(int a, int b, int c) { rotateX = a; rotateY = b; rotateZ = c; }

       public void transfer(int a, int b, int c) { transferA = a; transferB = b; transferC = c; }

       public void reflection(float a, float b, float c) { reflectX = a; reflectY = b; reflectZ = c; }

       public void extention(int a, int b, int c) { extendX = a; extendY = b; extendZ = c; }

       private Device device = null;

       private VertexBuffer vb = null;// polya ta inline-metodu clasu

       public void InitializeGraphics()//metod inicializacii grafiku

       {

           PresentParameters pp = new PresentParameters();

           pp.Windowed = true;

           pp.SwapEffect = SwapEffect.Discard;

           device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, pp);

           vb = new VertexBuffer(typeof(CustomVertex.PositionColored), 56, device, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Default);

           vb.Created += new EventHandler(vb_Creating);

           vb_Creating(vb, null);

       }

       void vb_Creating(object sender, EventArgs e)//Stvoryuemo koordunatu to4ok literu

       {

           VertexBuffer buffer = (VertexBuffer)sender;

           CustomVertex.PositionColored[] verts = new CustomVertex.PositionColored[56];

           verts[0] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[1] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Green.ToArgb());

           verts[2] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[3] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 0.0f * extendZ, Color.Green.ToArgb());

           verts[4] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[5] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 0.0f * extendZ, Color.Green.ToArgb());

           verts[6] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[7] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Green.ToArgb());

           verts[8] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[9] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Green.ToArgb());

           verts[10] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Yellow.ToArgb());

           verts[11] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[12] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Yellow.ToArgb());

           verts[13] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[14] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 3.0f * extendZ, Color.Yellow.ToArgb());

           verts[15] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[16] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 3.0f * extendZ, Color.Yellow.ToArgb());

           verts[17] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[18] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Yellow.ToArgb());

           verts[19] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[20] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[21] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[22] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[23] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[24] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[25] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB + 3.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[26] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[27] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[28] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[29] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 2.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[30] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[31] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[32] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[33] = new CustomVertex.PositionColored(transferA + 1.5f * extendX, transferB + 0.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[34] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[35] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[36] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[37] = new CustomVertex.PositionColored(transferA + 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           verts[38] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB - 1.0f * extendY, transferC + 0.0f * extendZ, Color.Yellow.ToArgb());

           verts[39] = new CustomVertex.PositionColored(transferA - 1.0f * extendX, transferB - 1.0f * extendY, transferC + 3.0f * extendZ, Color.Green.ToArgb());

           buffer.SetData(verts, 0, LockFlags.None);

       }

       private void SetupCamera()//nastroyka kameru

       {

           device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, (float)this.ClientSize.Width / (float)this.ClientSize.Height, 1.0f, 100.0f);

           device.Transform.View = Matrix.LookAtLH(new Vector3(0, 0, 15.0f), new Vector3(), new Vector3(0, 1, 0));

           device.RenderState.Lighting = false;

           device.Transform.World = Matrix.RotationYawPitchRoll(rotateX * (float)Math.PI / 180 + reflectX, rotateY * (float)Math.PI / 180 + reflectY, rotateZ * (float)Math.PI / 180 + reflectZ);

       }

       protected override void OnPaint(PaintEventArgs e)//zobrague literu

       {

           device.Clear(ClearFlags.Target, System.Drawing.Color.Black, 1.0f, 0);

           SetupCamera();

           device.BeginScene();

           device.VertexFormat = CustomVertex.PositionColored.Format;

           device.SetStreamSource(0, vb, 0);

           device.DrawPrimitives(PrimitiveType.LineList, 0, 28);

           device.EndScene();

           device.Present();

           this.Invalidate();

       }

   }

}

ДОДАТОК Б

Загальний вигляд літери:

Додаток В

І-41     080803 КП

Аркуш

20


 

А также другие работы, которые могут Вас заинтересовать

14636. Работа с глобальной сетью в командной строке Windows 62.5 KB
  Лабораторная работа 3 по дисциплине Вычислительные машины системы и сети На тему: Работа с глобальной сетью в командной строке Windows. Цель работы: научиться получать информацию и доступ к настройкам сетью с помощью утилит командной строки Windows. ЗАДАНИЕ 1...
14637. Методы обследования защищаемого помещения от закладных электронных устройств, предназначенных для снятия конфиденциальной информации 75.55 KB
  Лабораторная работа №7 Методы обследования защищаемого помещения от закладных электронных устройств предназначенных для снятия конфиденциальной информации. Цель: проверка защищаемого помещения с помощью специализированных технических средств на предмет обнаруже...
14638. Решение системы линейных алгебраических уравнений методом простой итерации 330.76 KB
  Используя прикладной программный пакет MathCAD и с помощью программы составленной на языке программирования Паскаль решить систему линейных алгебраических уравнений методом простой итерации с точностью . Данная СЛАУ: Проверка условия сходимости: Условие сходимо...
14639. Решение системы линейных алгебраических уравнений методом Гаусса 66.71 KB
  Используя прикладной программный пакет MathCAD и с помощью программы составленной на языке программирования Паскаль решить систему линейных алгебраических уравнений методом Гаусса с точностью. Составить функции реализующие методы проверить решение с помощью встроенны
14640. Решение заданного дифференциальног уравнения методом Рунге – Кутта с применением «ручных» вычислений 121.27 KB
  Решить заданное дифференциальное уравнение методом Рунге – Кутта с применением ручных вычислений и с помощью программы с шагом h и шагом h/2. С помощью прикладного программного средства MathCAD методом Рунге – Кутта обеспечить вывод полученных решений в виде таблиц и граф...
14641. Решить заданное дифференциальное уравнение методом Эйлера с применением «ручных» вычислений 123.98 KB
  Решить заданное дифференциальное уравнение методом Эйлера с применением ручных вычислений а также с помощью программы составленной на языке программирования Паскаль с шагом 2h и с шагом h. Свести результаты вычисления в одну таблицу и сопоставить точность полученных...
14642. Вычислить аналитически, с помощью прикладного программного пакета MathCAD и с помощью программы, составленной на языке программирования Паскаль интеграл от заданной функции 26.33 KB
  Вычислить аналитически с помощью прикладного программного пакета MathCAD и с помощью программы составленной на языке программирования Паскаль интеграл от заданной функции fx на отрезке при делении отрезка на 30 равных частей методом средних прямоугольников. 1 Решение в...
14643. Вычислить интеграл от заданной функции 41.02 KB
  Вычислить аналитически с помощью прикладного программного пакета MathCAD и с помощью программы составленной на языке программирования Паскаль интеграл от заданной функции fx на отрезке при делении отрезка на 30 равных частей методом Симпсона. 1 Решение вручную: ...
14644. Вычислить интеграл от заданной функции f(x) на отрезке при делении отрезка на 30 равных частей методом трапеций 121.67 KB
  Вычислить аналитически с помощью прикладного программного пакета MathCAD и с помощью программы составленной на языке программирования Паскаль интеграл от заданной функции fx на отрезке при делении отрезка на 30 равных частей методом трапеций. 1 Решение вручную: ...