Квадрік-об'єкти. Камера

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра ЗІ З В І Т до лабораторної роботи №5 з курсу «Програмування комп’ютерної графіки» на тему: «Квадрік-об'єкти. Камера» Виконав: ст. гр. ЗІ-31 Прийняла: Львів – 2011 Мета роботи. Дослідження можливостей моделювання графічних об'єктів з використанням квадрик-об'єктів бібліотеки OPENGL; установка і використання камери; дослідження і порівняльний аналіз результатів, отриманих при переміщенні камери і при переміщенні об'єкту. Варіант 1 Текст програми 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 GeometricTransformation { public partial class Form1 : Form { public Form1() { InitializeComponent(); // инициализация для работы с openGL AnT.InitializeContexts(); } // вспомогательные переменные - в них будут хранится обработанные значения, // полученные при перетаскивании ползунков пользователем double a = 0, b = 0, c = -5, d = 0, zoom = 1; // выбранные оси int os_x = 1, os_y = 0, os_z = 0; // режим сеточной визуализации bool Wire = false; private void Form1_Load(object sender, EventArgs e) { // инициализация бибилиотеки glut Glut.glutInit(); // инициализация режима экрана Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE); // установка цвета очистки экрана (RGBA) Gl.glClearColor(255, 255, 255, 1); // установка порта вывода Gl.glViewport(0, 0, AnT.Width, AnT.Height); // активация проекционной матрицы Gl.glMatrixMode(Gl.GL_PROJECTION); // очистка матрицы Gl.glLoadIdentity(); // установка перспективы Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200); Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); // начальная настройка параметров openGL (тест глубины, освещение и первый источник света) Gl.glEnable(Gl.GL_DEPTH_TEST); Gl.glEnable(Gl.GL_LIGHTING); Gl.glEnable(Gl.GL_LIGHT0); // установка первых элементов в списках combobox comboBox1.SelectedIndex = 0; comboBox2.SelectedIndex = 0; // активация таймера, вызывающего функцию для визуализации RenderTime.Start(); } // обрабатываем отклик таймера private void RenderTimer_Tick(object sender, EventArgs e) { // вызываем функцию отрисовки сцены Draw(); } // событие изменения значения private void trackBar1_Scroll(object sender, EventArgs e) { // переводим значение, установившееся в элементе trackBar в необходимый нам формат a = (double)trackBar1.Value / 1000.0; // подписываем это значение в label элементе под данным ползунком label4.Text = a.ToString(); } // событие изменения значения private void trackBar2_Scroll(object sender, EventArgs e) { // переводим значение, установившееся в элементе trackBar в необходимый нам формат b = (double)trackBar2.Value / 1000.0; // подписываем это значение в label элементе под данным ползунком label5.Text = b.ToString(); } // событие изменения значения private void trackBar3_Scroll(object sender, EventArgs e) { // переводим значение, установившееся в элементе trackBar в необходимый нам формат c = (double)trackBar3.Value / 1000.0; // подписываем это значение в label элементе под данным ползунком label6.Text = c.ToString(); } // событие изменения значения private void trackBar4_Scroll(object sender, EventArgs e) { // переводим значение, установившееся в элементе trackBar в необходимый нам формат d = (double)trackBar4.Value; // подписываем это значение в label элементе под данным ползунком label6.Text = d.ToString(); } // событие изменения значения private void trackBar5_Scroll(object sender, EventArgs e) { // переводим значение, установившееся в элементе trackBar в необходимый нам формат zoom = (double)trackBar5.Value / 1000.0; // подписываем это значение в label элементе под данным ползунком label6.Text = zoom.ToString(); } // изменения значения чекбокса private void checkBox1_CheckedChanged(object sender, EventArgs e) { // если отмечен if (checkBox1.Checked) { // устанавливаем сеточный режим визуализации Wire = true; } else { // иначе - полигональная визуализация Wire = false; } } // изменение в элементах comboBox private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { // в зависимости от выбранного режима switch (comboBox1.SelectedIndex) { // устанавливаем необходимую ось (будет испльзовано в функции glRotate**) case 0: { os_x = 1; os_y = 0; os_z = 0; break; } case 1: { os_x = 0; os_y = 1; os_z = 0; break; } case 2: { os_x = 0; os_y = 0; os_z = 1; break; } } } // функция отрисовки private void Draw() { // очистка буфера цвета и буфера глубины Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glClearColor(255, 255, 255, 1); // очищение текущей матрицы Gl.glLoadIdentity(); // помещаем состояние матрицы в стек матриц , дальнейшие трансформации затронут только визуализацию объекта Gl.glPushMatrix(); // производим перемещение, в зависимости от значений, полученных при перемещении ползунков Gl.glTranslated(a, b, c); // поворот по установленной оси Gl.glRotated(d, os_x, os_y, os_z); // и масштабирование объекта Gl.glScaled(zoom, zoom, zoom); // в зависимсоти от установленного типа объекта switch (comboBox2.SelectedIndex) { // рисуем нужный объект, использую фунции бибилиотеки GLUT case 0: { if (Wire) // если установлен сеточный режим визуализации Glut.glutWireSphere(2, 16, 16); // сеточная сфера else Glut.glutSolidSphere(2, 16, 16); // полигональная сфера break; } case 1: { if (Wire) // если установлен сеточный режим визуализации Glut.glutWireCylinder(1, 2, 32, 32); // цилиндр else Glut.glutSolidCylinder(1, 2, 32, 32); break; } case 2: { if (Wire) // если установлен сеточный режим визуализации Glut.glutWireCube(2); // куб else Glut.glutSolidCube(2); break; } case 3: { if (Wire) // если установлен сеточный режим визуализации Glut.glutWireCone(2, 3, 32, 32); // конус else Glut.glutSolidCone(2, 3, 32, 32); break; } case 4: { if (Wire) // если установлен сеточный режим визуализации Glut.glutWireTorus(0.2, 2.2, 32, 32); // тор else Glut.glutSolidTorus(0.2, 2.2, 32, 32); break; } } // возвращаем состояние матрицы Gl.glPopMatrix(); // завершаем рисование Gl.glFlush(); // обновлем элемент AnT AnT.Invalidate(); } } } Результати виконання програми Висновок На даній лабораторній роботі я дослідив можливості моделювання графічних об'єктів з використанням квадрик-об'єктів бібліотеки OPENGL.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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