Разработка программы создания виртуальной фотогалереи

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    132,33 Кб
  • Опубликовано:
    2012-06-06
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка программы создания виртуальной фотогалереи

Федеральное агентство по образованию

Рязанский Государственный Радиотехнический Университет

Кафедра ЭВМ





 

 

 

Пояснительная записка

к курсовой работе на тему

«Разработка программы создания виртуальной фотогалереи»

Выполнил

студент группы 541

Гудков Александр

Поверил

Чичикин В.А





Рязань 2008г.

Введение


В рамках курсовой работы средствами объектно-ориентированного языка Object Pascal и библиотеки OpenGL создано помещение фотогалереи и разработан алгоритм, осуществляющий перемещение по галереи. Пользователь с помощью клавиатуры и мыши перемещаться по ней и рассматривать фотографии. Предусмотрен режим просмотра фотогалереи.

1. Теоретическая часть


Курсовой проект       включает два этапа:

1. Разработка алгоритма перемещения по фотогалерее;

2.      Создание помещения галереи.

1.1 Разработка алгоритма перемещения по фотогалерее

Одна из возможностей осуществить перемещение по фотогалерее - это перемещать камеру и перерисовывать 3D среду относительно её положения. Это можно осуществить следующим образом:

·  Вращать и проецировать позицию камеры следуя командам пользователя;

·        Вращать мир вокруг начала координат противоположено вращению камеры (это даёт иллюзию того, что повернулась камера);

·        Переместить мир способом, противоположным перемещению камеры (это даёт иллюзию того, что переместилась камера)

Рис 1. Вращение координат

За исходное примем положение, в котором голова смотрит лицом по направлению оси Y, а вверх смотрит по направлению оси Z. Слева направо проходит ось X. Глядя в этом же направлении можно вращать голову вокруг оси Z.

Чтобы повернуть камеру вокруг оси Z применяется оператор вращения мира

(f, 0, 0, 1),

где f - угол, вращающий мир на -β

Чтобы переместиться вдоль осей X, Y применяется оператор

glTranslatef (tx, ty, 0),

где:= ty + sin(f*pi/180)/2;:= tx + cos(f*pi/180)/2;

или:= ty - sin(f*pi/180)/2;:= tx - cos(f*pi/180)/2;

В зависимости от направления движения:

Нажата стрелка «влево» (перемещение по оси X):

ty := ty - sin(f*pi/180)/2;:= tx + cos(f*pi/180)/2;

Нажата стрелка «вправо»::= ty + sin(f*pi/180)/2;

tx := tx - cos(f*pi/180)/2;

Нажата стрелка «вверх» (перемещение по оси Y):

ty := ty + sin((f+90)*pi/180)/2;:= tx - cos((f+90)*pi/180)/2;

Нажата стрелка «вниз»::= ty - sin((f+90)*pi/180)/2;

tx := tx + cos((f+90)*pi/180)/2;

Фотогалерея состоит из двух основных комнат, каждая из которых имеет размер 12×12.


Рис 2. Структура фотогалереи

2. Описание модуля Gallery.pas

.1 Общие сведения

Программная единица представляет собой статическую библиотеку, подключаемую к программе на этапе компиляции.

Наименование модуля Gallery.pas.

Модуль создан на языке Delphi в среде разработки Delphi 7.0

.2 Функциональное назначение

Создание и перемещение по виртуальной фотогалерее в соответствии с командами пользователя.

.3 Описание структуры модуля Gallery.pas.

Модуль содержит 13 процедур, реализующих создание галереи и перемещение по ней.

procedure TfrmGL.FormPaint(Sender: TObject)

Процедура обеспечивает установку параметров графических объектов и вывод на экран комнат фотогалереи, а также осуществление просмотра галереи в автоматическом режиме.


procedure TfrmGL.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

Процедура описывает реакцию программы при изменении положения мыши.


procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

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

procedure TfrmGL.FormCreate(Sender: TObject);

Процедура инициализирует переменные и создает ссылку на окно для OpenGL

procedure TfrmGL.FormDestroy(Sender: TObject);

Процедура удаляет все объекты OpenGl, высвобождая память

procedure TfrmGL.FormResize(Sender: TObject);

Процедура перерисовывает окно и создает перспективу

SetDCPixelFormat (hdc : HDC);

Процедура задает формат пикселей для работы c библиотекой OpenGl.

zal1;

Процедура производит рисование обстановки первой комнаты фотогалереи


zal2;

Процедура производит рисование обстановки второй комнаты фотогалереи.

Procedure zal0;

Процедура производит рисование обстановки третьей и четвертой комнаты фотогалереи. Порядок построения второй, третьей и четвертой комнат фотогалереи сходен с первой.

procedure BmpTexture(name:string; k:boolean);

Процедура производит чтение графического файла ‘name’, который используется в качестве текстуры в помещении фотогалереи.kartina;

Процедура производит рисование рамы для картины и загрузку изображения картины.

2.4 Вызов и использование модуля

Для использования процедур модуля необходимо на этапе компиляции подключить модуль к проекту, введя название модуля Gallery в список модулей, перечисленных в предложении uses. После этого можно обратиться к необходимой процедуре.

3. Описание применения программной единицы

Процедуры библиотеки Gallery.pas могут применяться при проектировании любых проектов в среде разработки Delphi , путем подключения модуля на этапе компиляции.

4. Список использованной литературы

1.   ЕСПД ГОСТы 19.101, 19.105, 19,401.

2.      M. B. Краснов OpenGL. Графика в проектах Delphi. М. 2000.

Текст программного модуля Gallery.pas

Gallery.pas;

, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,, ExtDlgs;= class(TForm): TOpenPictureDialog;FormCreate(Sender: TObject);FormPaint(Sender: TObject);FormDestroy(Sender: TObject);FormKeyDown(Sender: TObject; var Key: Word;: TShiftState);FormResize(Sender: TObject);FormMouseMove(Sender: TObject; Shift: TShiftState; X,: Integer);

: HDC;: HGLRC;,ty,tz,f,t : GLfloat;: GLUquadricObj;,zal,kadr:boolean;,wrky:Glint;,demonstr:boolean;, time1,FrameTime: GLInt;: GLint;

;

: TfrmGL;: (POINT, LINE, FILL, SILHOUETTE) = FILL;: (SPHERE, CONE, CYLINDER, DISK) = SPHERE;:array [0..3] of GlFloat;:array [0..2] of GlFloat=(0.5,0.5,0.5);,lookupdown :GlFloat;: TPoint;:GlFloat;:TBitmap;:boolean;,pict:byte;:0..18;

Unit3,Unit2;

{$R *.DFM}

{====================================================================

Процедура чтение графического файла, который используется в качестве текстуры}

procedure BmpTexture(name:string; k:boolean);

// массив образа, 64x64,j: Integer;:array [0..63,0..63,0..2] of Glbyte;:array [0..31,0..31,0..2] of Glbyte;:= TBitmap.Create;.LoadFromFile('image/'+name); // загрузка текстуры из файлаk theni := 0 to 63 doj := 0 to 63 do[i, j, 0] := GetRValue(Bitmap.Canvas.Pixels [i,j]);[i, j, 1] := GetGValue(Bitmap.Canvas.Pixels[i,j]);[i, j, 2] := GetBValue(bitmap.Canvas.Pixels[i,j]);;D(GL_TEXTURE_2D, 0, GL_RGBA,

64,64, // здесь задается размер текстуры

, GL_RGB, GL_UNSIGNED_BYTE, @Bits1);

endbegini := 0 to 31 doj := 0 to 31 do[i, j, 0] := GetRValue(Bitmap.Canvas.Pixels [i,j]);[i, j, 1] := GetGValue(Bitmap.Canvas.Pixels[i,j]);[i, j, 2] := GetBValue(bitmap.Canvas.Pixels[i,j]);;D(GL_TEXTURE_2D, 0, GL_RGBA,

31,31, // здесь задается размер текстуры

, GL_RGB, GL_UNSIGNED_BYTE, @Bits2);

end;(GL_TEXTURE_2D, GL_TEXTURE_Mag_FILTER, GL_LINEAR);(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

;

{==============================================================

Создание рамы для картин, а также вывода изображения картин}

Procedure rama;:byte;(form2.colpic[p]=true)i:=1 to 4 dof(0.72,0.31,0.05);f(0,1,0);(Gl_Quads);d (0.5,0); glVertex3f(0,0,0);d (0.5,2); glVertex3f(0,0,2);d (0, 2); glVertex3f(0.2,0.1,1.78);d (0, 0); glVertex3f(0.2,0.1,0.18);;f(0.491,0.25,0.1);(Gl_Quads);d (0.2, 0); glVertex3f(0.2,0.1,0.18);d (0.2, 2); glVertex3f(0.2,0.1,1.78);d (0, 2); glVertex3f(0.3,0.05,1.78);d (0, 0); glVertex3f(0.3,0.05,0.18);;getpictbegin.Visible:=true;.Enabled:=true;(p);(GL_TEXTURE_2D);;f(0.9,0.9,0.8);(Gl_Quads);d (0, 1);f(0.3,0.05,0.3);d (1, 1);f(0.3,0.05,1.7);d (1, 0);f(1.7,0.05,1.7);d (0, 0);f(1.7,0.05,0.3);;(GL_TEXTURE_2D);(2,0,0);(-90,0,1,0);;;

{=============================================================

Процедура создания 3 и 4 комнаты фотогалереи}

zal0;,k,j:integer;: GLUquadricObj;;:= gluNewQuadric;f (0.9, 0.9, 1); //стены(room>=3)begin(GL_QUADS);f(1, 0, 1); //левая стенаd (2.0, 0.0); glVertex3f (-12, 12.0, 0);d (2.0, 5.0); glVertex3f (-12.0, 12.0, 5);d (0.0, 5.0); glVertex3f (-12.0, 11.0, 5);d (0.0, 0.0); glVertex3f (-12.0, 11.0, 0);;

фотогалерея алгоритм просмотр графический

glBegin (GL_QUADS);f(1, 0, 1); //левая стенаd (4.0, 0.0); glVertex3f (-12, 11.0, 0);d (4.0, 1.0); glVertex3f (-12.0, 11.0, 1);d (0.0, 1.0); glVertex3f (-12.0, 7.0, 1);d (0.0, 0.0); glVertex3f (-12.0, 7.0, 0);;

(GL_QUADS);f(1, 0, 1); //левая стенаd (18.0, 0.0); glVertex3f (-12, 7.0, 0);d (18.0, 5.0); glVertex3f (-12.0, 7.0, 5);d (0.0, 5.0); glVertex3f (-12.0, -12.0, 5);d (0.0, 0.0); glVertex3f (-12.0, -12.0, 0);;

(GL_QUADS);f(0, -1, 1); // стенаf (-12, 11.0, 1);f (-12, 7.0, 1);f (-12.2, 7.0, 1);f (-12.2, 11.0, 1);;begin(GL_QUADS);f(1, 0, 1); //левая стенаd (24.0, 0.0); glVertex3f (-12, 12.0, 0);d (24.0, 5.0); glVertex3f (-12.0, 12.0, 5);d (0.0, 5.0); glVertex3f (-12.0, -12.0, 5);d (0.0, 0.0); glVertex3f (-12.0, -12.0, 0);;;

(GL_QUADS);f(0, 1, 1);//дальняяd (12.0, 0.0); glVertex3f (-12, -12.0, 0);d (12.0, 5.0); glVertex3f (-12, -12.0, 5);d (0.0, 5.0); glVertex3f (12, -12.0, 5);d (0.0, 0.0); glVertex3f (12, -12.0, 0);;

(GL_QUADS);f(0, -1, 1); //ближняяd (24.0, 0.0); glVertex3f (12, 12.0, 0);d (24.0, 5.0); glVertex3f (12.0, 12.0, 5);d (0.0, 5.0); glVertex3f (-12.0, 12.0, 5);d (0.0, 0.0); glVertex3f (-12.0, 12.0, 0);;

(GL_QUADS);f(-1, 0, 1); //правая стенаd (24.0, 0.0); glVertex3f (12, 12.0, 0);d (24.0, 5.0); glVertex3f (12.0, 12.0, 5);d (0.0, 5.0); glVertex3f (12.0, -12.0, 5);d (0.0, 0.0); glVertex3f (12.0, -12.0, 0);;('WOOD30.bmp',true);(GL_TEXTURE_2D);(0.0, 0.0, 5);

(GL_QUADS);(1,0,-1);d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);d (12.0, 12.0); glVertex3f (-12.2, 12.0, 0.0);d (0.0, 12.0); glVertex3f (-12.2, -12.0, 0.0);d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);;(GL_TEXTURE_2D);

(0.0, 0.0, -5);('w.bmp',true);(GL_TEXTURE_2D);(GL_QUADS);f(1,0,1);d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);d (12.0, 12.0); glVertex3f (-12.0, 12.0, 0.0);d (0.0, 12.0); glVertex3f (-12.0, -12.0, 0.0);d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);;(GL_TEXTURE_2D);

;;

(-1.5,-11.9,0.5);pict=1 then

//прорисовка рам для картин;

glScalef(1.5,1.5,1.5);:=9;;;(13.4,4,0.5);(90,0,0,1);:=12;j:=1 to 3 do(p);;(6,0,0);;(1.8,6.9,-0.5);(90,0,0,1);:=18;j:=1 to 2 do;(1.5,1.5,1.5);(p);;;(7,0,0);;(2.7,9,0.5);(90,0,0,1);:=13;j:=1 to 3do(p);;(4.5,0,0);

end;;;;

//Прорисовка ограничителей к картинам

glTranslatef (-12, 15, 1);k:=1 to 2 do(0, -4.0, 0.0);f (0.7, 0.7, 0.4);(quadObj, 0.4, 0.4, 4, 20, 1);i:=1 to 10 do;(0.4, 0.0, 0);(quadObj, 0.01, 0.01, 4, 5,1);;(36, 0.0, 0.0, 1.0);;;(quadObj, 0.8, 0.4, 0.4, 4, 1);;;(6, 0, 0);;;(11.5, -9.0, 3.5);j:=1 to 2 dof(0.7,0.3,0.1);(0,2,0);i:=1 to 4 do(quadObj, 0.07, 0.07,1.5, 6, 1);(quadObj, 0, 0.08, 10, 1);(0,5,0);;f(1,0,0);(GL_QUADS);f(1,1,0);f (0, -20.0, 0.0);f (0, -20.0, 0.2);f (0, -5, 0.2);f (0, -5, 0.0);;(-23, -25.5, 0.1);;;;(-7.5, 11.5, 3.5);k:=1 to 2 dof(0.7,0.3,0.1);i:=1 to 4 do(quadObj, 0.07, 0.07,1.5, 6, 1);(quadObj, 0, 0.08, 10, 1);(5,0,0);;f(1,0,0);(0, 0, 0.1);(GL_QUADS);f(1,1,0);f (-5, 0, 0.0);f (-5.0, 0, 0.2);f (-20.0, 0, 0.2);f (-20.0, 0, 0.0);;(-20, -47, -0.1);;;;(-4,-11.5,3.5);f(0.7,0.3,0.1);i:=1 to 3 do(quadObj, 0.07, 0.07,1.5, 6, 1);(quadObj, 0, 0.08, 10, 1);(4,0,0);;f(1,0,0);(0, 0, 0.1);(GL_QUADS);f(1,1,0);f (-4, 0, 0.0);f (-4.0, 0, 0.2);f (-12.0, 0, 0.2);f (-12.0, 0, 0.0);

glEnd;;;

{=============================================================

Процедура прорисовки первой комнаты}

Procedure zal1;,k,j:integer;: GLUquadricObj;;:= gluNewQuadric;f (0.9, 0.9, 1); //цвет стен('w.bmp',true);(GL_TEXTURE_2D);room>=4begin(GL_QUADS);f(1, 0, 1); //левая стенаd (19.0, 0.0); glVertex3f (-12, 12.0, 0);d (19.0, 5.0); glVertex3f (-12.0, 12.0, 5);d (0.0, 5.0); glVertex3f (-12.0, -7.0, 5);d (0.0, 0.0); glVertex3f (-12.0, -7.0, 0);;(GL_QUADS);f(1, 0, 1); //левая стенаd (4.0, 0.0); glVertex3f (-12, -7.0, 0);d (4.0, 1.0); glVertex3f (-12.0, -7.0, 1);d (0.0, 1.0); glVertex3f (-12.0, -11.0, 1);d (0.0, 0.0); glVertex3f (-12.0, -11.0, 0);;(GL_QUADS);f(1, 0, 1); //левая стенаd (1.0, 0.0); glVertex3f (-12, -11.0, 0);d (1.0, 5.0); glVertex3f (-12.0, -11.0, 5);d (0.0, 5.0); glVertex3f (-12.0, -12.0, 5);d (0.0, 0.0); glVertex3f (-12.0, -12.0, 0);;begin(GL_QUADS);f(1, 0, 1); //левая стенаd (24.0, 0.0); glVertex3f (-12, 12.0, 0);d (24.0, 5.0); glVertex3f (-12.0, 12.0, 5);d (0.0, 5.0); glVertex3f (-12.0, -12.0, 5);d (0.0, 0.0); glVertex3f (-12.0, -12.0, 0);;;(GL_QUADS);f(0, 1, 1);//дальняяd (3.0, 0.0); glVertex3f (-12, -12.0, 0);d (3.0, 5.0); glVertex3f (-12, -12.0, 5);d (0.0, 5.0); glVertex3f (-9.0, -12.0, 5);d (0.0, 0.0); glVertex3f (-9.0, -12.0, 0);;(GL_QUADS);f(0, 1, 1);d (4.0, 0.0); glVertex3f (-9, -12.0, 0);d (4.0, 1); glVertex3f (-9, -12.0, 1);d (0.0, 1); glVertex3f (-5, -12.0, 1);d (0.0, 0.0); glVertex3f (-5, -12.0, 0);;(GL_QUADS);f(0, 1, 1);//дальняяd (10, 0.0); glVertex3f (-5, -12.0, 0);d (10, 5.0); glVertex3f (-5, -12.0, 5);d (0.0, 5.0); glVertex3f (5.0, -12.0, 5);d (0.0, 0.0); glVertex3f (5.0, -12.0, 0);;

(GL_QUADS);f(0, 1, 1);d (4.0, 0.0); glVertex3f (5, -12.0, 0);d (4.0, 1); glVertex3f (5, -12.0, 1);d (0.0, 1); glVertex3f (9, -12.0, 1);d (0.0, 0.0); glVertex3f (9, -12.0, 0);;(GL_QUADS);f(0, 1, 1);//дальняяd (3.0, 0.0); glVertex3f (9, -12.0, 0);d (3.0, 5.0); glVertex3f (9.0, -12.0, 5);d (0.0, 5.0); glVertex3f (12.0, -12.0, 5);d (0.0, 0.0); glVertex3f (12.0, -12.0, 0);;(GL_QUADS);f(0, -1, 1); //ближняяd (24.0, 0.0); glVertex3f (12, 12.0, 0);d (24.0, 5.0); glVertex3f (12.0, 12.0, 5);d (0.0, 5.0); glVertex3f (-12.0, 12.0, 5);

glTexCoord2d (0.0, 0.0); glVertex3f (-12.0, 12.0, 0);;room>=3 //Прорисовка прохода в третью комнату , если она подключена

then begin(GL_QUADS);f(-1, 0, 1); //правая стенаd (1.0, 0.0); glVertex3f (12, 12.0, 0);d (1.0, 5.0); glVertex3f (12.0, 12.0, 5);d (0.0, 5.0); glVertex3f (12.0, 11.0, 5);d (0.0, 0.0); glVertex3f (12.0, 11.0, 0);;(GL_QUADS);f(-1, 0, 1); //левая стенаd (4.0, 0.0); glVertex3f (12, 11.0, 0);d (4.0, 1.0); glVertex3f (12.0, 11.0, 1);d (0.0, 1.0); glVertex3f (12.0, 7.0, 1);d (0.0, 0.0); glVertex3f (12.0, 7.0, 0);;(GL_QUADS);f(-1, 0, 1); //правая стенаd (19.0, 0.0); glVertex3f (12, 7.0, 0);d (19.0, 5.0); glVertex3f (12.0, 7.0, 5);d (0.0, 5.0); glVertex3f (12.0, -12.0, 5);d (0.0, 0.0); glVertex3f (12.0, -12.0, 0);;begin(GL_QUADS);f(-1, 0, 1); //правая стенаd (24.0, 0.0); glVertex3f (12, 12.0, 0);d (24.0, 5.0); glVertex3f (12.0, 12.0, 5);d (0.0, 5.0); glVertex3f (12.0, -12.0, 5);d (0.0, 0.0); glVertex3f (12.0, -12.0, 0);;;

//пол и потолок(0.0, 0.0, 5);(GL_QUADS);(1,0,-1);d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);d (12.0, 12.0); glVertex3f (-12.0, 12.0, 0.0);d (0.0, 12.0); glVertex3f (-12.0, -12.0, 0.0);d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);;(GL_TEXTURE_2D);

(0.0, 0.0, -5);('blue.bmp',true);(GL_TEXTURE_2D);(GL_QUADS);f(1,0,1);d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);d (12.0, 12.0); glVertex3f (-12.0, 12.0, 0.0);d (0.0, 12.0); glVertex3f (-12.0, -12.0, 0.0);d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);;(GL_TEXTURE_2D);

;;(-1.5,-11.9,0.5);pict=1 then

//рамы для картин;(1.5,1.5,1.5);

p:=9;;;(13.4,4,0.5);(90,0,0,1);:=12;j:=1 to 3 do(p);;(6,0,0);;(1.8,6.9,-0.5);(90,0,0,1);:=18;j:=1 to 2 do;(1.5,1.5,1.5);(p);;;(7,0,0);;(2.7,4.1,0.5);(90,0,0,1);:=13;j:=1 to 3do(p);;(6,0,0);

end;;

//Прорисовка ограничителей к картинам

;(11.5, -10.0, 3.5);k:=1 to 2 doj:=1 to 2 dof(0.7,0.3,0.1);i:=1 to 5 do(quadObj, 0.07, 0.07,1.5, 6, 1);

// glTranslatef (0, 0, -1);(quadObj, 0, 0.08, 10, 1);(0,4,0);;f(1,0,0);(GL_QUADS);f(1,1,0);f (0, -4.0, 0.0);f (0, -4.0, 0.2);f (0, -20, 0.2);f (0, -20, 0.0);;(0, -43, 0);;f(-1,1,0);(-23, 50, 0);;;;(-7.5, 11.5, 3.5);k:=1 to 2 dof(0.7,0.3,0.1);i:=1 to 4 do(quadObj, 0.07, 0.07,1.5, 6, 1);(quadObj, 0, 0.08, 10, 1);(5,0,0);;f(1,0,0);(0, 0, 0.1);(GL_QUADS);f(1,1,0);f (-5, 0, 0.0);f (-5.0, 0, 0.2);f (-20.0, 0, 0.2);f (-20.0, 0, 0.0);;(-18, -47, -0.1);;

;;(-4,-11.5,3.5);f(0.7,0.3,0.1);i:=1 to 3 do(quadObj, 0.07, 0.07,1.5, 6, 1);(quadObj, 0, 0.08, 10, 1);(4,0,0);;f(1,0,0);(0, 0, 0.1);(GL_QUADS);f(1,1,0);f (-4, 0, 0.0);f (-4.0, 0, 0.2);f (-12.0, 0, 0.2);f (-12.0, 0, 0.0);

glEnd;;;

{=============================================================

Процедура прорисовки первой комнаты}

Procedure zal2;,j:integer;: GLUquadricObj;:= gluNewQuadric;;f(0.9,0.9,0.8);(GL_QUADS);f(1, 0, 1); //левая стенаf (-12, 12.0, 0);f (-12.0, 12.0, 5);f (-12.0, -12.0, 5);f (-12.0, -12.0, 0);;

(GL_QUADS);f(0, 1, 1); //дальняя стенаf (12, -12.0, 0);f (12.0, -12.0, 5);f (-12.0, -12.0, 5);f (-12.0, -12.0, 0);;

(GL_QUADS);f(-1,0 , 1); // правая стенаf (12, 12.0, 0);f (12.0, 12.0, 5);f (12.0, -12.0, 5);f (12.0, -12.0, 0);;

(GL_QUADS);f(0, -1, 1);//ближняяf (-12, 11.8, 0);f (-12, 11.8, 5);f (-9.0, 11.8, 5);f (-9.0, 11.8, 0);;(GL_QUADS);f(0, -1, 1);f (-9, 11.8, 0);f (-9, 11.8, 1);f (-5, 11.8, 1);f (-5, 11.8, 0);;(GL_QUADS);f(1, 0, 1);f (-9, 11.8, 1);f (-9, 12, 1);f (-5, 12, 1);f (-5, 11.8, 1);;(GL_QUADS);f(0, -1, 1);//ближняяf (-5, 11.8, 0);f (-5, 11.8, 5);f (5.0, 11.8, 5);f (5.0, 11.8, 0);;(GL_QUADS);f(0, -1, 1);f (5, 11.8, 0);f (5, 11.8, 1);f (9, 11.8, 1);f (9, 11.8, 0);;(GL_QUADS);f(1, 0, 1);f (5, 11.8, 1);f (5, 12, 1);f (9, 12, 1);f (9, 11.8, 1);;(GL_QUADS);f(0, -1, 1);//ближняяf (9, 11.8, 0);f (9.0, 11.8, 5);f (12.0, 11.8, 5);f (12.0, 11.8, 0);;(GL_QUADS);f(0, -1, 1); // стенаf (-0.25, -4.0, 0);f (-0.25, -4.0, 5);f (0.25, -4.0, 5);f (0.25, -4.0, 0);;

;(-0.75,0,0);f(-1,0 , 1); // перегородка правая стенаi:=1 to 2 do(0.5,0,0);(GL_QUADS);f (0, 12.0, 0);f (0, 12.0, 5);f (0, -4.0, 5);f (0, -4.0, 0);;f(1,0 , 1); // перегородка левая стена;;('Roof.bmp',true);(GL_TEXTURE_2D);

(GL_QUADS); //пол и потолокf(0,0 , 1);d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);d (12.0, 12.0); glVertex3f (-12.0, 12.0, 0.0);d (0.0, 12.0); glVertex3f (-12.0, -12.0, 0.0);d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);;(GL_TEXTURE_2D);

(0.0, 0.0, 5);('паркет.bmp',true);f(1,1,1);(GL_TEXTURE_2D);(0,0,1);

glBegin (GL_QUADS); //пол и потолок

glTexCoord2d (12.0, 0.0); glVertex3f (12, 12.0, 0.0);d (12.0, 12.0); glVertex3f (-12.0, 12.0, 0.0);d (0.0, 12.0); glVertex3f (-12.0, -12.0, 0.0);d (0.0, 0.0); glVertex3f (12.0, -12.0, 0.0);;(GL_COLOR_Material);(GL_TEXTURE_2D);(0.0, 0.0, 5);;;pict=2 then(-5,-11.8,0.5);:=0;j:=1 to 2 do //рамы для картин;(1.5,1.5,1.5);(p);;;(7,0,0);;(2.9,4,0.5);(90,0,0,1);:=2;j:=1 to 3 do(p);;(6,0,0);;(1.8,6,0);(90,0,0,1);(17.7,4.1,0);(90,0,0,1);:=9;j:=1 to 3 do(p);;(6,0,0);;

end;

//Прорисовка ограничителей к картинам;

glPushMatrix;(0.8,0,3.5);j:=1 to 2 doi:=1 to 3 dof(0.7,0.3,0.1);(quadObj, 0.07, 0.07,1.5, 6, 1);(quadObj, 0, 0.08, 10, 1);(0,4.5,0);;f(1,0,0);(0, -4.5, 0.1);(GL_QUADS);f (0, 0, 0.0);f (0, 0, 0.2);f (0, -9, 0.2);f (0, -9, 0.0);;(-1.6,-9,-0.1);;;(-7.3, -11.9, 1);;

{=======================================================================

Перерисовка окна}TfrmGL.FormPaint(Sender: TObject);

[0]:=0; //Установка[1]:=3; //положения[2]:=4; //источников[3]:=12; //света

(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);// очистка буфера цвета(GL_LIGHT0,GL_PosiTion, @position1); //Загрузка источников света(GL_FRONT, GL_SPECULAR, @Position); //установка свойств материалаLock //Проверка блокировки указателяSetCursorPos(wrkX,wrkY);

not modeglPolygonMode(GL_FRONT_AND_BACK,GL_LINE) //Установка стиля рисования линиямиglPolygonMode(GL_FRONT_AND_BACK,GL_FILL); //Установка стиля рисования с заполнением

glPushMatrix; //Сохранение исходного состояния матрицы(f, 0, 0, 1); //поворот "мира" на угол f(tx, ty, tz); //Перемещение по галереи

;; // вызов процедуры рисования первой комнаты;

;(0,-24,0);; //вызов процедуры рисования второй комнаты

glPopMatrix;

room>=3 then(24.2,0,0);

glPushMatrix;; //вызов процедуры рисования третьей комнаты

glPopMatrix;;

room>=4 then(-48.4,0,0);(180,0,0,1);;; //вызов процедуры рисования четвертой комнаты;;;demonstr//Запуск режима демонстрации:= count+1;:=0;:=0;count of

:begin:=0;:=1;;

..61:f:=f+6;

..78:ty:=(count-62)*0.5;

..92:begin:=8;:=tx+(count-78)*0.5;:=f+6;;

..133:begin:=-(count-93)*0.4+8;:=7;;

..150:begin:=-8;:=7;:=f+6;

..177:begin:=-7.5;:=-(count-151)*0.5+7;;

..193:begin:=-7.5;:=-6;:=f+6;;

..223:begin:=(count-193)*0.5-7.5;:=-6.5;;

..229:begin:=-6.5;:=7.5;:=f+6;;

..236:begin:=2;:=-6.5;:=7.5;:=f+6;;

..256:begin:=2;:=-6.5;:=(count-236)*0.5+7.5;;

..265:begin:=-6.5;:=14.5;:=f-6;;

..296:begin:=(count-265)*0.5+14.5;:=-6.5;;

..307:begin:=-6.5;:=29.5;:=f+6;;

..332:begin:=(count-308)*0.5-6.5;:=29.5;;

..345:begin:=6.5;:=29.5;:=f+6;;

..374:begin:=-(count-346)*0.5+29.5;:=6.5;;

..380:begin:=6.5;:=15.5;:=f+6;;

..406:begin:=1;:=6.5;:=15.5;:=f+6;;

..420:begin:=2;:=6.5;:=15.5;:=f+6;;

begin:=0;:=-10;:=0;:=false;:=1;;;

kadr

then begin //Запуск режима отображения времени построения 1 кадра

time0:= GetTickCount;:=time0 - time1;:=time0;.Caption :=inttostr(count)+'кадр 3а '+ inttostr(Frametime)+'мс ';.Caption :='Gallery ';(DC);;

{=======================================================================

Формат пикселя}SetDCPixelFormat (hdc : HDC);: TPixelFormatDescriptor;: Integer;(pfd, SizeOf (pfd), 0);.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;:= ChoosePixelFormat (hdc, @pfd);(hdc, nPixelFormat, @pfd);;

{=======================================================================

Создание формы}TfrmGL.FormCreate(Sender: TObject);:=2;:= GetDC (Handle);(DC);:= wglCreateContext(DC);(DC, hrc);(1, 1, 0.9, 1.0); // цвет фона(1.5);(GL_LIGHTING);(GL_LIGHT0);(GL_DEPTH_TEST);(GL_COLOR_MATERIAL);:= gluNewQuadric;:=0;:=-10;:=-2;:=false;:=1;:=true;:=1;:=false;:=true;.prosmotr:=false;:=true;:=0;:=0;:=0;(false);:=Left+round(Width/2);:=Top+round(Height/2);(wrkx,wrky);;

{=======================================================================

Конец работы приложения}TfrmGL.FormDestroy(Sender: TObject);

(quadObj);(0, 0);(hrc);(Handle, DC);(DC);

;showimage(number:byte);.Visible:=true;.Image1.Center:=true;.Image1.AutoSize:=true;fileexists (form2.nameimage[number]) then.Image1.Picture.LoadFromFile(form2.nameimage[number]);.deleteimage.Enabled:=true;.rotate90.Enabled:=true;.Rotate180.Enabled:=true;.Image1.Picture:=nil;.rotate90.Enabled:=false;.Rotate180.Enabled:=false;.deleteimage.Enabled:=false;;

.Height:=Form3.Image1.Height+60;.Width:=Form3.Image1.Width+35;.Visible:=false;(true);.hide;(true);

{==============================================================

Процедура реакции программы на нажатие пользователем клавиш управления}

procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word;: TShiftState);,ty0:Glfloat;:byte;

Key = VK_ESCAPE then(true);.Visible:=true;.DirectoryListBox1.Directory:=form2.directory+'/download';.FilterComboBox1.Filelist.Mask:='*.bmp';kolfile:=1 to 17 dofileexists(form2.directory+'/download/fotogallery'+inttostr(kolfile)+'.bmp') thendeletefile(form2.directory+'/download/fotogallery'+inttostr(kolfile)+'.bmp') then.FileListBox1.DeleteSelected;.colpic[kolfile]:=false;;.DirectoryListBox1.Directory:=form2.directory;.FilterComboBox1.Filelist.Mask:=form2.mask;.close;;Key=VK_Return(ty<-6) and (ty>-12) and (tx>0) and (tx<8)begin form3.number:=16; showimage(form3.number); end;(ty>-9) and (ty<-3) and (tx>3) and (tx<12)begin form3.number:=12; showimage(form3.number); end;(ty>-3) and (ty<4) and (tx>3) and (tx<12)begin form3.number:=11; showimage(form3.number); end;(ty>4) and (ty<12) and (tx>3) and (tx<12)begin form3.number:=10; showimage(form3.number); end;(ty<-6) and (ty>-12) and (tx>-8) and (tx<0)begin form3.number:=17; showimage(form3.number); end;(ty>-9) and (ty<-3) and (tx>-12) and (tx<-3)begin form3.number:=15; showimage(form3.number); end;(ty>-3) and (ty<4) and (tx>-12) and (tx<-3)begin form3.number:=14; showimage(form3.number); end;(ty>4) and (ty<12) and (tx>-12) and (tx<-3)begin form3.number:=13; showimage(form3.number); end;(ty>2) and (ty<12) and (tx>-6) and (tx<6)begin form3.number:=9; showimage(form3.number); end;(ty>12) and (ty<20) and (tx>1) and (tx<12)begin form3.number:=8; showimage(form3.number); end;(ty>20) and (ty<28) and (tx>1) and (tx<12)begin form3.number:=7; showimage(form3.number); end;(ty>28) and (ty<36) and (tx>1) and (tx<12)begin form3.number:=6; showimage(form3.number); end;(ty>12) and (ty<20) and (tx>-11) and (tx<-1)begin form3.number:=5; showimage(form3.number); end;(ty>20) and (ty<28) and (tx>-11) and (tx<-1)begin form3.number:=4; showimage(form3.number); end;(ty>28) and (ty<35) and (tx>-11) and (tx<-1)begin form3.number:=3; showimage(form3.number); end;(ty>30) and (ty<35) and (tx>0) and (tx<8)begin form3.number:=1; showimage(form3.number); end;(ty>30) and (ty<35) and (tx>-8) and (tx<0)begin form3.number:=2; showimage(form3.number); end;;Key=VK_F1begin:=false;.HelpFile:='Help\Help.hlp';.HelpCommand(HELP_FINDER,0);;Key=VK_F2beginlockShowCursor(true)ShowCursor(false);:=not lock;;

Key=VK_F3begin:=not demonstr;:=1;;Key = VK_F4kadr:=not kadr;

room=2(tx<=-11) and (tx>=-12):=-11;begin

(tx<=-11)and (tx>=-12)and (((ty>-12) and (ty<-10.5))or((ty>-6.5) and (ty<36))):=-11;(tx>=-13)and (tx<=-12)and(((ty>-12) and (ty<-10.5))or((ty>-6.5) and (ty<36))):=-13;;

room>=4begin(tx>=11)and (tx<=12)and (((ty>-12) and (ty<6.5))or((ty>10.5) and (ty<36))):=11;(tx<=13)and (tx>=12)and(((ty>-12) and (ty<6.5))or((ty>10.5) and (ty<36))):=13;if tx>=11tx:=11;

(ty<=-11)ty:=-11;(ty>=35)ty:=35;(ty>11.4) and (ty<12.4) and ((tx>8) or (tx<-8) or ((tx<5) and (tx>-5)))begin:=ty0;;(ty>12) and (ty<28.4) and (tx>-0.8) and (tx<0.8):=tx0;(tx>-0.8) and (tx<0.8) and (ty<28.4) and (ty>27):=ty0;

(ty<12)// and (tx<12) and (tx>-12)pict:=1begin

{if tx<-12pict:=1 ;tx>12pict:=1}pict:=2;;

(Handle, nil, False);;

{======================================================================

Процедура перерисовки галереи}TfrmGL.FormResize(Sender: TObject);(0, 0, ClientWidth, ClientHeight);(GL_PROJECTION);;(50, Width/Height, 0.1, 48.2);(GL_MODELVIEW);;(90.0, 1.0, 0.0, 0.0); // поворот объекта - ось Y(Handle, nil, False);;

{====================================================================

Процедура реакции программы на перемещене мыши}

procedure TfrmGL.FormMouseMove(Sender: TObject; Shift: TShiftState; X,: Integer);Lock(mpos);not demonstrbegin:=f-(mpos.x-(wrkX))/8;:=t+(mpos.y-(wrkY))/8;;(Handle,nil,False);

end


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!