МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Оси и плоскости тела человека Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар.

Пример программы отрисовки базовых примитивов средствами OpenGL





Лабораторная работа №3

 

Тема:Создание базовых примитивов стандартными методами OpenGL

 

Цель: приобрести практические навыки отрисовки примитивов на плоскости при помощи стандартных средств OpenGL и создания простейшего приложения с помощью библиотеки Glut.

Задание.

1. С использованием библиотеки Glut создать приложение, отображающее окно (рамка, заголовок, кнопки минимизации и закрытия).

2. Используя функции библиотеки OpenGL в клиентской области окна отобразить двухмерную систему декартовых координат (оси, стрелки, разметка осей, подписи осей, точка 0).

3. Согласно индивидуальному варианту задания (таблица 1) отобразить в построенной в пункте 2 системе координат геометрический объект с указанными атрибутами.

Примечание: размер геометрического объекта должен составлять порядка 70% площади клиентской области окна.

Если требуется построение многоугольника, то он должен быть правильным.

4. Дополнительно возможно использование функций управления клавиатурой и/или мышью.

 

Таблица 1 – Геометрические объекты

Объекты Атрибуты
Цвет линии (RGB) Тип линии Цвет заливки / толщина линии
1. Квадрат Черный Пунктирная Белый
2. Пятиугольник Красный Сплошная Желтый
3. Ломаная линия Зеленый Штрих-пунктирная 4 пиксела
4. Треугольник Желтый Сплошная Белый
5. Соединенные четырехугольники Синий Штриховая 2 пиксела
6. Линии Фиолетовый Штриховая 3 пиксела
7. Прямоугольник Голубой Сплошная Зеленый
8. Веер соединенных треугольников Белый Сплошная Черный
9. Замкнутая ломаная линия Светло-синий Штриховая 5 пиксела
10. Шестиугольник Светло-зеленый Штрих-пунктирная 2 пиксела
11. Восьмиугольник Бордовый Сплошная Голубой
12. Цепочка соединенных треугольников Оранжевый Пунктирная 1 пиксел
13. Квадрат Розовый Сплошная Желтый
14. Пятиугольник Серый Сплошная Светло-зеленый
15. Ломаная линия Коричневый Пунктирная 1 пиксел
16. Треугольник Темно-зеленый Сплошная Салатный
17. Соединенные четырехугольники Сиреневый Сплошная Красный
18. Линии Бирюзовый Пунктирная 2 пиксела
19. Прямоугольник Алый Сплошная Желтый
20. Веер соединенных треугольников Оранжевый Сплошная Серый
21. Замкнутая ломаная линия Грязно-зеленый Штриховая 4 пиксела
22. Плавно изогнутая линия Темно-зеленый Штрих-пунктирная 3 пиксела
23. Восьмиугольник Темно-синий Сплошная Оранжевый
24. Цепочка соединенных треугольников Фиолетовый Штриховая 3 пиксела
25. Шестиугольник Серый Сплошная Светло-красный

 

Содержание отчета:

1) титульный лист с подписью;

2) задание, № варианта;

3) теоретическая справка - описание основных функций (при построении окна) и функций по варианту с параметрами;

4) выводы;

5) экранные формы;

6) листинг программы.

 

Срок выполнения работы – 2 занятия.

 


Пример программы отрисовки базовых примитивов средствами OpenGL

#include <windows.h>

#include <gl\gl.h>

#include <gl\glut.h>

#include <math.h>

 

#define N 7

#define PI 3.1415926535897932384626433832795f

 

int d=0;

float l=40;

 

void R(int w,int h) //функция реакции на изменение размера окна

{

glViewport(0,0,w,h);

glMatrixMode(GL_PROJECTION); //режим проекции матрицы вида

glLoadIdentity(); //загрузка матрицы вида

glOrtho(-l,l,-l,l,-l,l); //размер области видимости

}

 

void K(unsigned char k,int x,int y) //функция реакции на нажатие клавиши

{

if (k==27) //escape

{

exit(0);

}

}

 

void D() //функция реакции на требование перерисовки окна

{

int i;

glClearColor(0.5,0.5,0.5,0); //цвет фона

glClear(GL_COLOR_BUFFER_BIT); //очистка окна

glMatrixMode(GL_MODELVIEW); //модельный режим матрицы вида

glLoadIdentity(); //загрузка матрицы вида

 

glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

glColor3f(1,1,0);

glBegin(GL_QUAD_STRIP);

glVertex2f(-0.75*l,-0.75*l);

glVertex2f(-0.6*l,0.75*l);

glVertex2f(0.15*l,-0.6*l);

glVertex2f(0.1*l,0.6*l);

glVertex2f(0.6*l,-0.75*l);

glVertex2f(0.75*l,0.75*l);

glEnd();

glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);

glColor3f(0,0,1); //установка цвета линий

glEnable(GL_LINE_STIPPLE); //разрешение изменять тип линии

glLineStipple(3,0x5555); //установка типа линии

glBegin(GL_QUAD_STRIP);

glVertex2f(-0.75*l,-0.75*l);

glVertex2f(-0.6*l,0.75*l);

glVertex2f(0.15*l,-0.6*l);

glVertex2f(0.1*l,0.6*l);

glVertex2f(0.6*l,-0.75*l);

glVertex2f(0.75*l,0.75*l);

glEnd();

glDisable(GL_LINE_STIPPLE); //запрет изменять тип линии

// Коорд.оси

glBegin(GL_LINES); //рисуем координатные оси:

glColor3f(1,0,0); //красным - OX

glVertex2f(-l,0);

glVertex2f(l,0);

glColor3f(0,1,0); //зеленым - OY

glVertex2f(0,-l);

glVertex2f(0,l);

glEnd();

// Подпись оси

glColor3f(1,0,0); //красным - OX

glRasterPos2f(l-1,-2);

glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,'x');

glColor3f(0,1,0); //зеленым - OY

glRasterPos2f(-1.1,l-2);

glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,'y');

glFlush();

}

 

void main(int c,char *v[])

{

glutInit(&c,v);

glutInitWindowPosition(100,100);

glutInitWindowSize(800,600);

glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);

glutCreateWindow("=======");

glutKeyboardFunc(K);

glutReshapeFunc(R);

glutDisplayFunc(D);

glutMainLoop();

}





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.