Вы находитесь на странице: 1из 8

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Національний аерокосмічний університет ім. М. Є. Жуковського


«Харківський авіаційний інститут»

факультет програмної інженерії та бізнесу

кафедра інженерії пограмного забезпечення

Лабораторна робота № _2_


з дисципліни « Компьютерная графика с OpenGL »
назва дисципліни
на тему: Графические примитивы с OpenGL

Виконав: студент 3 курсу групи № 632п


напряму підготовки (спеціальності)
121 Інженерія програмного забезпечення
(шифр і назва напряму підготовки (спеціальності))
Тука Я.Л.
(прізвище й ініціали студента)
Прийняв:
(посада, науковий ступінь, прізвище й ініціали)
Національна шкала:
Кількість балів:
Оцінка ECTS:

Харків – 2019
Лабораторная работа № 2

ГРАФИЧЕСКИЕ ПРИМИТИВЫ OPENGL

Вариант 10

Цель работы: изучить понятие тесселяции и научиться использовать


графические примитивы OpenGL для создания поверхностей. Освоить обработку
событий клавиатуры и манипулятора «мышь» для создания интерактивных
приложений.
1) Постановка задачи
1.1. Используя инструментальные средства, указанные преподавателем, и
учитывая требования, создать программный проект с поддержкой OpenGL. С
помощью команд glOrtho   /   gluOrtho2D и glViewport установить для рабочей
области изотропную систему координат с учетом размера фигуры, заданной в
варианте. После старта приложение должно отображать в рабочей области одну
плитку.
1.2. Все варианты заданий основаны на правильных многоугольниках,
размер которых определяется величиной одного ребра. Для закраски
предполагается использовать шесть цветов: белый, серый (35 %), красный,
зеленый, синий и желтый. С помощью клавиатуры или манипулятора «мышь»
пользователь должен иметь возможность выполнить замощение (tessellation,
tilling) рабочей области по горизонтали и вертикали.
1.3. Пользователь должен иметь возможность менять режим отображения
графических примитивов OpenGL: точечное (только вершины фигуры), контурное
и с заполнением цветом. Предполагается, что переключение между режимами
выполняют по событию от клавиатуры и/или манипулятора «мышь». При этом
можно использовать как стандартные элементы управления, так и собственные,
которые реализованы и отображены средствами OpenGL.
2) Теоретическое введение

GL_POINTS: Каждая вершина рисуется, как отдельная точка.

GL_LINE_LOOP: Рисует связную группу отрезков от первой вершины до


последней, но последняя вершина соединяется с первой.

GL_TRIANGLE_STRIP: Рисование нескольких связанных треугольников.

GL_POLYGON: Рисование полигонов от 3 точек.


3) Машинный листинг
using System.ComponentModel;
using System.Drawing;
namespace _2_632_ПотрубачРР
{
[ToolboxItem(true), ToolboxBitmap(typeof(RenderControl),
"RenderControl.bmp")]
public partial class RenderControl : OpenGL
{
public int X { get; set; }
public int Y { get; set; }
public int hor { get; set; }
public int ver { get; set; }
public string Radio { get; set; }

public RenderControl() : base(false)


{
InitializeComponent();
}
public override void OnStartingOpenGL()
{
glClearColor(BackColor);
hor = 1;
ver = 1;

}
public override void OnRender()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT |
GL_STENCIL_BUFFER_BIT);
glLoadIdentity();
glViewport(0, 0, Width, Height);
gluOrtho2D(-0.5, X+0.5, -Y, 0.5);
for (int i = 1, j, k = 0, l = 0; i <= ver; i++, l -= 20)
{
for (j = 1; j <= hor; j++, k += 25)
{
if (j % 2 != 0) Paint2(k, l);
else if (j % 2 == 0) Paint2(k, l - 10);
}
k = 0;
}
}
public void Paint2(int k, int l)
{
if (Radio == "first")
{
glColor(Color.Green);
glBegin(GL_POLYGON); //1
glVertex2d(k + 5, l);//a
glVertex2d(k + 15, l);//b
glVertex2d(k + 20, l - 10);//i
glVertex2d(k, l - 10);//h
glEnd();
glBegin(GL_TRIANGLE_STRIP);
glColor(Color.Red);
glVertex2d(k + 15, l);
glVertex2d(k + 25, l);
glVertex2d(k + 20, l - 10);
glVertex2d(k + 15, l - 20);
glVertex2d(k + 25, l - 20);
glVertex2d(k + 20, l - 10);
glEnd();
glColor(Color.Green);
glBegin(GL_TRIANGLES);
glVertex2d(k + 25, l);
glVertex2d(k + 30, l - 10);
glVertex2d(k + 20, l - 10);
glEnd();
glColor(Color.Yellow);
glBegin(GL_TRIANGLES);
glVertex2d(k + 25, l - 20);
glVertex2d(k + 30, l - 10);
glVertex2d(k + 20, l - 10);
glEnd();
glColor(Color.Yellow);
glBegin(GL_POLYGON); //6
glVertex2d(k + 20, l - 10);//i
glVertex2d(k + 15, l - 20);//e
glVertex2d(k + 5, l - 20);//g
glVertex2d(k, l - 10);//h
glEnd();
}
else if (Radio == "second")
{
glColor(Color.Green);
glLineWidth(2);
glBegin(GL_LINE_LOOP);//1
glVertex2d(k, l - 10);//h
glVertex2d(k + 5, l);//a
glVertex2d(k + 15, l);//b
glVertex2d(k + 20, l - 10);//i
glEnd();
glColor(Color.Red);
glBegin(GL_LINE_LOOP);//2
glVertex2d(k + 15, l);//b
glVertex2d(k + 25, l);//c
glVertex2d(k + 20, l - 10);//i
glEnd();
glColor(Color.Green);
glBegin(GL_LINE_LOOP);//3
glVertex2d(k + 25, l);//c
glVertex2d(k + 30, l - 10);//d
glVertex2d(k + 20, l - 10);//i
glEnd();
glColor(Color.Yellow);
glBegin(GL_LINE_LOOP);//4
glVertex2d(k + 25, l - 20);//e
glVertex2d(k + 30, l - 10);//d
glVertex2d(k + 20, l - 10);//i
glEnd();
glColor(Color.Red);
glBegin(GL_LINE_LOOP);//5
glVertex2d(k + 25, l - 20);//e
glVertex2d(k + 15, l - 20);//f
glVertex2d(k + 20, l - 10);//i
glEnd();
glColor(Color.Yellow);
glBegin(GL_LINE_LOOP);//6
glVertex2d(k + 15, l - 20);//e
glVertex2d(k + 5, l - 20);//g
glVertex2d(k, l - 10);//h
glVertex2d(k + 20, l - 10);//i
glEnd();
}
else
{
glPointSize(4);
glColor(Color.Green);
glBegin(GL_POINTS);
glVertex2d(k + 5, l);//a
glVertex2d(k + 15, l);//b
glVertex2d(k + 30, l - 10);//d
glEnd();
glColor(Color.Red);
glBegin(GL_POINTS);
glVertex2d(k + 20, l - 10);//i
glVertex2d(k + 25, l);//c
glVertex2d(k + 15, l - 20);//f
glEnd();
glColor(Color.Yellow);
glBegin(GL_POINTS);
glVertex2d(k + 25, l - 20);//e
glVertex2d(k + 5, l - 20);//g
glVertex2d(k, l - 10);//h
glEnd();
}
}
}
}

4) Экран работающей программы


5) Таблица системы оценивания

Сложность Требования Баллы
п/п
При запуске приложения изображение соответствует
1 1
варианту задания
Корректное отображение задания при изменении как
2 2
Базовый уровень размеров/положения окна, так и параметров замощения
Организация взаимодействия с пользователем одним из
3 1
стандартных средств (клавиатура, «мышь» и пр.)
Применение минимального (в рамках варианта) количества
4 1
графических примитивов для выполнения задания

Создание собственных элементов интерфейса с помощью


5 0
OpenGL
Повышенный
уровень
6 Использование ООП (разработка собственных классов) 0

Вам также может понравиться