Міністерство освіти і науки, молоді та спорту України
Національний університет «Львівська політехніка»
Кафедра АСУ
Звіт
З розрахункової роботи
з дисципліни:
Операційні системи
Львів 2013
Код програми:
format PE GUI 4.0
entry start
include '..\include\win32a.inc'
include '..\include\opengl_const.inc'
include '..\include\opengl_macros.inc'
start:
xor ebx,ebx
invoke ShowCursor,ebx
push ebx
push ebx
push ebx
push ebx
invoke GetSystemMetrics,SM_CYSCREEN
push eax
invoke GetSystemMetrics,ebx
push eax
fild dword [esp]
fidiv dword [esp+4]
fstp [ratio]
invoke CreateWindowEx,WS_EX_TOPMOST,szClass,szTitle,WS_VISIBLE+WS_POPUP,ebx,ebx
invoke GetDC,eax
xchg ebp,eax
mov [pfd.dwFlags],PFD_DRAW_TO_WINDOW+PFD_SUPPORT_OPENGL+PFD_DOUBLEBUFFER
mov [pfd.iPixelType],PFD_TYPE_RGBA
mov [pfd.cColorBits],32
mov [pfd.dwLayerMask],PFD_MAIN_PLANE
invoke ChoosePixelFormat,ebp,pfd
invoke SetPixelFormat,ebp,eax,pfd
invoke wglCreateContext,ebp
invoke wglMakeCurrent,ebp,eax
invoke glEnable,GL_DEPTH_TEST
invoke glEnable,GL_LIGHT0
invoke glEnable,GL_LIGHTING
invoke glFogi,GL_FOG_MODE,GL_EXP2
invoke glFogfv,GL_FOG_COLOR,fogColor
invoke glFogf,GL_FOG_DENSITY,0.50
invoke glFogf,GL_FOG_START,1.0
invoke glFogf,GL_FOG_END,3.0
invoke glHint,GL_FOG_HINT,GL_NICEST
invoke glClearColor,0.5,0.5,0.5,1.0
;включим туман
invoke glEnable,GL_FOG
invoke glEnable,GL_COLOR_MATERIAL
invoke glHint,GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST
invoke glMatrixMode,GL_PROJECTION
glcall gluPerspective,90.0,ratio,0.1,100.0
invoke glMatrixMode,GL_MODELVIEW
.draw:
invoke GetTickCount
cmp eax,[msec]
jz .draw
mov [msec],eax
invoke glClear,GL_COLOR_BUFFER_BIT+GL_DEPTH_BUFFER_BIT
invoke glLoadIdentity
invoke glTranslatef,ebx,ebx,-4.5
;====================== Прописка під клавіатуру ===================
invoke GetAsyncKeyState,VK_UP
test eax,eax
jz .UP
invoke glRotatef,[theta],1.0,ebx,ebx
.UP:
invoke GetAsyncKeyState,VK_DOWN
test eax,eax
jz .DOWN
invoke glRotatef,[theta],ebx,1.0,1.0
.DOWN:
invoke GetAsyncKeyState,VK_SPACE
test eax,eax
jz .SPACE
invoke glRotatef,[theta],ebx,ebx,1.0
.SPACE:
invoke glTranslatef,1.0,-1.0,-1.0;центруем обєкт відносно осі z
;==================================================================
;початок малювання
invoke glBegin,GL_QUADS
;нормаль 1-го чотирикутника
invoke glNormal3f,ebx,1.0,ebx
invoke glColor3f,1.0,ebx,ebx
invoke glVertex3f,-1.0,-1.0,1.0
invoke glColor3f,ebx,0.4,ebx
invoke glVertex3f,1.0,-1.0,1.0
invoke glColor3f,ebx,ebx,0.2
invoke glVertex3f,1.0,1.0,1.0
invoke glColor3f,1.0,1.0,ebx
invoke glVertex3f,-1.0,1.0,1.0
;нормаль 2-го чотирикутника
invoke glNormal3f,ebx,ebx,-1.0
invoke glColor3f,ebx,ebx,1.0
invoke glVertex3f,-1.0,-1.0,-1.0
invoke glColor3f,ebx,0.1,ebx
invoke glVertex3f,-1.0,1.0,-1.0
invoke glColor3f,1.0,ebx,ebx
invoke glVertex3f,1.0,1.0,-1.0
invoke glColor3f,1.0,1.0,ebx
invoke glVertex3f,1.0,-1.0,-1.0
;нормаль 3-го чотирикутника
invoke glNormal3f,ebx,1.0,ebx
invoke glColor3f,ebx,1.0,ebx
invoke glVertex3f,-1.0,1.0,-1.0
invoke glColor3f,1.0,1.0,ebx
invoke glVertex3f,-1.0,1.0,1.0
invoke glColor3f,ebx,ebx,1.0
invoke glVertex3f,1.0,1.0,1.0
invoke glColor3f,1.0,ebx,ebx
invoke glVertex3f,1.0,1.0,-1.0
;нормаль 4-го чотирикутника
invoke glNormal3f,ebx,-1.0,ebx
invoke glColor3f,ebx,ebx,1.0
invoke glVertex3f,-1.0,-1.0,-1.0
invoke glColor3f,1.0,1.0,ebx
invoke glVertex3f,1.0,-1.0,-1.0
invoke glColor3f,ebx,1.0,ebx
invoke glVertex3f,1.0,-1.0,1.0
invoke glColor3f,1.0,ebx,ebx
invoke glVertex3f,-1.0,-1.0,1.0
;нормаль 5-го чотирикутника
invoke glNormal3f,1.0,ebx,ebx
invoke glColor3f,1.0,1.0,ebx
invoke glVertex3f,1.0,-1.0,-1.0
invoke glColor3f,1.0,ebx,ebx
invoke glVertex3f,1.0,1.0,-1.0
invoke glColor3f,ebx,ebx,1.0
invoke glVertex3f,1.0,1.0,1.0
invoke glColor3f,ebx,1.0,ebx
invoke glVertex3f,1.0,-1.0,1.0
;нормаль 6-го чотирикутника
invoke glNormal3f,-1.0,ebx,ebx
invoke glColor3f,ebx,ebx,1.0
invoke glVertex3f,-1.0,-1.0,-1.0
invoke glColor3f,1.0,ebx,ebx
invoke glVertex3f,-1.0,-1.0,1.0
invoke glColor3f,1.0,1.0,ebx
invoke glVertex3f,-1.0,1.0,1.0
invoke glColor3f,ebx,0.3,ebx
invoke glVertex3f,-1.0,1.0,-1.0
;кінець малюванняа
invoke glEnd
invoke wglGetCurrentDC
push eax
invoke SetTextColor, eax,0ffffh
pop eax
invoke TextOutA,eax,20,20,out_buf,10
invoke SwapBuffers,ebp
invoke wglGetCurrentDC
push eax
invoke SetTextColor, eax,0ffffh
pop eax
invoke TextOutA,eax,20,20,out_buf,10
fld [theta]
fadd [delta]
fstp [theta]
invoke GetAsyncKeyState,VK_ESCAPE
test eax,eax
jz .draw
invoke ExitProcess,ebx
delta dd 1.3
fogColor dd 0.5,0.5,0.5,1.0
szTitle db 'Розрахункова робота',0
out_buf db 'Гедз Софія',0
szClass db 'edit',0
data import
include '..\include\imports.inc'
end data
data resource
end data
msec dd ?
theta dd ?
ratio dq ?
pfd PIXELFORMATDESCRIPTOR
/
/
Висновок: під час виконання розрахункової роботи я навчилася працювати з OpenGL на мові Assembler .