Subversion Repositories Kolibri OS

Rev

Rev 5269 | Rev 5380 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. use32
  2.         org 0x0
  3.         db 'MENUET01'
  4.         dd 0x1
  5.         dd start
  6.         dd i_end
  7.         dd mem,stacktop
  8.         dd 0,cur_dir_path
  9.  
  10. include '../../../../../../programs/proc32.inc'
  11. include '../../../../../../programs/macros.inc'
  12. include '../../../../../../programs/develop/libraries/box_lib/load_lib.mac'
  13. include '../../../../../../programs/dll.inc'
  14. include '../opengl_const.inc'
  15.  
  16. @use_library
  17.  
  18. align 4
  19. start:
  20.         load_library name_tgl, cur_dir_path, library_path, system_path, \
  21.                 err_message_found_lib, head_f_l, import_lib_tinygl, err_message_import, head_f_i
  22.         cmp eax,-1
  23.         jz button.exit
  24.  
  25.         mcall 40,0x27
  26.  
  27. stdcall [kosglMakeCurrent], 10,10,400,350,ctx1
  28. stdcall [glEnable], GL_DEPTH_TEST
  29. stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
  30. stdcall [gluNewQuadric]
  31. mov [qObj],eax
  32.  
  33. stdcall [glClearColor], 0.25,0.25,0.25,0.0
  34. stdcall [glShadeModel], GL_SMOOTH
  35.  
  36. call draw_3d
  37.  
  38. align 4
  39. red_win:
  40.         call draw_window
  41.  
  42. align 4
  43. still:
  44.         mcall 10
  45.         cmp al,1
  46.         jz red_win
  47.         cmp al,2
  48.         jz key
  49.         cmp al,3
  50.         jz button
  51.         jmp still
  52.  
  53. align 4
  54. draw_window:
  55.         pushad
  56.         mcall 12,1
  57.  
  58.         mov edx,0x33ffffff ;0x73ffffff
  59.         mcall 0,(50 shl 16)+430,(30 shl 16)+400,,,caption
  60.         stdcall [kosglSwapBuffers]
  61.  
  62.         mcall 12,2
  63.         popad
  64.         ret
  65.  
  66. align 4
  67. key:
  68.         mcall 2
  69.  
  70.         cmp ah,27 ;Esc
  71.         je button.exit
  72.  
  73.         cmp ah,61 ;+
  74.         jne @f
  75.             fld dword[scale]
  76.             fadd dword[delt_sc]
  77.             fstp dword[scale]
  78.             call draw_3d
  79.             stdcall [kosglSwapBuffers]
  80.         @@:
  81.         cmp ah,45 ;-
  82.         jne @f
  83.             fld dword[scale]
  84.             fsub dword[delt_sc]
  85.             fstp dword[scale]
  86.             call draw_3d
  87.             stdcall [kosglSwapBuffers]
  88.         @@:
  89.         cmp ah,178 ;Up
  90.         jne @f
  91.                 fld dword[angle_y]
  92.                 fadd dword[delt_size]
  93.                 fstp dword[angle_y]
  94.                 call draw_3d
  95.                 stdcall [kosglSwapBuffers]
  96.         @@:
  97.         cmp ah,177 ;Down
  98.         jne @f
  99.                 fld dword[angle_y]
  100.                 fsub dword[delt_size]
  101.                 fstp dword[angle_y]
  102.                 call draw_3d
  103.                 stdcall [kosglSwapBuffers]
  104.         @@:
  105.         cmp ah,176 ;Left
  106.         jne @f
  107.                 fld dword[angle_z]
  108.                 fadd dword[delt_size]
  109.                 fstp dword[angle_z]
  110.                 call draw_3d
  111.                 stdcall [kosglSwapBuffers]
  112.         @@:
  113.         cmp ah,179 ;Right
  114.         jne @f
  115.                 fld dword[angle_z]
  116.                 fsub dword[delt_size]
  117.                 fstp dword[angle_z]
  118.                 call draw_3d
  119.                 stdcall [kosglSwapBuffers]
  120.         @@:
  121.  
  122.         jmp still
  123.  
  124. align 4
  125. button:
  126.         mcall 17
  127.         cmp ah,1
  128.         jne still
  129. .exit:
  130.         stdcall [gluDeleteQuadric], [qObj]
  131.         mcall -1
  132.  
  133.  
  134. align 4
  135. caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
  136. align 4
  137. ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
  138. ;sizeof.TinyGLContext = 28
  139.  
  140. align 4
  141. draw_3d:
  142. stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
  143.  
  144. stdcall [glPushMatrix]
  145.         call SetLight
  146.  
  147.         stdcall [glTranslatef], 0.0,0.0,0.5
  148.         stdcall [glScalef], [scale], [scale], [scale]
  149.  
  150.         stdcall [glColor3f], 1.0, 1.0, 0.0
  151.         stdcall [glRotatef], [angle_z],0.0,0.0,1.0
  152.         stdcall [glRotatef], [angle_y],0.0,1.0,0.0
  153.         stdcall [gluSphere], [qObj], 1.0, 32,32
  154.  
  155.         stdcall [glColor3f], 1.0, 0.0, 0.0
  156.         stdcall [glTranslatef], -1.6,0.0,0.0
  157.         stdcall [gluSphere], [qObj], 0.55, 16,16
  158.  
  159.         stdcall [glColor3f], 0.0, 0.0, 1.0
  160.         stdcall [glTranslatef], 3.2,0.0,0.0
  161.         stdcall [gluSphere], [qObj], 0.55, 16,16
  162. stdcall [glPopMatrix]
  163. ret
  164.  
  165. align 4
  166. SetLight:
  167.     stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
  168.     stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
  169.  
  170.     stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
  171.     stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
  172.  
  173.         stdcall [glEnable], GL_COLOR_MATERIAL
  174.         stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
  175.         stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
  176.         stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
  177.     stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
  178.  
  179.         stdcall [glEnable],GL_LIGHTING
  180.         stdcall [glEnable],GL_LIGHT0
  181. ret
  182.  
  183. qObj dd 0
  184.  
  185. scale dd 0.4
  186. delt_sc dd 0.05
  187. angle_z dd 0.0
  188. angle_y dd 0.0
  189. delt_size dd 3.0
  190.  
  191. light_position dd 3.0, 2.0, -10.0, 1.0 ; Расположение источника [0][1][2]
  192.         ;[3] = (0.0 - бесконечно удаленный источник, 1.0 - источник света на определенном расстоянии)
  193. light_dir dd 0.0,0.0,0.0 ;направление лампы
  194. mat_specular dd 0.1, 0.1, 0.1, 1.0 ; Цвет блика
  195. mat_shininess dd 3.0 ; Размер блика (обратная пропорция)
  196. white_light dd 0.8, 0.8, 0.8, 1.0 ; Цвет и интенсивность освещения, генерируемого источником
  197. lmodel_ambient dd 0.2, 0.2, 0.2, 1.0 ; Параметры фонового освещения
  198.  
  199. ;--------------------------------------------------
  200. align 4
  201. import_lib_tinygl:
  202.  
  203. macro E_LIB n
  204. {
  205.         n dd sz_#n
  206. }
  207. include '../export.inc'
  208.         dd 0,0
  209. macro E_LIB n
  210. {
  211.         sz_#n db `n,0
  212. }
  213. include '../export.inc'
  214.  
  215. ;--------------------------------------------------
  216. system_path db '/sys/lib/'
  217. name_tgl db 'tinygl.obj',0
  218. err_message_found_lib db 'Sorry I cannot load library tinygl.obj',0
  219. head_f_i:
  220. head_f_l db 'System error',0
  221. err_message_import db 'Error on load import library tinygl.obj',0
  222. ;--------------------------------------------------
  223.  
  224. i_end:
  225.         rb 1024
  226. stacktop:
  227. cur_dir_path:
  228.         rb 4096
  229. library_path:
  230.         rb 4096
  231. mem:
  232.