Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування комп’ютерної графіки

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет «Львівська Політехніка» Інститут комп’ютерних технологій автоматики та метрології Кафедра БІТ  Звіт до лабораторної роботи № 2 з дисципліни : “Програмування комп’ютерної графіки ” Львів 2012 Мета: Знайомство з примітивами OPENGL, призначеними для виведення крапок, ліній і багатокутників. Визначення кольору об'єктів. Різні способи замальовування об'єктів. КОРОТКІ ТЕОРЕТИЧНІ ДАНІ Для виконання роботи необхідно мати уявлення про основні принципи формування зображення на екрані ([7] – лекція 17), про моделювання об'єктів на плоскості ([7] – лекції 7, 8, 10); знати особливості представлення кольору в колірній моделі RGB ([7] – лекція 4); розуміти сенс терміну «антиелайзінг» ([7] – лекція 6). Область виводу в OPENGL задається командою glViewPort(0, 0, ClientWidth, ClientHeight) де перші два параметри задають положення лівого верхнього кута вікна виводу, параметри ClientWidth, ClientHeight визначають розмір вікна в екранних координатах. Центр отриманої області виводу має координати (0, 0). Координати змінюються в діапазоні [-1; 1] по кожній осі. Якщо при установці формату піксела був встановлений режим подвійної буферизації (прапор PFD_DOUBLEBUFFER), то зображення готується у позаекранному буфері, і необхідно забезпечити перезапис вмісту позаекранного буфера в основний. Зробити це можна командою BOOL SwapBuffers(HDC hdc); Всі зображення будуються з окремих примітивів, які описуються за допомогою набору вершин (Vertex). Примітивами OpenGl є крапки (одиночні вершини), лінії (пари вершин), трикутники (три вершини), чотирикутники (чотири вершини) і полігони (3 і більш за вершини). Командні дужки. Використання функцій glBegin і glEnd. Команди малювання полягають між командними дужками glBegin і glEnd. Командними дужками бібліотеки OpenGl є спеціальні функції (що не мають ніякого відношення до операторних дужок мов програмування). Помилка при використанні командних дужок не розпізнається компілятором, але може привести до непередбачуваних результатів роботи програми. Усередині командних дужок можуть знаходитися будь-які оператори мови і багато функцій OPENGL. Головне призначення командних дужок – завдання режиму (примітиву) для команд glVertex (вершина), що визначають координати вершин для малювання примітивів OPENGL. Команди, що встановлюють розмір крапки, товщину і типа лінії, включення і відключення режиму згладжування (антиелайзінг) повинні стояти поза командними дужками. Колір окремих вершин або примітивів може встановлюватися як поза командними дужками, так і усередині них. Для установки кольору використовується команда glColor3f(0.3f, 0.5f, 0.1f) де колір формується як сума компонент червоного, зеленого і синього кольорів у вказаній пропорції. Значення компонент задаються у вигляді дійсних чисел в інтервалі [0; 1]. Компоненти кольору можуть бути задані і в цілочисельній формі, граничним значенням в цьому випадку буде максимальне 8-бітове ціле без знаку, наприклад, білий колір буде записаний таким чином: glColor3i(214748647, 214748647, 214748647). Проте переважно використовувати команду в речовій формі, оскільки OPENGL зберігає дані саме в речовому форматі. Цифра 3 в назві команди означає число аргументів команди. Аргументи функції glBegin. Аргументами функції glBegin можуть бути стандартні константи OpenGl, що визначають примітиви бібліотеки: GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP, GL_POLYGON. У програмі імена констант мають бути записані саме так як це зроблено тут (все у верхньому регістрі). Хід роботи: Використовуючи програму-шаблон, створену при виконанні попередньої лабораторної роботи виконайте наступні завдання. Завдання 1. Побудувати крапки розташовані у вершинах правильного n-кутника. Встановити режим згладжування для крапок. Експериментально визначити максимальний розмір крапки, при якому можливе згладжування. Завдання 2. Використовуючи примітив для виведення ліній намалювати правильний n-кутник. Змінити типа і ширину ліній. Завдання 3. Використовуючи примітив для виведення ламаної лінії намалювати фігуру, змальовану на рис.1. Завдання 4. Використовуючи примітив для виводу замкнутою ламаною намалювати фігуру, змальовану на рис.2 Завдання 5. Побудувати фігуру, змальовану на рис.2, розбивши її на трикутники (кожен трикутник забарвлений випадковим кольором). Виконаєте три варіанти побудов з використанням примітивів: А) трикутник; Б) стрічка трикутників; В) віяло трикутників. Чим відрізняються результати при зміні способу тонування? Завдання 6. Використовуючи примітив для виведення багатокутників побудувати правильний n-кутник. Завдання 7. Побудувати неопуклий багатокутник, змальований на рис.3, представивши його у вигляді сукупності окремих багатокутників, призначивши кожному багатокутнику свій колір. Подивитися результат роботи програми для різних способів тонування. Завдання 8. Змінити програму попереднього завдання так, щоб А) лицьові грані змальовувалися тільки вершинами; Б) лицьові грані змальовувалися зафарбованими, а зворотні – лініями; В) лицьові і зворотні грані змальовувалися лініями (каркасне зображення). Варіанти до завдання. Варіант 2 N=7        Текст програми: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Tao.OpenGl; using Tao.FreeGlut; using Tao.Platform.Windows; namespace lab2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); AnT.InitializeContexts(); } private void Form1_Load(object sender, EventArgs e) { Glut.glutInit(); Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH); Gl.glClearColor(255, 255, 255, 1); Gl.glViewport(0, 0, AnT.Width, AnT.Height); Gl.glMatrixMode(Gl.GL_PROJECTION); Gl.glLoadIdentity(); if ((float)AnT.Width <= (float)AnT.Height) { Glu.gluOrtho2D(0.0, 25.0 * (float)AnT.Height / (float)AnT.Width, 0.0, 25.0); } else { Glu.gluOrtho2D(0.0, 20.0 * (float)AnT.Width / (float)AnT.Height, 0.0, 20.0); } Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); } private void AnT_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { Gl.glClear(Gl.GL_COLOR_BUFFER_BIT); Gl.glLoadIdentity(); Gl.glColor3f(255, 0, 255); Gl.glBegin(Gl.GL_LINE_STRIP); Gl.glEnd(); Gl.glFlush(); AnT.Invalidate(); Gl.glBegin(Gl.GL_LINE_STRIP); Gl.glEnd(); Gl.glEnable(Gl.GL_LINE_SMOOTH); Gl.glBegin(Gl.GL_LINE_STRIP); Gl.glVertex2d(6, 6); Gl.glVertex2d(10,11); Gl.glVertex2d(16,10); Gl.glVertex2d(17,6); Gl.glVertex2d(14,3); Gl.glVertex2d(12,7); Gl.glVertex2d(9,5); Gl.glVertex2d(13,4); Gl.glVertex2d(11,3); Gl.glVertex2d(6,6); Gl.glEnd(); Gl.glDisable(Gl.GL_LINE_SMOOTH); } } } Виконання програми:    Висновок: На даній лабораторній роботі я створив програми-заготовки для роботи з бібліотекою openGL. Я ознайомився з примітивами OPENGL, призна-ченими для виведення крапок, ліній і багатокутників.
Антиботан аватар за замовчуванням

22.01.2013 12:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!