update utilite 'vox_tgl'

git-svn-id: svn://kolibrios.org@5393 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2015-02-11 14:28:00 +00:00
parent 454f3da10c
commit 5b6cfd44a0
4 changed files with 111 additions and 106 deletions

Binary file not shown.

View File

@ -2,6 +2,13 @@
; Ôóíêöèè íóæíûå äëÿ îòîáðàæåíèÿ âîêñåëüíîãî îáúåêòà ÷åðåç áèáëèîòåêó tinygl ; Ôóíêöèè íóæíûå äëÿ îòîáðàæåíèÿ âîêñåëüíîãî îáúåêòà ÷åðåç áèáëèîòåêó tinygl
; ;
normal_gran_z1 equ -1.0
normal_gran_z0 equ 1.0
normal_gran_y1 equ -1.0
normal_gran_y0 equ 1.0
normal_gran_x1 equ -1.0
normal_gran_x0 equ 1.0
;ìàðîñ êîðåêòèðîâêè âåêòîðà íîðìàëè äëÿ çàêðóãëåíèÿ êðàéíèõ âîêñåëåé ;ìàðîñ êîðåêòèðîâêè âåêòîðà íîðìàëè äëÿ çàêðóãëåíèÿ êðàéíèõ âîêñåëåé
macro normal_gran param, gran macro normal_gran param, gran
{ {
@ -573,9 +580,8 @@ align 4
;coord x ;coord x
fild dword[eax+vox_ogl_x0] fild dword[eax+vox_ogl_x0]
fscale fscale
fchs
fst dword[eax+vox_ogl_x0] fst dword[eax+vox_ogl_x0]
fsub st0,st2 ;äîáàâëÿåì êî âòîðîé òî÷êå ðàçìåð ìàñøòàáèðîâàííîé êóáè÷åñêîé ãðàíè fadd st0,st2 ;äîáàâëÿåì êî âòîðîé òî÷êå ðàçìåð ìàñøòàáèðîâàííîé êóáè÷åñêîé ãðàíè
fstp dword[eax+vox_ogl_x1] fstp dword[eax+vox_ogl_x1]
;coord y ;coord y
fild dword[eax+vox_ogl_y0] fild dword[eax+vox_ogl_y0]
@ -610,10 +616,10 @@ align 4
@@: @@:
;coord x ;coord x
fld dword[eax+vox_ogl_x0] fld dword[eax+vox_ogl_x0]
fadd st0,st1 ;+0.5 fsub st0,st1 ;-0.5
fstp dword[eax+vox_ogl_x0] fstp dword[eax+vox_ogl_x0]
fld dword[eax+vox_ogl_x1] fld dword[eax+vox_ogl_x1]
fadd st0,st1 ;+0.5 fsub st0,st1 ;-0.5
fstp dword[eax+vox_ogl_x1] fstp dword[eax+vox_ogl_x1]
;coord y ;coord y
fld dword[eax+vox_ogl_y0] fld dword[eax+vox_ogl_y0]
@ -1304,12 +1310,6 @@ proc vox_corect_coords_pl, v_obj:dword, v_size:dword
ret ret
endp endp
normal_gran_z1 equ -1.0
normal_gran_z0 equ 1.0
normal_gran_y1 equ 1.0
normal_gran_y0 equ -1.0
normal_gran_x1 equ -1.0
normal_gran_x0 equ 1.0
align 4 align 4
p1 dd ? p1 dd ?
p2 dd ? p2 dd ?

View File

@ -18,7 +18,7 @@ include 'vox_3d.inc'
include '../trunk/str.inc' include '../trunk/str.inc'
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
caption db 'Voxel viewer 29.01.15',0 ;¯®¤¯¨áì ®ª­  caption db 'Voxel viewer 11.02.15',0 ;¯®¤¯¨áì ®ª­ 
struct FileInfoBlock struct FileInfoBlock
Function dd ? Function dd ?
@ -34,7 +34,7 @@ run_file_70 FileInfoBlock
image_data dd 0 ;㪠§ â¥«ì ­  ¢à¥¬¥­­ãî ¯ ¬ïâì. ¤«ï ­ã¦¥­ ¯à¥®¡à §®¢ ­¨ï ¨§®¡à ¦¥­¨ï image_data dd 0 ;㪠§ â¥«ì ­  ¢à¥¬¥­­ãî ¯ ¬ïâì. ¤«ï ­ã¦¥­ ¯à¥®¡à §®¢ ­¨ï ¨§®¡à ¦¥­¨ï
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*9 IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*10
image_data_toolbar dd 0 image_data_toolbar dd 0
offs_zbuf_pbuf equ 24 offs_zbuf_pbuf equ 24
@ -95,7 +95,10 @@ start:
stdcall [buf2d_create], buf_0 ;ᮧ¤ ­¨¥ ¡ãä¥à  stdcall [buf2d_create], buf_0 ;ᮧ¤ ­¨¥ ¡ãä¥à 
load_image_file 'toolbar_t.png', image_data_toolbar,IMAGE_TOOLBAR_SIZE load_image_file 'toolbar_t.png', image_data_toolbar,IMAGE_TOOLBAR_SIZE*2 ;*2 for gray icons
mov eax,[image_data_toolbar]
add eax,IMAGE_TOOLBAR_SIZE
stdcall img_to_gray, [image_data_toolbar],eax,(IMAGE_TOOLBAR_SIZE)/3
mcall 26,9 mcall 26,9
mov [last_time],eax mov [last_time],eax
@ -198,6 +201,18 @@ pushad
mov edx,12 mov edx,12
int 0x40 int 0x40
call draw_toolbar_i
stdcall [buf2d_draw], buf_0
stdcall [kosglSwapBuffers]
mcall 12,2
popad
ret
align 4
draw_toolbar_i:
; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å *** ; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å ***
mov edx,(7 shl 16)+7 ;icon new mov edx,(7 shl 16)+7 ;icon new
mcall 7,[image_data_toolbar],(16 shl 16)+16 mcall 7,[image_data_toolbar],(16 shl 16)+16
@ -215,27 +230,49 @@ pushad
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;zoom - add edx,(25 shl 16) ;zoom -
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
cmp word[opt_light],0
jne @f
add ebx,IMAGE_TOOLBAR_SIZE ;make gray icon
@@:
add edx,(25 shl 16) ;light on/off add edx,(25 shl 16) ;light on/off
int 0x40 int 0x40
cmp word[opt_light],0
jne @f
sub ebx,IMAGE_TOOLBAR_SIZE
@@:
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
cmp word[opt_cube_box],0
jne @f
add ebx,IMAGE_TOOLBAR_SIZE ;make gray icon
@@:
add edx,(25 shl 16) ;box on/off add edx,(25 shl 16) ;box on/off
int 0x40 int 0x40
cmp word[opt_cube_box],0
jne @f
sub ebx,IMAGE_TOOLBAR_SIZE
@@:
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
cmp word[opt_auto_rotate],0
jne @f
add ebx,IMAGE_TOOLBAR_SIZE ;make gray icon
@@:
add edx,(25 shl 16) ;auto rotate on/off add edx,(25 shl 16) ;auto rotate on/off
int 0x40 int 0x40
cmp word[opt_auto_rotate],0
jne @f
sub ebx,IMAGE_TOOLBAR_SIZE
@@:
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;info voxels add edx,(25 shl 16) ;info voxels
int 0x40 int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;refresh add edx,(25 shl 16) ;refresh
int 0x40 int 0x40
stdcall [buf2d_draw], buf_0
stdcall [kosglSwapBuffers]
mcall 12,2
popad
ret ret
@ -245,33 +282,33 @@ key:
cmp ah,178 ;Up cmp ah,178 ;Up
jne @f jne @f
fld dword[angle_z] fld dword[angle_x]
fadd dword[delt_size] fadd dword[delt_size]
fstp dword[angle_z] fstp dword[angle_x]
call draw_3d call draw_3d
stdcall [kosglSwapBuffers] stdcall [kosglSwapBuffers]
@@: @@:
cmp ah,177 ;Down cmp ah,177 ;Down
jne @f jne @f
fld dword[angle_z] fld dword[angle_x]
fsub dword[delt_size] fsub dword[delt_size]
fstp dword[angle_z] fstp dword[angle_x]
call draw_3d call draw_3d
stdcall [kosglSwapBuffers] stdcall [kosglSwapBuffers]
@@: @@:
cmp ah,176 ;Left cmp ah,176 ;Left
jne @f jne @f
fld dword[angle_x] fld dword[angle_y]
fadd dword[delt_size] fadd dword[delt_size]
fstp dword[angle_x] fstp dword[angle_y]
call draw_3d call draw_3d
stdcall [kosglSwapBuffers] stdcall [kosglSwapBuffers]
@@: @@:
cmp ah,179 ;Right cmp ah,179 ;Right
jne @f jne @f
fld dword[angle_x] fld dword[angle_y]
fsub dword[delt_size] fsub dword[delt_size]
fstp dword[angle_x] fstp dword[angle_y]
call draw_3d call draw_3d
stdcall [kosglSwapBuffers] stdcall [kosglSwapBuffers]
@@: @@:
@ -320,7 +357,7 @@ button:
@@: @@:
cmp ah,12 cmp ah,12
jne @f jne @f
call but_7 call but_draw_cadr
@@: @@:
cmp ah,1 cmp ah,1
jne still jne still
@ -334,9 +371,9 @@ button:
align 4 align 4
but_new_file: but_new_file:
mov dword[angle_x], 0.0 mov dword[angle_x], 30.0
mov [angle_y], 0.0 mov dword[angle_y], 180.0
mov [angle_z], 180.0 mov dword[angle_z], 180.0
ret ret
align 4 align 4
@ -474,7 +511,7 @@ draw_cadr_8:
ret ret
align 4 align 4
rot_angles dd 0,45,90,135,180,225,270,315 rot_angles dd 180,225,270,315,0,45,90,135
align 4 align 4
draw_cadr: draw_cadr:
@ -554,7 +591,7 @@ proc but_zoom_m uses eax
endp endp
align 4 align 4
proc but_3 uses eax proc but_3 uses eax ebx ecx edx
xor word[opt_light],1 xor word[opt_light],1
cmp word[opt_light],0 cmp word[opt_light],0
je @f je @f
@ -565,22 +602,25 @@ proc but_3 uses eax
stdcall [glDisable], GL_LIGHTING stdcall [glDisable], GL_LIGHTING
stdcall [glDisable], GL_LIGHT0 stdcall [glDisable], GL_LIGHT0
.end_light: .end_light:
call draw_toolbar_i
call draw_3d call draw_3d
stdcall [kosglSwapBuffers] stdcall [kosglSwapBuffers]
ret ret
endp endp
align 4 align 4
proc but_4 uses eax proc but_4 uses eax ebx ecx edx
xor word[opt_cube_box],1 xor word[opt_cube_box],1
call draw_toolbar_i
call draw_3d call draw_3d
stdcall [kosglSwapBuffers] stdcall [kosglSwapBuffers]
ret ret
endp endp
align 4 align 4
proc but_5 uses eax proc but_5 uses eax ebx ecx edx
xor word[opt_auto_rotate],1 xor word[opt_auto_rotate],1
call draw_toolbar_i
ret ret
endp endp
@ -647,8 +687,19 @@ txt_stat_m2:
.v: rb 20 .v: rb 20
align 4 align 4
proc but_7 uses eax proc but_draw_cadr uses eax ebx ecx edx
mov ebx,[angle_x]
mov ecx,[angle_y]
mov edx,[angle_z]
call draw_cadr_8 call draw_cadr_8
mov [angle_x],ebx
mov [angle_y],ecx
mov [angle_z],edx
cmp word[opt_auto_rotate],0
jne @f
call draw_3d
;stdcall [kosglSwapBuffers]
@@:
ret ret
endp endp
@ -666,8 +717,8 @@ draw_3d:
;­® ¢á¥ ¦¥ ¯à¨ ¯®¢®à®â å ¡ã¤ãâ ®âᥪ âáï ªà ï, ª®â®àë¥ ¢ë«¥§ãâ §  ¯à¥¤¥«ë ¯«®áª®á⥩ ®âá¥ç¥­¨ï ;­® ¢á¥ ¦¥ ¯à¨ ¯®¢®à®â å ¡ã¤ãâ ®âᥪ âáï ªà ï, ª®â®àë¥ ¢ë«¥§ãâ §  ¯à¥¤¥«ë ¯«®áª®á⥩ ®âá¥ç¥­¨ï
;¢ ¢¥àᨨ opengl ¯®¤ Win ª®®à¤¨­ âë ¨¤ãâ ®â -1.0 ¤® 1.0 ¯®â®¬ã â ¬ í⮣® ¤¥« âì ­¥ ­ã¦­® ;¢ ¢¥àᨨ opengl ¯®¤ Win ª®®à¤¨­ âë ¨¤ãâ ®â -1.0 ¤® 1.0 ¯®â®¬ã â ¬ í⮣® ¤¥« âì ­¥ ­ã¦­®
stdcall [glScalef], [scale], [scale], [scale] ;㢥«¨ç¨¢ ¥¬ ¢®ªá¥«ì­ë© ®¡ê¥ªâ, çâ®-¡ë ­¥ ¡ë« ®ç¥­ì ¬ «¥­ìª¨¬ stdcall [glScalef], [scale], [scale], [scale] ;㢥«¨ç¨¢ ¥¬ ¢®ªá¥«ì­ë© ®¡ê¥ªâ, çâ®-¡ë ­¥ ¡ë« ®ç¥­ì ¬ «¥­ìª¨¬
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0 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 stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall draw_voxels_3d,[open_file_ogl] stdcall draw_voxels_3d,[open_file_ogl]
@ -695,79 +746,33 @@ proc SetLight
ret ret
endp endp
;input:
; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
;output:
; eax - ç¨á«®
align 4 align 4
proc conv_str_to_int, buf:dword proc img_to_gray, buf_rgb:dword, buf_g24:dword, pixels:dword
xor eax,eax pushad
push ebx ecx esi mov esi,[buf_rgb]
xor ebx,ebx mov edi,[buf_g24]
mov esi,[buf] mov ecx,[pixels]
;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥« mov ebx,3
xor ecx,ecx align 4
inc ecx
cmp byte[esi],'-'
jne @f
dec ecx
inc esi
@@: @@:
movzx eax,byte[esi]
cmp word[esi],'0x' movzx edx,byte[esi+1]
je .load_digit_16 add eax,edx
movzx edx,byte[esi+2]
.load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà add eax,edx
mov bl,byte[esi] xor edx,edx
cmp bl,'0' div ebx ;shr eax,2
jl @f mov ah,al
cmp bl,'9' mov word[edi],ax
jg @f mov byte[edi+2],al
sub bl,'0' add esi,3
imul eax,10 add edi,3
add eax,ebx loop @b
inc esi popad
jmp .load_digit_10
jmp @f
.load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
add esi,2
.cycle_16:
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'f'
jg @f
cmp bl,'9'
jle .us1
cmp bl,'A'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
.us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
cmp bl,'F'
jle .us2
cmp bl,'a'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
.us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
sub bl,'0'
cmp bl,9
jle .cor1
sub bl,7 ;convert 'A' to '10'
.cor1:
shl eax,4
add eax,ebx
inc esi
jmp .cycle_16
@@:
or ecx,ecx ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
jnz @f
neg eax
inc eax
@@:
pop esi ecx ebx
ret ret
endp endp
;¤ ­­ë¥ ¤«ï ¤¨ «®£  ®âªàëâ¨ï ä ©«®¢ ;¤ ­­ë¥ ¤«ï ¤¨ «®£  ®âªàëâ¨ï ä ©«®¢
align 4 align 4
OpenDialog_data: OpenDialog_data:
@ -1004,7 +1009,7 @@ delt_size dd 3.0
opt_light dw 0 ;®¯æ¨ï ¤«ï ¢ª«î祭¨ï/¢ëª«î祭¨ï á¢¥â  opt_light dw 0 ;®¯æ¨ï ¤«ï ¢ª«î祭¨ï/¢ëª«î祭¨ï ᢥâ 
opt_cube_box dw 1 ;®¯æ¨ï ¤«ï à¨á®¢ ­¨ï à ¬ª¨ ¢®ªà㣠®¡ê¥ªâ  opt_cube_box dw 1 ;®¯æ¨ï ¤«ï à¨á®¢ ­¨ï à ¬ª¨ ¢®ªà㣠®¡ê¥ªâ 
opt_auto_rotate dw 1 ;®¯æ¨ï ¤«ï  ¢â®¬ â¨ç¥áª®£® ¯®¢®à®â  ®¡ê¥ªâ  opt_auto_rotate dw 0 ;®¯æ¨ï ¤«ï  ¢â®¬ â¨ç¥áª®£® ¯®¢®à®â  ®¡ê¥ªâ 
light_position dd 0.0, 0.0, 2.0, 1.0 ; <20> á¯®«®¦¥­¨¥ ¨áâ®ç­¨ª  [0][1][2] light_position dd 0.0, 0.0, 2.0, 1.0 ; <20> á¯®«®¦¥­¨¥ ¨áâ®ç­¨ª  [0][1][2]
;[3] = (0.0 - ¡¥áª®­¥ç­® 㤠«¥­­ë© ¨áâ®ç­¨ª, 1.0 - ¨áâ®ç­¨ª á¢¥â  ­  ®¯à¥¤¥«¥­­®¬ à ááâ®ï­¨¨) ;[3] = (0.0 - ¡¥áª®­¥ç­® 㤠«¥­­ë© ¨áâ®ç­¨ª, 1.0 - ¨áâ®ç­¨ª á¢¥â  ­  ®¯à¥¤¥«¥­­®¬ à ááâ®ï­¨¨)