Тривимірні побудови. Буфер глибини. Видові параметри. Паралельна і перспективна проекції

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
ЗІ
Кафедра:
ЗІ

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА Кафедра ЗІ З В І Т До лабораторної роботи №4 з курсу: «Програмування комп’ютерної графіки» на тему: «Тривимірні побудови. Буфер глибини. Видові параметри. Паралельна і перспективна проекції» Варіант №3 Львів – 2016 Мета роботи: з'ясувати особливості тривимірного моделювання, побудови об'ємних зображень як проекцій на екранній плоскості; дати поняття про параметри вигляду. Завдання: Завдання 1. Побудуйте зображення трьох плоских фігур в просторі (відповідно до варіанту). Оцініть отриманий результат: чи правильно замальовані фігури, якщо немає - поясніть чому. Завдання 2. Встановіть режим перевірки буфера глибини в програмі до завдання 1. Порівняєте отриманий результат з попереднім. Завдання 3. Встановіть видові параметри відповідно до варіанту і паралельну проекцію; побудуйте зображення куба з координатами вершин, рівними по модулю 1 (куб замальовується за допомогою 6 квадратів). Оцінити результат. Завдання 4. Встановіть перспективну проекцію і побудуйте каркасне зображення куба Завдання 5. Поверніть осі координат відповідно до варіанту і побудуйте зображення куба. Оцінити результат. Чому частки куба відсічені? Змініть видові параметри так, щоб куб замальовувався без відсікань. Змініть код програми так, щоб кожна грань куба замальовувалася своїм кольором. Завдання 6. Напишіть програму, в якій зображення куба змінюється при натисненні клавіш (відповідно до варіанту). Варіант 3  Фігури (задані вершинами)  Параметри вигляду  Поворот осей  До завдання 6    Трикутник: (1, 1, 0) (1, 0, 1) (0, 1, 1) Чотирикутник: (0.8, 0.7, 1) (-0.8, 0.7, 1) (-0.8, -0.7, -0.8) (0.8, -0.7, -0.8) Трикутник: (0, 0.5, -0.5) (-0.5, 0, -0.5) (0.5, 0, 0.5)  -0.85, 0.85 -0.7, 0.7 6, 12  Навколо OX: -25 Навколо OY: 60  Куб повертається при натисненні на деяку клавішу на заданий кут   Текст програми: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Tao.FreeGlut; using Tao.OpenGl; namespace Lab_4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); AnT.InitializeContexts(); } private void AnT_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(); Glu.gluPerspective(100.0f, (float)AnT.Width / (float)AnT.Height, 0.8f, 1000.0f); Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); // настройка параметрів візуалізації // } private void button1_Click(object sender, EventArgs e) { Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glLoadIdentity(); Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL); AnT.Invalidate(); Gl.glTranslatef(-0.5f, 0.0f, -3.5f); Gl.glBegin(Gl.GL_TRIANGLES); Gl.glColor3f(1.0f, 0, 0.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glColor3f(0.0f, 1.0f, 0.0f); Gl.glVertex3f(-1.0f, 0.0f, -1.0f); Gl.glColor3f(0.0f, 0, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glEnd(); Gl.glColor3f(0.0f, 1.0f, 1.0f); //cyan Gl.glBegin(Gl.GL_TRIANGLES); Gl.glVertex3f(-0.7f, -0.7f, 0); Gl.glVertex3f(-0.7f, 0.7f, 0); Gl.glVertex3f(0.7f, 0, 0); Gl.glEnd(); Gl.glColor3f(0.0f, 0.0f, 0.0f); //black Gl.glBegin(Gl.GL_TRIANGLES); Gl.glVertex3f(0, 0, -0.9f); Gl.glVertex3f(-1, -0.8f, 0.5f); Gl.glVertex3f(1, 1, 1); Gl.glEnd(); Gl.glFlush(); } private void button2_Click(object sender, EventArgs e) { Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL); Gl.glLoadIdentity(); AnT.Invalidate(); Gl.glEnable(Gl.GL_DEPTH_TEST); Gl.glTranslatef(-0.5f, 0.0f, -3.5f); Gl.glBegin(Gl.GL_TRIANGLES); Gl.glColor3f(1.0f, 0, 0.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glColor3f(0.0f, 1.0f, 0.0f); Gl.glVertex3f(-1.0f, 0.0f, -1.0f); Gl.glColor3f(0.0f, 0, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glEnd(); Gl.glColor3f(0.0f, 1.0f, 1.0f); //cyan Gl.glBegin(Gl.GL_TRIANGLES); Gl.glVertex3f(-0.7f, -0.7f, 0); Gl.glVertex3f(-0.7f, 0.7f, 0); Gl.glVertex3f(0.7f, 0, 0); Gl.glEnd(); Gl.glColor3f(0.0f, 0.0f, 0.0f); //black Gl.glBegin(Gl.GL_TRIANGLES); Gl.glVertex3f(0, 0, -0.9f); Gl.glVertex3f(-1, -0.8f, 0.5f); Gl.glVertex3f(1, 1, 1); Gl.glEnd(); Gl.glFlush(); Gl.glDisable(Gl.GL_DEPTH_TEST); } private void button3_Click(object sender, EventArgs e) { Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glLoadIdentity(); Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL); AnT.Invalidate(); Gl.glOrtho(-0.8f, 0.8f, -0.9f, 0.9f, 3, 8); Gl.glTranslatef(-4.5f, 0.0f, 6.5f); Gl.glBegin(Gl.GL_TRIANGLES); Gl.glColor3f(1.0f, 0, 0.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glColor3f(0.0f, 1.0f, 0.0f); Gl.glVertex3f(-1.0f, 0.0f, -1.0f); Gl.glColor3f(0.0f, 0, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glEnd(); Gl.glColor3f(0.0f, 1.0f, 1.0f); //cyan Gl.glBegin(Gl.GL_TRIANGLES); Gl.glVertex3f(-0.7f, -0.7f, 0); Gl.glVertex3f(-0.7f, 0.7f, 0); Gl.glVertex3f(0.7f, 0, 0); Gl.glEnd(); Gl.glColor3f(0.0f, 0.0f, 0.0f); //black Gl.glBegin(Gl.GL_TRIANGLES); Gl.glVertex3f(0, 0, -0.9f); Gl.glVertex3f(-1, -0.8f, 0.5f); Gl.glVertex3f(1, 1, 1); Gl.glEnd(); Gl.glTranslatef(4.5f, 0.0f, -4.5f); Gl.glBegin(Gl.GL_QUADS); Gl.glColor3f(0.0f, 0.0f, 0.0f); //black Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glColor3f(1.0f, 0.0f, 1.0f); //magenta Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glColor3f(1.0f, 0.0f, 0.0f); //red Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glColor3f(0.0f, 1.0f, 1.0f); //cyan Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glColor3f(0.0f, 1.0f, 0.0f); //green Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glColor3f(1.0f, 1.0f, 0.0f); //yellow Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glEnd(); Gl.glFlush(); } private void button4_Click(object sender, EventArgs e) { Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glLoadIdentity(); Gl.glColor3f(1.0f, 0, 0); Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL); Gl.glLoadIdentity(); Gl.glFrustum(-0.8f, 0.8f, -0.8f, 0.9f, 3, 6); Gl.glRotatef(-15.0f, 1.0f, 0.0f, 0.0f); //поворот щодо осі X Gl.glRotatef(65.0f, 0.0f, 1.0f, 0.0f); //поворот щодо осі Y Gl.glBegin(Gl.GL_QUADS); Gl.glColor3f(0.0f, 0.0f, 0.0f); //black Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glColor3f(1.0f, 0.0f, 1.0f); //magenta Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glColor3f(1.0f, 0.0f, 0.0f); //red Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glColor3f(0.0f, 1.0f, 1.0f); //cyan Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glColor3f(0.0f, 1.0f, 0.0f); //green Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glColor3f(1.0f, 1.0f, 0.0f); //yellow Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glEnd(); Gl.glFlush(); AnT.Invalidate(); } private void button5_Click(object sender, EventArgs e) { //cube Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glLoadIdentity(); AnT.Invalidate(); Gl.glFrustum(-0.8f, 0.8f, -0.9f, 0.9f, 3, 8); Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_LINE); Gl.glLineWidth(3); Gl.glBegin(Gl.GL_QUADS); Gl.glColor3f(0.0f, 0.0f, 0.0f); //black Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glColor3f(1.0f, 0.0f, 1.0f); //magenta Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glColor3f(1.0f, 0.0f, 0.0f); //red Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glColor3f(0.0f, 1.0f, 1.0f); //cyan Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glColor3f(0.0f, 1.0f, 0.0f); //green Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glColor3f(1.0f, 1.0f, 0.0f); //yellow Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glEnd(); Gl.glFlush(); } private void button6_Click(object sender, EventArgs e) { Gl.glClear(Gl.GL_COLOR_BUFFER_BIT); AnT.Invalidate(); } private void button7_Click(object sender, EventArgs e) { Application.Exit(); } private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.P) { Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glLoadIdentity(); Gl.glColor3f(1.0f, 0, 0); Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL); Gl.glLoadIdentity(); Gl.glFrustum(-0.8f, 0.8f, -0.9f, 0.9f, 3, 8); Gl.glRotatef(-15.0f, 1.0f, 0.0f, 0.0f); //поворот щодо осі X Gl.glRotatef(65.0f, 0.0f, 1.0f, 0.0f); //поворот щодо осі Y Gl.glScalef(0.5f,0.5f,0.5f); Gl.glBegin(Gl.GL_QUADS); Gl.glColor3f(0.0f, 0.0f, 0.0f); //black Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glColor3f(1.0f, 0.0f, 1.0f); //magenta Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glColor3f(1.0f, 0.0f, 0.0f); //red Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glColor3f(0.0f, 1.0f, 1.0f); //cyan Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glColor3f(0.0f, 1.0f, 0.0f); //green Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glColor3f(1.0f, 1.0f, 0.0f); //yellow Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glEnd(); Gl.glFlush(); AnT.Invalidate(); } else if (e.KeyCode == Keys.M) { Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glLoadIdentity(); Gl.glColor3f(1.0f, 0, 0); Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL); Gl.glLoadIdentity(); Gl.glFrustum(-0.8f, 0.8f, -0.9f, 0.9f, 3, 8); Gl.glRotatef(-15.0f, 1.0f, 0.0f, 0.0f); //поворот щодо осі X Gl.glRotatef(65.0f, 0.0f, 1.0f, 0.0f); //поворот щодо осі Y Gl.glBegin(Gl.GL_QUADS); Gl.glColor3f(0.0f, 0.0f, 0.0f); //black Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glColor3f(1.0f, 0.0f, 1.0f); //magenta Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glColor3f(1.0f, 0.0f, 0.0f); //red Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glColor3f(0.0f, 1.0f, 1.0f); //cyan Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glColor3f(0.0f, 1.0f, 0.0f); //green Gl.glVertex3f(-1.0f, 1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f); Gl.glColor3f(1.0f, 1.0f, 0.0f); //yellow Gl.glVertex3f(1.0f, 1.0f, -1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f); Gl.glEnd(); Gl.glFlush(); AnT.Invalidate(); } else if (e.KeyCode == Keys.K) { button4.PerformClick(); } } } } Результат виконання програми / Висновок: В ході виконання даної лабораторної роботи я навчився використовувати елементи бібліотеки OpenGl для побудови об’ємних зображення.
Антиботан аватар за замовчуванням

19.12.2016 03:12-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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