DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

Рік:
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:51

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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