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

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

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


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

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

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

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


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

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


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

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

ОСНОВНЫЕ ПРИНЦИПЫ РАБОТЫ С OPENGL

Вариант 10

Цель работы: научиться создавать простые программные приложения,


которые используют библиотеку OpenGL. Овладеть способом рисования плоских
выпуклых фигур с помощью геометрических примитивов и освоить установку
системы координат командами OpenGL.

1) Постановка задачи
С помощью инструментальных средств, указанных преподавателем, создать
простой программный проект с поддержкой библиотеки OpenGL. Учитывая
систему оценки, разработать программу с применением команд OpenGL, которая
устанавливает систему координат, создает и выводит вариант изображения на
экран (в окно) с учетом заданных примитивов и координат x1, y1 и x2, y2. Для
рисования координатной сетки необходимо использовать пунктирные линии.
Контур фигуры изобразить жирной линией. Для четных вариантов точки должны
иметь квадратную форму, а для нечетных – круглую.

Примитивы
GL_POINTS, GL_LINE_LOOP
24
x1 = -8; x2 = 1
y1 = -3; y2 = 1

2) Теоретические сведения

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


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

3) Машинный листинг программы


using System.ComponentModel;
using System.Drawing;
namespace Lab1._0
{
[ToolboxItem(true), ToolboxBitmap(typeof(RenderControl),
"RenderControl.bmp")]
public partial class RenderControl : OpenGL
{
public RenderControl() : base(false)
{
InitializeComponent();
}

public override void OnStartingOpenGL()


{
glClearColor(BackColor);
}

public override void OnFinishingOpenGL()


{
}

public override void OnRender()


{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT |
GL_STENCIL_BUFFER_BIT);
glLoadIdentity();
glColor3d(0, 0, 0);
glViewport(0, 0, Width, Height);
gluOrtho2D(-9.5, 2.1, -4.5, 2.1);
glPointSize(4);
glLineWidth(2);
glBegin(GL_LINES);

glVertex2d(-9, -3.5);
glVertex2d(-9, 2);
glVertex2d(-8.5, -4);
glVertex2d(2, -4);

glVertex2d(-9, 2);
glVertex2d(-9.15, 1.25);
glVertex2d(-9, 2);
glVertex2d(-8.85, 1.25);
glVertex2d(2, -4);
glVertex2d(1.25, -3.85);
glVertex2d(2, -4);
glVertex2d(1.25, -4.15);
Loop(-8, 1);
Loop2(-3, 1);
glEnd();

glEnable(GL_LINE_STIPPLE);
glLineStipple(10, 0xAAAA);
glColor3d(0, 139, 139);

glLineWidth(1);
glBegin(GL_LINES);
for (int i = -8; i < 2; i++)
{
glVertex2d(i, -4);
glVertex2d(i, 1.5);
}

for (int i = -3; i < 2; i++)


{
glVertex2d(-9, i);
glVertex2d(1.5, i);
}
glEnd();

glLineWidth(2);
glDisable(GL_LINE_STIPPLE);
glColor3d(0, 0, 0);

glBegin(GL_LINE_LOOP);
glVertex2d(-8, -2);
glVertex2d(-8, -1);
glVertex2d(-7, 1);
glVertex2d(-6, 1);
glVertex2d(-5, 0);
glVertex2d(-5, -1);
glVertex2d(-6, -3);
glVertex2d(-7, -3);
glVertex2d(-8, -2);
glEnd();

glBegin(GL_POINTS);
glVertex2d(-3, -2);
glVertex2d(-3, -1);
glVertex2d(-2, 1);
glVertex2d(-1, 1);
glVertex2d(0, 0);
glVertex2d(0, -1);
glVertex2d(-1, -3);
glVertex2d(-2, -3);
glEnd();

public void Loop(int x, int max)


{
glVertex2d(x, -4);
glVertex2d(x, -4.15);
if (x < max)
{
x++;
Loop(x, max);
}
}

public void Loop2(int y, int max)


{
glVertex2d(-9, y);
glVertex2d(-9.15, y);
if (y < max)
{
y++;
Loop2(y, max);
}
}

}
}

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

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



Сложность Требования Баллы
п/п
При запуске приложения изображение
1 2
соответствует варианту
Корректное отображение задания при изменении
2 1
Базовый размеров/положения окна
уровень Разработка подпрограмм для исключения
3 1
дублирования кода
Применение циклов для создания изображений
4 1
Формирование изображения векторными
5 0
Повышенный командами OpenGL (glDrawArrays и т. п.)
уровень Использование ООП (разработка собственных
6 0
классов)

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