Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ПИ_ИКТ Программирование по С++ (1 семестр) _Хотов.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5.83 Mб
Скачать

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

  1. Титульный лист.

  2. Наименование и цель работы.

  3. Краткое теоретическое описание.

  4. Задание на лабораторную работу.

  5. Схема алгоритма.

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

  7. Результаты выполнения программы.

  1. Введение в OpenGl.

Работа с OpenGl при помощи

Библиотеки glut

Создание консольного приложения, использующего OpenGl

Самым простым объектом, с помощью которого можно увидеть всю мощь OpenGL, является сфера. Давайте попытаемся ее изобразить. Для этого надо создать новый проект в VisualC++, выполнить следующие действия:

1. Запустите MSVisualC++2008.

2. Щелкните меню File->New->Win32 Console Application.

3. Выберите каталог и имя проекта, впишите – sphere, щелкните OK.

4. Выберите An Empty Project, щелкните Finish.

5. Создайте в проекте файл sphere.c.

6. Щелкните Build->Set Active Configuration и установите тип проекта sphere – Win32 Release

7. Далее, установите Glut в следующие директории:

glut32.dll, glut32.lib, glut32.h -> в текущую директорию проекта закидываем.

9. Теперь откомпилируйте и запустите Вашу программу.

Меню Build->Execute Sphere.exe

Текст программы Sphere.exe:

#include <windows.h>

//#include <GL/gl.h>

//#include <GL/glu.h>

//#include <GL/glaux.h>

#include "glut.h"

void resize(int width, int height)

{

}

void display(void)

{

glColor3d(1, 1, 0);

glutSolidSphere(1.0, 25, 25);

glFlush();

}

void init(void)

{

glEnable(GL_COLOR_MATERIAL);

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);

glEnable(GL_DEPTH_TEST);

glClearColor(0.0, 0.0, 0.0, 0.0);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(-5.0, 5.0, -5.0, 5.0, 2.0, 12.0);

gluLookAt(0, 0, 5, 0, 1, 0, 0, 1, 0);

glMatrixMode(GL_MODELVIEW);

}

int main(int argc, char ** argv)

{

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

glutInitWindowPosition(50, 10);

glutInitWindowSize(400, 400);

glutCreateWindow("Hello");

glutReshapeFunc(resize);

init();

glutDisplayFunc(display);

glutMainLoop();

return 0;

}

Лабораторная работа №14. Создание приложения с использованием OpenGl. Рисование примитивов. Цель работы:

Изучение основ использования OpenGL и GLUT. Создание простейшего приложения с использованием OpenGL.

1 Выполнить общее задание.

2 Выполнить индивидуальное задание.

Общая часть

  1. Создайте новый проект в Microsoft Visual C++6.0. File->New->Win32 Console Application. Выберите локальную директорию, где будет создан проект. Задайте имя проекту. После это нажмите кнопку Ok. Установите флаг на “A simple application.” После чего нажмите кнопку Finish. Приложение будет создано.

  2. После каждого изменения сохраняйте проект.

  3. Подключите библиотеку clut: #include <GL/glut.h>. Для выполнения задания понадобиться пять основные функции: main(); Display();Keyboard();Reshape().

  4. Описание функции main:

void main(int argc,char **argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB |GLUT_DEPTH);

glutInitWindowSize(512,512); // размер окна

glutInitWindowPosition(0,0); // позиция окна

glutCreateWindow("Заголовок окна");

glutDisplayFunc(Display); //функция Display будет вызываться, когда ничего не происходит

glutIdleFunc(Display); //функция Display будет вызываться, когда ничего не происходит

glutReshapeFunc(Reshape);// функция Reshape будет вызываться при изменении размеров окна

glutKeyboardFunc(Keyboard);// функция будет вызываться при нажатие клавиши клавиатуры

glutMainLoop();

}

Также в функции main можно задать освещённость и материалы в простейшем случае будет выглядеть так:

glEnable(GL_LIGHTING); // влючить освещение

glEnable(GL_LIGHT0); // включить нулевой источник света

glLightfv(GL_LIGHT0,GL_DIFFUSE ,color); //установить цвет свет

glLightfv(GL_LIGHT0,GL_POSITION,pos); //установить позицию расположения источника света

glEnable(GL_DEPTH_TEST); //установить глубину

glEnable(GL_COLOR_MATERIAL);//установить материал для отражения света

Описание переменных color и pos:

float pos[4]={-1, 1, -1, 0.0}; // координаты источника света

float color[4]={1.0, 1.0, 1.0, 0}; // цвет источника света белый

Освещенность можно вынести и в функции Display, если необходима анимация.

  1. Описание функции Keyboard – в простейшем виде будет выглядеть так:

void Keyboard(unsigned char key, int x, int y)

{

#define ESCAPE '\033'

if( key == ESCAPE )

exit(0);// реализует выход из программы при нажатии клавиши ESC.

}

  1. Функцию Reshape() оставим пустой.

В функции Display() как раз и происходит рисование трехмерной сцены. Зададим следующие параметры:

glClear(GL_COLOR_BUFFER_BIT) – с помощью поразрядного сложения констант (флагов) устанавливает буферы, которые очищаются; GL_COLOR_BUFFER_BIT – буфер цвета;

glClearColor(1.0,1.0,1.0,1.0) – устанавливает цвет фона (в примере – белый), складывающийся из четырех компонент (диапазон значений от 0 до 1): RED - красный, GREEN - зеленый, BLUE - синий и ALPHA - прозрачность (1.0 – полностью не прозрачный); цвет фона изменяется при вызове функции glClear;

glutSwapBuffers() – переключение буферов кадра, поскольку функция display рисует изображение в заднем буфере, и glutSwapBuffers делает его передним.

  1. Примеры рисования точек:

Существует 10 геометрических примитивов, использующих эту парадигму

glBegin(Glenum mode);

. . . . . . .

glEnd();

Вершины внутри скобок рассматриваются в зависимости от значения константы mode:

1) GL_POINTS – отдельные точки;

2) GL_LINES – каждая пара вершин - отдельный отрезок;

3) GL_LINE_STRIP – каждая пара вершин – сегмент одной ломаной линии;

4) GL_LINE_LOOP - каждая пара вершин – сегмент одной замкнутой ломаной линии; последний отрезок задается первой и последней вершинами;

5) GL_TRIANGLES – каждая тройка вершин - отдельный треугольник;

6) GL_TRIANGLES_STRIP – группа треугольников, имеющих попарно смежную сторону;

7) GL_TRIANGLES_FAN - группа связанных треугольников, имеющих общую вершину;

8) GL_QUADS – каждая четверка вершин – отдельный четырехугольник;

9) GL_QUADS_STRIP – группа связанных четырехугольников;

10) GL_POLYGON – все вершины задают отдельный выпуклый многоугольник.

glColor3f(0,0,0); //цвет рисования (R,G,B)

glPointSize(5); // размер точки, параметр GLfloat

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// очистка буфера цвета, т.е. установка цвета фона, заданного функцией glClearColor

glBegin(GL_POINTS); //начало прорисовки точек

glVertex2i(1,1);

glEnd();

glPointSize(10);

glEnable(GL_POINT_SMOOTH); //разрешить смешение цветов для уменьшения эффекта ступенчатости (иначе - точки квадратные)

glBegin(GL_POINTS);

glVertex3f(0,0,0);

glEnd();

glDisable(GL_POINT_SMOOTH); //запретить смешение

glutSwapBuffers();

}

Для того, чтобы выполнялось смешение цветов, необходимо в функцию main вставить следующий код:

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);