АкушерствоАнатомияАнестезиологияВакцинопрофилактикаВалеологияВетеринарияГигиенаЗаболеванияИммунологияКардиологияНеврологияНефрологияОнкологияОториноларингологияОфтальмологияПаразитологияПедиатрияПервая помощьПсихиатрияПульмонологияРеанимацияРевматологияСтоматологияТерапияТоксикологияТравматологияУрологияФармакологияФармацевтикаФизиотерапияФтизиатрияХирургияЭндокринологияЭпидемиология

Описание программы.

Прочитайте:
  1. I. Описание обоснования выбора ключевого мероприятия
  2. IV. Главной задачей историй культуры является морфологическое понимание и описание культур в ходе их особенной, действительной жизни
  3. Краткое описание дисциплины
  4. Общее описание
  5. Общее описание базовой станции и её механической конструкции
  6. Описание
  7. Описание
  8. Описание Бит действия флага ошибки
  9. Описание болезни
  10. Описание действия схемы электропривода санитарного насоса

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

Задание: Используя примитивы «точка», «линия», «треугольник», «четырехугольник» и «многоугольник» изобразить фигуру, указанную в варианте.

Описание программы.

Выполнив следующие шаги, вы создадите простейшее приложение, использующее OpenGL.

1. Создайте новый проект в Delphi.

2. В секцию Uses добавьте модуль OpenGL.

3. Опишите процедуру для установки формата пикселей:

//Процедура заполнения полей структуры PIXELFORMATDESCRIPTOR

procedure SetDCPixelFormat (hdc: HDC);

var

pfd: TPIXELFORMATDESCRIPTOR; // данные формата пикселей

nPixelFormat: Integer;

Begin

With pfd do begin

nSize:= sizeof (TPIXELFORMATDESCRIPTOR); // размер структуры

nVersion:= 1; // номер версии

dwFlags:= PFD_DRAW_TO_WINDOW OR PFD_SUPPORT_OPENGL OR PFD_DOUBLEBUFFER;

// множество битовых флагов, определяющих устройство и интерфейс

iPixelType:= PFD_TYPE_RGBA; // режим для изображения цветов

cColorBits:= 16; // число битовых плоскостей в каждом буфере цвета

cDepthBits:= 32; // размер буфера глубины (ось z)

iLayerType:= PFD_MAIN_PLANE;// тип плоскости

end;

 

nPixelFormat:= ChoosePixelFormat (hdc, @pfd); // запрос системе - поддерживается ли выбранный формат пикселей

SetPixelFormat (hdc, nPixelFormat, @pfd); // устанавливаем формат пикселей в контексте устройства

End;

Более подробно о структуре PIXELFORMATDESCRIPTOR и предназначении её полей можно узнать из справочной литературы или файла помощи Delphi.

4. В секции Private описания класса формы объявите свойство hrc: HGLRC;

В нем будет храниться указатель на контекст воспроизведения OpenGL.

5. Добавить обработчики для следующих событий:

Создание формы – OnCreate

Уничтожение формы – OnDestroy

Перерисовка формы – OnPaint

Изменение размеров формы – OnResize

Для добавления обработчика достаточно в окне Object Inspector среды Delphi переключиться на закладку Events и дважды кликнуть мышью на названии соответствующего события. В результате Delphi автоматически создатс нужный код и переместит указатель на тело процедуры, отвечающей за обработку выбранного события.

6. Заполнить обработчики следующим образом:

OnCreate – Поместить код для установки формата пикселей, создания и установки контекста воспроизведения OpenGL. Для установки формата пикселей воспользуемся описанной ранее процедурой SetDCPixelFormat, вызвав её с параметром Canvas.Handle. Создание контекста воспроизведения и сохранение указателя на него в hrc производится с помощью функции wglCreateContext, а установка созданного контекста – процедурой wglMakeCurrent. Таким образом в получим следующий код:

procedure TForm1.FormCreate(Sender: TObject);

begin

SetDCPixelFormat(Canvas.Handle);// устанавливаем формат пикселей

hrc:= wglCreateContext(Canvas.Handle);//создаём контекст воспроизведения

wglMakeCurrent(Canvas.Handle, hrc);//устанавливаем контекст воспроизведения

end;

OnDestroy – Здесь должен быть расположен код, освобождающий контекст воспроизведения OpenGL и удаляющий его.

procedure TForm1.FormDestroy(Sender: TObject);

begin

wglMakeCurrent(0, 0); // освобождаем контекст воспроизведения

wglDeleteContext (hrc); // удаление контекста OpenGL

end;

OnPaint – в этом обработчике фактически происходит создание и показ изображения. Шаблон, который следует использовать для этого обработчика, выглядит так:

BeginPaint(Self.Handle,ps);

 

{ЗДЕСЬ РАСПОЛАГАЮТСЯ КОМАНДЫ РИСОВАНИЯ OpenGL}

 

SwapBuffers(Canvas.Handle);

EndPaint(Self.Handle,ps);

Команды рисования, используемые для нанесения на поверхность формы изображения, будут рассмотрены далее.

OnResize – вызывается каждый раз, когда изменяется размер формы. Здесь должны быть предусмотрены действия для изменения параметров отображения. Код, который следует поместить в данный обработчик, с необходимыми комментариями:

glMatrixMode(GL_PROJECTION);//Текущей матрицей устанавливается матрица проекций

glLoadIdentity;//Замена текущей матрицы единичной

gluPerspective(30.0, Width/Height, 1.0, 15.0);//Определение усеченного конуса

//видимости в видовой системе координат. Первые 2 параметры задают углы

//видимости относительно осей х и у, а последние 2 параметра – ближнюю и дальнюю

//границы видимости

glViewport(0, 0, Width, Height);//Определение области видимости

glMatrixMode(GL_MODELVIEW);//Текущей матрицей устанавливается видовая матрица

InvalidateRect(Handle, nil, False);//Принудительная перерисовка формы

7. Скомпилировав и выполнив созданную программу получим форму, клиентская область которой закрашена черным цветом. Рассмотрим, каким образом можно "оживить" это изображение. Все приведённые ниже команды должны быть помещены внутри блока

BeginPaint(Self.Handle,ps);

 

{Здесь должны находиться команды рисования OpenGL}

 

SwapBuffers(Canvas.Handle);

EndPaint(Self.Handle,ps);

процедуры OnPaint.

Для установки цвета фона следует воспользоваться командами

glClearColor(1.0, 1.0, 1.0, 1.0); // определение цвета фона

glClear(GL_COLOR_BUFFER_BIT);// установка цвета фона

Параметрами команды glClearColor являются красная, зелёная и синяя составляющие цвета и параметр «альфа», отвечающий за прозрачность. Значения всех параметров должны находиться в диапазоне от 0.0 до 1.0.

Перед выполнением следующих команд рисования необходимо загрузить единичную матрицу командой glLoadIdentity и сместить текущий центр коордынат на 10 единиц по оси z командой glTranslatef вызвав её с параметрами(0.0, 0.0, -10.0)

Чтобы определить какого цвета будет создаваемая фигура (примитив), следует вызвать процедуру glColor, параметры которой аналогичны параметрам процедуры glClearColor, описанной выше.

Для создания изображения примитива используются следующие команды:

glBegin(mode);

glVertex2d(1, 1);

//указание вершин создаваемой фигуры

//...

glVertex2d(-1, 1);

glEnd;

Параметр mode определяет примитивы, которые будут созданы из вершин, расположенных между командами glBegin(mode) и glEnd;

Вот перечень значений, которые может принимать параметр mode:

GL_POINTS – каждая вершина рассматривается как отдельная точка, параметры которой не зависят от параметров остальных точек.

GL_LINES – Каждая пара вершин рассматривается как независимый отрезок.

GL_LINE_STRIP – вершины определяют ломаную линию с началом в первой вершине и концом в последней.

GL_LINE_LOOP – вершины определяют замкнутую ломаную линию. Отличие от предыдущей в том, что первая и последняя вершины соединены.

GL_TRIANGLES – Каждая тройка вершин рассматривается как независимый треугольник.

GL_TRIANGLE_STRIP – Рисуется группа связанных треугольников, имеющих общую грань.

GL_TRIANGLE_FAN - Рисуется группа связанных треугольников, имеющих общую грань. Первая точка является вершиной каждого треугольника.

GL_QUADS – Каждая группа из 4 вершин рассматривается как независимый четырехугольник.

GL_QUAD_STRIP – Рисуется группа связанных четырехугольников.

GL_POLYGON – рисуется отдельный выпуклый многоугольник.

Если указано количество вершин, недостаточное для создания заданного примитива, то он не рисуется.

Для управления размерами точек и толщиной линий используются процедуры glLineWidth() и glPointSize();

Для создания вершины используется команда glVertex[2,3,4][s,i,f,d], где цифра [2,3,4] обозначает количество параметров, а буква [s,i,f,d] – тип этих параметров.

2 параметра – по умолчанию z = 0, alpha = 1.

3 параметра – по умолчанию alpha = 1.

4 параметра – заданы все координаты

s - GLshort

i - GLint

f - GLfloat

d – GLdouble

С другими командами используются также префиксы b, ub, us, ui. С их значениями вы можете ознакоимиться в справочной системе Delphi.

 

Пример использования некоторых команд приведён ниже.

glColor(0.0,0.0,0.0,1.0);//устанавливаем цвет рисования – черный

glPointSize(10);//устанавливаем размер точки

glLineWidth(5.0);//устанавливаем ширину линии

 

glBegin(GL_POINTS);//Изображаем точку

glVertex2d(0.0, 0.0);

glEnd;

 

glBegin(GL_LINES);//Изображаем линию

glVertex2d(1.0, 1.0);

glVertex2d(2.0, -2.0);

glEnd;

 

glBegin(GL_TRIANGLES); //Изображаем треугольник

glVertex2d(-1.0, 1.0);

glVertex2d(-1.0, 2.0);

glVertex2d(-2.0, 1.5);

glEnd;

 

glBegin(GL_QUADS); //Изображаем четырехугольник

glVertex2d(-1.0, -1.0);

glVertex2d(-2.0, -2.0);

glVertex2d(-3.0, -1.0);

glVertex2d(-2.0, 0.0);

glEnd;

 

Варианты заданий:

1. 9.
2. 10.
3. 11.
4. 12.
5. 13.
6. 14.
7. 15.
8.  

 


Дата добавления: 2015-09-27 | Просмотры: 213 | Нарушение авторских прав







При использовании материала ссылка на сайт medlec.org обязательна! (0.01 сек.)