Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2003
Тип роботи:
Звіт до лабораторної роботи
Предмет:
СП

Частина тексту файла (без зображень, графіків і формул):

 Тема: Мета: ТЕОРЕТИЧНІ ВІДОМОСТІ В даній лабораторній роботі, використовуючи графічні функції бібліотеки OpenGL, генерується досить складне зображення, яке є набором простих геометричних фігур, а саме – квадратів. Отже дана фігура складається з шести квадратів, кожен з яких є комбінацією квадратів які обертаються навколо центра і зменшуються таким чином щоб кожен наступний квадрат “входив” у попередній. Поворот квадрата здійснюється за такими правилами – малюється лінія яка зміщена по кожній з координатних осей на N-ну кількість пік селів. Наприклад – нижня лінія : один кінець зсунутий по осі Х на n-ну кількість пік селів, другий – по осі У. Розміри квадрата визначаються спеціальною функцією яка є підібраною для конкретного випадку. Текст програми program Bachinsky3; uses Messages, Windows, OpenGL; const AppName = 'Bachinsky-3'; Var dop:integer; Window : HWnd; Message : TMsg; WindowClass : TWndClass; dc : HDC; hrc : HGLRC; // контекст воспроизведения OpenGL MyPaint : TPaintStruct; centreX,centreY,LongLine,Coner: integer; //--------------my------------------ procedure Paint(CentreX,CentreY,LongLine,Coner:integer); var Delta,HalfLongLine, X1,X2,X3,X4,Y1,Y2,Y3,Y4:integer; begin while Coner>0 do Coner:=Coner-90; Coner:=Coner+90; Delta:=(LongLine*Coner div 90); HalfLongLine:=LongLine div 2; X1:=CentreX-HalfLongLine; Y1:=CentreY-HalfLongLine+Delta; X2:=X1+Delta; Y2:=CentreY+HalfLongLine; X3:=CentreX+HalfLongLine; Y3:=Y2-Delta; X4:=X3-Delta; Y4:=CentreY-HalfLongLine; // glClear (GL_COLOR_BUFFER_BIT); glEnable(GL_LINE_SMOOTH); glColor3f (0.9,0.2,1.0); glbegin(GL_LINES); glVertex2f(x1/100,y1/100); glVertex2f(x2/100,y2/100); glVertex2f(x2/100,y2/100); glVertex2f(x3/100,y3/100); glVertex2f(x3/100,y3/100); glVertex2f(x4/100,y4/100); glVertex2f(x4/100,y4/100); glVertex2f(x1/100,y1/100); glend; end; //---------------------------------- // Процедура заполнения полей структуры 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; // множество битовых флагов, определяющих устройство и интерфейс iPixelType := PFD_TYPE_RGBA; // режим для изображения цветов cColorBits := 16; // число битовых плоскостей в каждом буфере цвета cRedBits := 0; // число битовых плоскостей красного в каждом буфере RGBA cRedShift := 0; // смещение от начала числа битовых плоскостей красного в каждом буфере RGBA cGreenBits := 0; // число битовых плоскостей зелёного в каждом буфере RGBA cGreenShift := 0; // смещение от начала числа битовых плоскостей зелёного в каждом буфере RGBA cBlueBits := 0; // число битовых плоскостей синего в каждом буфере RGBA cBlueShift := 0; // смещение от начала числа битовых плоскостей синего в каждом буфере RGBA cAlphaBits := 0; // число битовых плоскостей альфа в каждом буфере RGBA cAlphaShift := 0; // смещение от начала числа битовых плоскостей альфа в каждом буфере RGBA cAccumBits := 0; // общее число битовых плоскостей в буфере аккумулятора cAccumRedBits := 0; // число битовых плоскостей красного в буфере аккумулятора cAccumGreenBits := 0; // число битовых плоскостей зелёного в буфере аккумулятора cAccumBlueBits := 0; // число битовых плоскостей синего в буфере аккумулятора cAccumAlphaBits := 0; // число битовых плоскостей альфа в буфере аккумулятора cDepthBits := 32; // размер буфера глубины (ось z) cStencilBits := 0; // размер буфера трафарета cAuxBuffers := 0; // число вспомогательных буферов iLayerType := PFD_MAIN_PLANE;// тип плоскости bReserved := 0; // число плоскостей переднего и заднего плана dwLayerMask := 0; // игнорируется dwVisibleMask := 0; // индекс или цвет прозрачности нижней плоскости dwDamageMask := 0; // игнорируется end; nPixelFormat := ChoosePixelFormat (hdc, @pfd); // запрос системе - поддерживается ли выбранный формат пикселей SetPixelFormat (hdc, nPixelFormat, @pfd); // устанавливаем формат пикселей в контексте устройства End; function WindowProc (Window : HWnd; Message, WParam : Word; LParam : LongInt) : LongInt; stdcall; var i,j,param,loop1,loop2:integer; k,koef:real; Begin WindowProc := 0; case Message of wm_Create: begin dc := GetDC (Window); SetDCPixelFormat (dc); // установить формат пикселей hrc := wglCreateContext (dc); // создаёт контекст воспроизведения OpenGL end; wm_Paint: begin BeginPaint (Window, MyPaint); wglMakeCurrent (dc, hrc); // устанавливает текущий контекст воспроизведения glClearColor (0.2,0.5, 0.5, 0.5); // определение цвета фона glClear (GL_COLOR_BUFFER_BIT); // установление цвета фона //-------------- centrex:=-50; for loop1:=1 to 2 do begin centrey:=-50; for loop2:=1 to 2 do begin coner:=65;longline:=100; i:=0;j:=1;k:=1.2; param:=4; while i<coner do begin k:=k*0.98; koef:=k/5*i; j:=round(koef); longline:=longline-j; paint(centrex,centrey,longline,i); i:=i+param; end; centrey:=centrey+100; end; centrex:=centrex+100; end; //-------------- {************************************************************************} wglMakeCurrent (dc, 0); // перед завершением работы необходимо, // чтобы контекст никем не использовался EndPaint (Window, MyPaint); end; wm_Destroy : begin wglDeleteContext (hrc); // удаление контекста воспроизведения PostQuitMessage (0); Exit; end; end; // case WindowProc := DefWindowProc (Window, Message, WParam, LParam); End; Begin With WindowClass do begin Style := cs_HRedraw or cs_VRedraw; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := 0; hCursor := LoadCursor (0, idc_Arrow); lpszClassName := AppName; end; RegisterClass (WindowClass); Window := CreateWindow (AppName, AppName, ws_OverLappedWindow or ws_ClipChildren or ws_ClipSiBlings, // обязательно для OpenGL cw_UseDefault, cw_UseDefault, cw_UseDefault, cw_UseDefault, HWND_DESKTOP, 0, HInstance, nil); ShowWindow (Window, CmdShow); UpdateWindow (Window); While GetMessage (Message, 0, 0, 0) do begin TranslateMessage (Message); DispatchMessage (Message); end; Halt (Message.wParam); end. Висновок: На лабораторній роботі я ознайомився з можливостями OpenGL. Виконав завдання попередньої лабораторної роботи з використанням цієї бібліотеки.
Антиботан аватар за замовчуванням

02.10.2020 20:10-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!