From 2edaae3ebe98798aebf4c2d4b57516488f6b05b5 Mon Sep 17 00:00:00 2001 From: IgorA Date: Mon, 7 Dec 2015 18:47:28 +0000 Subject: [PATCH] update voxel tinygl viewer, use mouse to rotate model git-svn-id: svn://kolibrios.org@5949 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/media/voxel_editor/docs/vox_tgl.htm | 79 ++++++++++ .../media/voxel_editor/docs/vox_tgl/about.png | Bin 0 -> 60024 bytes .../media/voxel_editor/utilites/vox_tgl.asm | 140 ++++++++++++++---- 3 files changed, 192 insertions(+), 27 deletions(-) create mode 100644 programs/media/voxel_editor/docs/vox_tgl.htm create mode 100644 programs/media/voxel_editor/docs/vox_tgl/about.png diff --git a/programs/media/voxel_editor/docs/vox_tgl.htm b/programs/media/voxel_editor/docs/vox_tgl.htm new file mode 100644 index 000000000..ac1e8da3d --- /dev/null +++ b/programs/media/voxel_editor/docs/vox_tgl.htm @@ -0,0 +1,79 @@ + + +╬уыртыхэшх + + + + + +

┬ёяюьюурЄхы№эр  яЁюуЁрььр фы  ЁхфръЄюЁр тюъёхы№эющ уЁрЇшъш тхЁёш  юЄ 07.12.2015

+

╬уыртыхэшх

+ + +

╬ яЁюуЁрььх

+

╧ЁюуЁрььр фы  яЁюёьюЄЁр 3-ї ьхЁэющ тюъёхы№эющ уЁрЇшъш ё шёяюы№чютрэшхь сшсышюЄхъш tinygl.

+

+

┬эх°эшщ тшф яЁюуЁрьь√.

+

─ы  яЁюёьюЄЁр 3-ї ьхЁэюую юс·хъЄр эхюсїюфшью юЄъЁ√Є№ тюъёхы№эюх шчюсЁрцхэшх шч Їрщыр ё Ёрё°шЁхэшхь *.vox. ▌Єш шчюсЁрцхэш  ьюцэю ёючфртрЄ№ т яЁюуЁрььх тюъёхы№эюую ЁхфръЄюЁр, эю юэ яючтюы хЄ ЁрёёьрЄЁштрЄ№ ёючфрээє■ ьюфхы№ Єюы№ъю яюф ЇшъёшЁютрээ√ьш єуырьш. ╤ яюью∙№■ фрээющ єЄшышЄ√ ьюцэю тшфхЄ№ тюъёхы№э√щ юс·хъЄ яюф Ёрчэ√ьш єуырьш юсчюЁр.

+ +

╨рсюЄр ё яЁюуЁрььющ

+

┬ юъэх яЁюуЁрьь√ хёЄ№ ярэхы№ шэёЄЁєьхэЄют, юъэю фы  яЁюёьюЄЁр юс·хъЄр тюъёхы№эющ уЁрЇшъш ш юъэю фы  яюърчр 8-ьш єьхэ№°хээ√ї ърфЁют юс·хъЄр яюф ЇшъёшЁютрээ√ьш єуырьш. ─ы  яЁюёьюЄЁр юс·хъЄр т уыртэюь юъэх яюф Ёрчэ√ьш єуырьш ьюцэю эрцшьрЄ№ ъєЁёюЁ√ эр ъыртшрЄєЁх шыш цх эрцшьрЄ№ ш тюфшЄ№ ъєЁёюЁюь ь√°ш яю юъэє ё 3-ї ьхЁэющ уЁрЇшъющ. ═р ярэхыш шэёЄЁєьхэЄют ьюцэю ьхэ Є№ Ёхцшь√ юсчюЁр ьюфхыш, ёьюЄЁхЄ№ ёЄрЄшёЄшъє яю ьюфхыш ш юсэюты Є№ юъэю ё ьшэшрЄ■Ёрьш.

+ +

╬яшёрэшх ярэхыш шэёЄЁєьхэЄют

+

- ёючфрэшх эютюую Їрщыр.

+

- юЄъЁ√Єшх Їрщыют.

+

- ёюїЁрэхэшх Їрщыют. ─рээр  яЁюуЁрььр эх ЁхфръЄшЁєхЄ ёрьє ьюфхы№, хфшэёЄтхээюх ўЄю юэр ьюцхЄ ьхэ Є№ ¤Єю єЁютхэ№ фхЄрышчрЎшш ьюфхыш ъюЄюЁ√щ сєфхЄ шёяюы№чютрЄ№ё  яЁш юЄъЁ√Єшш ьюфхыш. ╧юЄюьє ¤Єр ъюьрэфр Ёхфъю шёяюы№чєхЄё .

+ +

└тЄюЁ

+

╚уюЁ№ └. (IgorA) - ЁрчЁрсюЄър яЁюуЁрьь√.

+

╦шЎхэчш  ётюсюфэр .

+ + + \ No newline at end of file diff --git a/programs/media/voxel_editor/docs/vox_tgl/about.png b/programs/media/voxel_editor/docs/vox_tgl/about.png new file mode 100644 index 0000000000000000000000000000000000000000..9dbbc704aa29fa177e9100deaf5a9a2d5765af22 GIT binary patch literal 60024 zcmaHT1yq#X_P2$KN=QmeiycZF;mDfqQ41Bm}^j7Naty|Eb$0xc-z-Q!-qN+BxZlTs){Jq^|nV}E-@|mrW zimkk*p{>2HwZW~Ay2ci^3>F5q&si8=F|eHkfTnKUT3!}=_g3MP7GeTPMPcOl*XH@& z*|_Eq3b;;Fd1#H{{Tu5gR5|El5Q@S(g*Wd~D=S0Lu^&S*A6H^>-x5+FJX`E^!SiWz z_eWZSB`vx*dryCSyR&w*2Bj_@ zO{NNPIl?lg+gny$mv$yvu~K;gws1O9R#M`t`4}_)T+kwzy#=L{Y4auu`DK4e-cnW{}2W$v5$P;^zc;rmBkezw@aDB;z=mBtu zN$fBMSxsS=oumDDBiTGfVsM6!`?P*1qlTL6G)5-vm+|M8h5I)A?{=uhRDwwO4Qu`Y z2L=*{*5{Gd6dEgTr%`n&;T<{JFpfzb# zp|8#dO>9ckacAi%ENB4?Lh_VfOtyR&(+l!41BDPEc;gLbrdbBxjEoZan~jBzPzYCv z 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 literal 0 HcmV?d00001 diff --git a/programs/media/voxel_editor/utilites/vox_tgl.asm b/programs/media/voxel_editor/utilites/vox_tgl.asm index bd4f58c37..c2577569b 100644 --- a/programs/media/voxel_editor/utilites/vox_tgl.asm +++ b/programs/media/voxel_editor/utilites/vox_tgl.asm @@ -1,13 +1,7 @@ use32 org 0x0 db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 0x1 - dd start - dd i_end ;размер приложения - dd mem - dd stacktop - dd 0 - dd sys_path + dd 1, start, i_end, mem, stacktop, 0, sys_path include '../../../../programs/macros.inc' include '../../../../programs/proc32.inc' @@ -18,7 +12,7 @@ include 'vox_3d.inc' include '../trunk/str.inc' @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -caption db 'Voxel viewer 17.02.15',0 ;подпись окна +caption db 'Voxel viewer 07.12.15',0 ;подпись окна struct FileInfoBlock Function dd ? @@ -30,7 +24,11 @@ struct FileInfoBlock FileName dd ? ends -run_file_70 FileInfoBlock +3d_wnd_l equ 5 ;отступ для tinygl буфера слева +3d_wnd_t equ 30 ;отступ для tinygl буфера сверху +3d_wnd_w equ 512 +3d_wnd_h equ 512 + image_data dd 0 ;указатель на временную память. для нужен преобразования изображения IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 @@ -48,24 +46,22 @@ macro load_image_file path,buf,size { ; db 0 @@: ;32 - стандартный адрес по которому должен быть буфер с системным путем - copy_path .path_str,[32],file_name,0x0 + copy_path .path_str,[32],file_name,0 else - copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой end if stdcall mem.Alloc, dword size ;выделяем память для изображения mov [buf],eax - mov eax,70 ;70-я функция работа с файлами mov [run_file_70.Function], 0 mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 mov [run_file_70.Count], dword size - m2m [run_file_70.Buffer], [buf] + mov [run_file_70.Buffer], eax mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name - mov ebx,run_file_70 - int 0x40 ;загружаем файл изображения + mcall 70,run_file_70 ;загружаем файл изображения cmp ebx,0xffffffff je @f ;определяем вид изображения и переводим его во временный буфер image_data @@ -103,7 +99,7 @@ start: mcall 26,9 mov [last_time],eax - stdcall [kosglMakeCurrent], 5,30,512,512,ctx1 + stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,3d_wnd_w,3d_wnd_h,ctx1 stdcall [glEnable], GL_DEPTH_TEST stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов stdcall [glClearColor], 0.0,0.0,0.0,0.0 @@ -139,6 +135,10 @@ still: jz key cmp al,3 jz button + cmp al,6 + jne @f + call mouse + @@: jmp still @@ -316,6 +316,88 @@ key: jmp still +align 4 +mouse: + push eax ebx + mcall 37,3 + bt eax,0 + jnc .end_m + ;mouse l. but. move + cmp dword[mouse_drag],1 + jne .end_m + mcall 37,1 ;get mouse coords + mov ebx,eax + shr ebx,16 ;mouse.x + cmp ebx,3d_wnd_l + jg @f + mov ebx,3d_wnd_l + @@: + sub ebx,3d_wnd_l + cmp ebx,3d_wnd_w + jle @f + mov ebx,3d_wnd_w + @@: + and eax,0xffff ;mouse.y + cmp eax,3d_wnd_t + jg @f + mov eax,3d_wnd_t + @@: + sub eax,3d_wnd_t + cmp eax,3d_wnd_h + jle @f + mov eax,3d_wnd_h + @@: + finit + fild dword[mouse_y] + mov [mouse_y],eax + fisub dword[mouse_y] + fdiv dword[angle_dxm] ;если курсор движется по оси y (вверх или вниз) то поворот делаем вокруг оси x + fadd dword[angle_x] + fstp dword[angle_x] + + fild dword[mouse_x] + mov [mouse_x],ebx + fisub dword[mouse_x] + fdiv dword[angle_dym] ;если курсор движется по оси x (вверх или вниз) то поворот делаем вокруг оси y + fadd dword[angle_y] + fstp dword[angle_y] + + call draw_3d + stdcall [kosglSwapBuffers] + jmp .end_d + .end_m: + bt eax,16 + jnc @f + ;mouse l. but. up + mov dword[mouse_drag],0 + jmp .end_d + @@: + bt eax,8 + jnc .end_d + ;mouse l. but. press + mcall 37,1 ;get mouse coords + mov ebx,eax + shr ebx,16 ;mouse.x + cmp ebx,3d_wnd_l + jl .end_d + sub ebx,3d_wnd_l + cmp ebx,3d_wnd_w + jg .end_d + and eax,0xffff ;mouse.y + cmp eax,3d_wnd_t + jl .end_d + sub eax,3d_wnd_t + cmp eax,3d_wnd_h + jg .end_d + mov dword[mouse_drag],1 + mov dword[mouse_x],ebx + mov dword[mouse_y],eax + .end_d: + + ;stdcall [kmainmenu_dispatch_cursorevent], [main_menu] + pop ebx eax + ret + align 4 button: mcall 17 @@ -668,11 +750,11 @@ align 4 mov edi,txt_stat_m1.v stdcall convert_int_to_str,20 - ;mov eax,ebx - ;mov edi,txt_stat_m2.v - ;stdcall convert_int_to_str,20 + mov eax,ebx + mov edi,txt_stat_m2.v + stdcall convert_int_to_str,20 - ;stdcall str_n_cat,txt_stat_m1.v,txt_stat_m2,50 + stdcall str_n_cat,txt_stat_m1.v,txt_stat_m2,50 notify_window_run txt_stat_m1 .end_stat: ret @@ -681,7 +763,7 @@ endp align 4 txt_stat_m1: db 'Статистика',13,10,'Вокселей: ' -.v: rb 50 +.v: rb 70 txt_stat_m2: db 13,10,'Отображаемых граней: ' .v: rb 20 @@ -717,6 +799,7 @@ draw_3d: ;но все же при поворотах будут отсекатся края, которые вылезут за пределы плоскостей отсечения ;в версии opengl под Win координаты идут от -1.0 до 1.0 потому там этого делать не нужно stdcall [glScalef], [scale], [scale], [scale] ;увеличиваем воксельный объект, что-бы не был очень маленьким + stdcall [glScalef], 1.0, 1.0, 0.5 ;что-бы края объекта не вылазили за грани отсечения stdcall [glRotatef], [angle_x],1.0,0.0,0.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_z],0.0,0.0,1.0 @@ -973,12 +1056,8 @@ err_msg_found_lib_3 db ' err_msg_import_3 db 'Ошибка при импорте библиотеки ',39,'tinygl',39,0 ;-------------------------------------------------- -sc system_colors last_time dd 0 -align 16 -procinfo process_information - align 4 buf_0: dd 0 ;указатель на буфер изображения dw 530 ;+4 left @@ -1006,6 +1085,11 @@ angle_x dd 0.0 angle_y dd 0.0 angle_z dd 0.0 delt_size dd 3.0 +mouse_drag dd 0 ;режим поворота сцены от перемещении курсора мыши +mouse_x dd 0 +mouse_y dd 0 +angle_dxm dd 2.8444 ;~ 3d_wnd_w/180 - прибавление углов поворота сцены при вращении мышей +angle_dym dd 2.8444 ;~ 3d_wnd_h/180 opt_light dw 0 ;опция для включения/выключения света opt_cube_box dw 1 ;опция для рисования рамки вокруг объекта @@ -1026,10 +1110,12 @@ i_end: rb 4096 stacktop: sys_path rb 1024 - file_name: - rb 1024 ;4096 + file_name rb 2048 library_path rb 1024 plugin_path rb 4096 openfile_path rb 4096 filename_area rb 256 + sc system_colors + procinfo process_information + run_file_70 FileInfoBlock mem: