4,7 → 4,11 |
; |
|
prop_wnd_width equ 340 ;è¨à¨ ®ª ᮠ᢮©á⢠¬¨ ®¡ê¥ªâ |
prop_wnd_height equ 460 |
prop_wnd_height equ 460 ;¢ëá®â ®ª ᮠ᢮©á⢠¬¨ ®¡ê¥ªâ |
3d_wnd_l equ 5 ;®âáâ㯠¤«ï tinygl ¡ãä¥à á«¥¢ |
3d_wnd_t equ 23 ;®âáâ㯠¤«ï tinygl ¡ãä¥à ᢥàåã |
3d_wnd_w equ 320 |
3d_wnd_h equ 240 |
SIZE_ONE_FLOAT equ 14 |
MAX_OBJECT_SIZE equ (4+SIZE_ONE_FLOAT*3+1) |
|
12,8 → 16,20 |
bit_faces equ 1 |
bit_faces_fill equ 2 |
bit_light equ 3 |
def_dr_mode equ 0x1111b |
|
ini_name db 'info3ds.ini',0 |
ini_sec_w3d db 'Window 3d',0 |
key_dv db 'draw_vertices',0 |
key_df db 'draw_faces',0 |
key_dff db 'draw_faces_fill',0 |
key_dl db 'draw_light',0 |
key_ox db 'col_ox',0 |
key_oy db 'col_oy',0 |
key_oz db 'col_oz',0 |
key_bk db 'col_bkgnd',0 |
key_vert db 'col_vertices',0 |
key_face db 'col_faces',0 |
|
prop_wnd_run db 0 ;¯¥à¥¬¥ ï á«¥¤ïé ï § ⥬ çâ®-¡ë ¥ § ¯ã᪠âì ¡®«ìè¥ 1-£® ®ª ᮠ᢮©á⢠¬¨ ®¤®¢à¥¬¥® |
|
txt_q db '?',0 |
46,29 → 62,68 |
cmp eax,0 |
je .no_points |
mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª |
add ebx,[open_file_lif] |
add ebx,[open_file_data] |
|
cmp word[ebx],CHUNK_OBJBLOCK |
jne .end_oblo |
mov dword[capt_p],txt_4000 |
call found_block_data |
cmp eax,0 |
je .no_points |
mov esi,eax |
movzx ecx,byte[esi+2] ;cl - ã஢¥ì ¢ë¡à ®£® 㧫 |
.cycle_0: |
stdcall [tl_node_poi_get_next_info], tree1,esi |
cmp eax,0 |
je .no_points |
cmp byte[eax+2],cl |
jle .no_points |
mov esi,eax |
stdcall [tl_node_poi_get_data], tree1,esi |
mov ebx,[eax] |
add ebx,[open_file_data] |
cmp word[ebx],CHUNK_VERTLIST |
je .ini_vlist |
jmp .cycle_0 |
jmp .no_points |
.end_oblo: |
cmp word[ebx],CHUNK_TRIMESH |
jne .end_trim |
mov dword[capt_p],txt_4100 |
call found_block_data |
cmp eax,0 |
je .no_points |
mov esi,eax |
movzx ecx,byte[esi+2] ;cl - ã஢¥ì ¢ë¡à ®£® 㧫 |
.cycle_1: |
stdcall [tl_node_poi_get_next_info], tree1,esi |
cmp eax,0 |
je .no_points |
cmp byte[eax+2],cl |
jle .no_points |
mov esi,eax |
stdcall [tl_node_poi_get_data], tree1,esi |
mov ebx,[eax] |
add ebx,[open_file_data] |
cmp word[ebx],CHUNK_VERTLIST |
je .ini_vlist |
jmp .cycle_1 |
jmp .no_points |
.end_trim: |
cmp word[ebx],CHUNK_VERTLIST |
jne .end_vlist |
mov dword[capt_p],txt_4110 |
.ini_vlist: |
movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª |
add ebx,8 |
mov dword[capt_p],txt_4110 |
;¯®¨áª ¤ ëå ¤«ï âà¥ã£®«ìª®¢ |
mov ecx,eax |
stdcall [tl_node_poi_get_info], tree1,0 |
@@: |
call found_block_data |
cmp eax,0 |
je .set_points |
mov esi,eax |
stdcall [tl_node_poi_get_data], tree1,esi |
cmp eax,ecx |
je @f ;¥á«¨ ¯®¯ «¨ ¢ë¡à ë© ã§¥« |
stdcall [tl_node_poi_get_next_info], tree1,esi |
cmp eax,0 |
jne @b |
jmp .set_points |
@@: |
;¥á«¨ 諨 ¢ë¡à ë© ã§¥«, â® ¤ «¥¥ ¯ëâ ¥¬áï ©â¨ ã§¥« á âà¥ã£®«ì¨ª ¬¨ |
movzx ecx,byte[esi+2] ;cl - ã஢¥ì ¢ë¡à ®£® 㧫 |
.cycle_0: |
.cycle_2: |
stdcall [tl_node_poi_get_next_info], tree1,esi |
cmp eax,0 |
je .set_points |
77,14 → 132,14 |
cmp byte[esi+2],cl |
jl .set_points |
je .found |
jmp .cycle_0 |
jmp .cycle_2 |
.found: ;¥á«¨ 諨 㧥« ⮣®¦¥ ã஢ï çâ® ¨ ¢ë¡à ë© ã§¥« |
cmp eax,0 |
je .set_points |
mov eax,[eax] |
add eax,[open_file_lif] |
add eax,[open_file_data] |
cmp word[eax],CHUNK_FACELIST |
jne .cycle_0 |
jne .cycle_2 |
movzx ecx,word[eax+6] |
mov [obj_tri_count],ecx |
add eax,8 ;2+4+2 (chunk+size+count) |
155,6 → 210,24 |
stdcall [edit_box_set_text], edit1, txt_q |
stdcall [edit_box_set_text], edit2, txt_q |
stdcall [edit_box_set_text], edit3, txt_q |
mov eax,0xc0c0c0 |
mov ebx,[color_ox] |
shr ebx,2 |
and ebx,0x3f3f3f |
add eax,ebx |
mov [edit1.color],eax |
mov eax,0xc0c0c0 |
mov ebx,[color_oy] |
shr ebx,2 |
and ebx,0x3f3f3f |
add eax,ebx |
mov [edit2.color],eax |
mov eax,0xc0c0c0 |
mov ebx,[color_oz] |
shr ebx,2 |
and ebx,0x3f3f3f |
add eax,ebx |
mov [edit3.color],eax |
popad |
|
call prop_red_win |
207,7 → 280,8 |
add cx,word[buf_0.t] |
shl ecx,16 |
mov cx,prop_wnd_height |
mov edx,0xffffd0+0x33000000 |
mov edx,[sc.work] |
or edx,0x33000000 |
int 0x40 |
|
mov esi,[sc.work_button] |
215,7 → 289,7 |
mcall , (30 shl 16)+20, (266 shl 16)+20, 4 |
|
mov ebx,[image_data_toolbar] |
add ebx,4*IMAGE_TOOLBAR_ICON_SIZE |
add ebx,3*IMAGE_TOOLBAR_ICON_SIZE |
mcall 7, , (16 shl 16)+16, (7 shl 16)+268 ;load |
|
sub ebx,IMAGE_TOOLBAR_ICON_SIZE |
238,16 → 312,41 |
;ãáâ ®¢ª ¢á¥å ®á®¢ëå ¯¥à¥¬¥ëå ¯® 㬮«ç ¨î |
align 4 |
prop_wnd_clear_param: |
mov dword[angle_x],0.0 |
mov dword[angle_y],0.0 |
mov dword[angle_z],0.0 |
;ãáâ ®¢ª ¯ à ¬¥â஢ ®â®¡à ¦¥¨ï |
call mnu_reset_settings |
|
;®¡ã«¥¨¥ 㪠§ ⥫¥© ¤ ë¥ ®¡ê¥ªâ®¢ |
mov dword[obj_poi_data],0 |
mov dword[obj_poi_count],0 |
mov dword[obj_tri_data],0 |
mov dword[obj_tri_count],0 |
mov dword[draw_mode],def_dr_mode |
ret |
|
;¯®¨áª ¤ ëå |
;input: |
;eax - ⥪ã騩 㧥« |
;output: |
;eax - áâàãªâãà ⥪ã饣® 㧫 (¨«¨ 0 ¯à¨ ¥ã¤ ç¥) |
align 4 |
found_block_data: |
push ebx ecx |
mov ecx,eax |
stdcall [tl_node_poi_get_info], tree1,0 |
@@: |
mov ebx,eax |
stdcall [tl_node_poi_get_data], tree1,ebx |
cmp eax,ecx |
je @f ;¥á«¨ ¯®¯ «¨ ¢ë¡à ë© ã§¥« |
stdcall [tl_node_poi_get_next_info], tree1,ebx |
cmp eax,0 |
jne @b |
jmp .end |
@@: |
mov eax,ebx |
.end: |
pop ecx ebx |
ret |
|
;ãáâ ®¢ª à §¬¥à®¢ ®¡ê¥ªâ |
align 4 |
proc obj_set_sizes uses eax ebx esi |
418,7 → 517,6 |
draw_3d: |
cmp dword[obj_poi_count],2 |
jl .end_f |
|
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à 梥⠨ £«ã¡¨ë |
stdcall [glPushMatrix] |
bt dword[draw_mode],bit_light |
439,7 → 537,7 |
;à¨á®¢ ¨¥ â®ç¥ª |
bt dword[draw_mode],bit_vertexes |
jnc .end_points |
stdcall [glColor3f], 1.0,1.0,1.0 |
stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert] |
stdcall [glBegin],GL_POINTS |
mov eax,[obj_poi_data] |
mov ebx,[obj_poi_count] |
459,13 → 557,13 |
mov eax,[eax] |
|
stdcall [glBegin],GL_LINES |
stdcall [glColor3f], 1.0, 0.0, 0.0 |
stdcall [glColor3ub],[color_ox+2],[color_ox+1],[color_ox] |
stdcall [glVertex3f], [obj_x_min],[eax+4],[eax+8] |
stdcall [glVertex3f], [obj_x_max],[eax+4],[eax+8] |
stdcall [glColor3f], 0.0, 0.0, 1.0 |
stdcall [glColor3ub],[color_oy+2],[color_oy+1],[color_oy] |
stdcall [glVertex3f], [eax],[obj_y_min],[eax+8] |
stdcall [glVertex3f], [eax],[obj_y_max],[eax+8] |
stdcall [glColor3f], 0.0, 1.0, 0.0 |
stdcall [glColor3ub],[color_oz+2],[color_oz+1],[color_oz] |
stdcall [glVertex3f], [eax],[eax+4],[obj_z_min] |
stdcall [glVertex3f], [eax],[eax+4],[obj_z_max] |
stdcall [glEnd] |
484,10 → 582,15 |
je .end_triangles |
cmp dword[obj_poi_count],0 |
je .end_triangles |
stdcall [glColor3f], 0.5,0.5,0.5 |
;bt dword[draw_mode],bit_faces_fill |
;jnc @f |
;@@: |
bt dword[draw_mode],bit_faces_fill |
jc @f |
push GL_LINE |
jmp .end_0 |
@@: |
push GL_FILL |
.end_0: |
stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥ |
stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face] |
stdcall [glBegin],GL_TRIANGLES |
mov eax,[obj_tri_data] |
mov ecx,[obj_tri_count] |
596,13 → 699,87 |
|
align 4 |
prop_mouse: |
;push ecx edi |
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 |
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] |
stdcall [tl_mouse], tree3 |
stdcall [edit_box_mouse], edit1 |
stdcall [edit_box_mouse], edit2 |
stdcall [edit_box_mouse], edit3 |
;pop edi ecx |
pop ebx eax |
ret |
|
align 4 |
693,9 → 870,19 |
@@: |
cmp ah,7 |
jne @f |
call mnu_faces_fill_on_off |
jmp prop_still.end |
@@: |
cmp ah,8 |
jne @f |
call mnu_light_on_off |
jmp prop_still.end |
@@: |
cmp ah,9 |
jne @f |
call mnu_reset_settings |
jmp prop_still.end |
@@: |
|
cmp ah,1 |
jne prop_still.end |
747,23 → 934,49 |
ret |
endp |
|
;¨§¬¥ï¥¬ ०¨¬ à¨á®¢ ¨ï ¢¥àè¨ |
align 4 |
mnu_vertexes_on_off: |
xor dword[draw_mode], 1 shl bit_vertexes |
ret |
|
;¨§¬¥ï¥¬ ०¨¬ à¨á®¢ ¨ï £à ¥© |
align 4 |
mnu_faces_on_off: |
xor dword[draw_mode], 1 shl bit_faces |
ret |
|
;¨§¬¥ï¥¬ ª ઠáë¥ ¨«¨ ᯫ®èë¥ £à ¨ |
align 4 |
mnu_faces_fill_on_off: |
xor dword[draw_mode], 1 shl bit_faces_fill |
or dword[draw_mode], 1 shl bit_faces ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï £à ¥© (¥á«¨ ¢¤à㣠¡ë« ®âª«îç¥) |
ret |
|
;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥¨¥ |
align 4 |
mnu_light_on_off: |
xor dword[draw_mode], 1 shl bit_light |
ret |
|
align 4 |
draw_mode dd 0 |
mnu_reset_settings: |
mov dword[angle_x],0.0 |
mov dword[angle_y],0.0 |
mov dword[angle_z],0.0 |
m2m dword[draw_mode],dword[def_dr_mode] |
ret |
|
align 4 |
def_dr_mode dd 0 ;०¨¬ à¨á®¢ ¨ï ¯® 㬮«ç ¨î |
delt_size dd 3.0 ;¨§¬¥¥¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë |
mouse_drag dd 0 ;०¨¬ ¯®¢®à®â áæ¥ë ®â ¯¥à¥¬¥é¥¨¨ ªãàá®à ¬ëè¨ |
mouse_x dd 0 |
mouse_y dd 0 |
angle_dxm dd 1.7775 ;~ 3d_wnd_w/180 - ¯à¨¡ ¢«¥¨¥ 㣫®¢ ¯®¢®à®â áæ¥ë ¯à¨ ¢à 饨¨ ¬ë襩 |
angle_dym dd 1.3335 ;~ 3d_wnd_h/180 |
;angle_dzm dd ? |
draw_mode dd 0 ;०¨¬ à¨á®¢ ¨ï ®¡ê¥ªâ |
obj_poi_data dd 0 ;㪠§ â¥«ì ª®®à¤¨ âë ¢¥àè¨ |
obj_poi_count dd 0 ;ª®««¨ç¥á⢮ ¢¥àè¨ |
obj_tri_data dd 0 ;㪠§ â¥«ì ¤ ë¥ âà¥ã£®«ì¨ª®¢ |