forked from KolibriOS/kolibrios
info3ds_u: add new mode to view material colors
git-svn-id: svn://kolibrios.org@6509 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
35a72cec53
commit
e643356bbc
@ -31,6 +31,12 @@ ID_ICON_POINT_SEL equ 9
|
|||||||
|
|
||||||
FILE_ERROR_CHUNK_SIZE equ -3 ;®è¨¡ª ¢ à §¬¥à¥ ¡«®ª
|
FILE_ERROR_CHUNK_SIZE equ -3 ;®è¨¡ª ¢ à §¬¥à¥ ¡«®ª
|
||||||
|
|
||||||
|
size_one_list equ 42+sizeof.obj_3d
|
||||||
|
list_offs_chunk_del equ 8 ;¬®¦¥â «¨ ¡«®ª 㤠«ïâáï
|
||||||
|
list_offs_chunk_lev equ 9 ;ã஢¥ì ¡«®ª (¯à®¯¨á ¢ ¤ ë¥ ã§« )
|
||||||
|
list_offs_p_data equ 10 ;㪠§ â¥«ì ¯®¤¯¨áì ¡«®ª
|
||||||
|
list_offs_obj3d equ 14 ;㪠§ ⥫ì áâàãªâãàã ¤ ëå ¤«ï 3d ®¡ê¥ªâ
|
||||||
|
list_offs_text equ 14+sizeof.obj_3d ;ᤢ¨£ ç « ⥪áâ ¢ «¨áâ¥
|
||||||
include 'info_o3d.inc'
|
include 'info_o3d.inc'
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -57,12 +63,6 @@ file_3ds: ;
|
|||||||
.size: dd 0 ;+4 à §¬¥à ¡«®ª (¤«ï 1-£® ¯ à ¬¥âà = à §¬¥à ä ©« 3ds)
|
.size: dd 0 ;+4 à §¬¥à ¡«®ª (¤«ï 1-£® ¯ à ¬¥âà = à §¬¥à ä ©« 3ds)
|
||||||
rb 8*MAX_FILE_LEVEL
|
rb 8*MAX_FILE_LEVEL
|
||||||
|
|
||||||
size_one_list equ 42+sizeof.obj_3d
|
|
||||||
list_offs_chunk_del equ 8 ;¬®¦¥â «¨ ¡«®ª 㤠«ïâáï
|
|
||||||
list_offs_chunk_lev equ 9 ;ã஢¥ì ¡«®ª (¯à®¯¨á ¢ ¤ ë¥ ã§« )
|
|
||||||
list_offs_p_data equ 10 ;㪠§ â¥«ì ¯®¤¯¨áì ¡«®ª
|
|
||||||
list_offs_obj3d equ 14 ;㪠§ ⥫ì áâàãªâãàã ¤ ëå ¤«ï 3d ®¡ê¥ªâ
|
|
||||||
list_offs_text equ 14+sizeof.obj_3d ;ᤢ¨£ ç « ⥪áâ ¢ «¨áâ¥
|
|
||||||
buffer rb size_one_list ;¡ãä¥à ¤«ï ¤®¡ ¢«¥¨ï áâàãªâãà ¢ ᯨ᮪ tree1
|
buffer rb size_one_list ;¡ãä¥à ¤«ï ¤®¡ ¢«¥¨ï áâàãªâãà ¢ ᯨ᮪ tree1
|
||||||
|
|
||||||
txt_3ds_symb db 0,0
|
txt_3ds_symb db 0,0
|
||||||
@ -113,11 +113,11 @@ start:
|
|||||||
stdcall [ksubmenu_add], [main_menu_view], eax
|
stdcall [ksubmenu_add], [main_menu_view], eax
|
||||||
stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_Faces_Fill, 7
|
stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_Faces_Fill, 7
|
||||||
stdcall [ksubmenu_add], [main_menu_view], eax
|
stdcall [ksubmenu_add], [main_menu_view], eax
|
||||||
stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_Light, 8
|
stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_Light, 9
|
||||||
stdcall [ksubmenu_add], [main_menu_view], eax
|
stdcall [ksubmenu_add], [main_menu_view], eax
|
||||||
stdcall [kmenuitem_new], KMENUITEM_SEPARATOR, 0, 0
|
stdcall [kmenuitem_new], KMENUITEM_SEPARATOR, 0, 0
|
||||||
stdcall [ksubmenu_add], [main_menu_view], eax
|
stdcall [ksubmenu_add], [main_menu_view], eax
|
||||||
stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_Reset, 9
|
stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_Reset, 10
|
||||||
stdcall [ksubmenu_add], [main_menu_view], eax
|
stdcall [ksubmenu_add], [main_menu_view], eax
|
||||||
stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_View, [main_menu_view]
|
stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_View, [main_menu_view]
|
||||||
stdcall [ksubmenu_add], [main_menu], eax
|
stdcall [ksubmenu_add], [main_menu], eax
|
||||||
@ -395,7 +395,7 @@ timer_funct:
|
|||||||
stdcall draw_material,edi
|
stdcall draw_material,edi
|
||||||
jmp .end_f
|
jmp .end_f
|
||||||
.ini_mblo:
|
.ini_mblo:
|
||||||
stdcall mat_init,edi ;¯®¯ë⪠áâநâì ¤ ë¥ ¬ â¥à¨ «
|
stdcall mat_init,edi,eax ;¯®¯ë⪠áâநâì ¤ ë¥ ¬ â¥à¨ «
|
||||||
cmp dword[edi+offs_mat_name],0
|
cmp dword[edi+offs_mat_name],0
|
||||||
je .end_f
|
je .end_f
|
||||||
stdcall draw_material,edi
|
stdcall draw_material,edi
|
||||||
@ -438,25 +438,28 @@ pushad
|
|||||||
mov esi,[sc.work_button]
|
mov esi,[sc.work_button]
|
||||||
mcall SF_DEFINE_BUTTON,(5 shl 16)+20,(24 shl 16)+20,0x40000003
|
mcall SF_DEFINE_BUTTON,(5 shl 16)+20,(24 shl 16)+20,0x40000003
|
||||||
mcall ,(30 shl 16)+20,,0x40000004 ;open
|
mcall ,(30 shl 16)+20,,0x40000004 ;open
|
||||||
mcall ,(3d_wnd_l shl 16)+20,,0x40000005 ;¢¥àè¨ë ¢ª«./¢ëª«.
|
mcall ,(3d_wnd_l shl 16)+20,,0x40000005 ;¢¥àè¨ë ¢ª«.
|
||||||
mcall ,((3d_wnd_l+25) shl 16)+20,,0x40000006 ;£à ¨ ¢ª«./¢ëª«.
|
mcall ,((3d_wnd_l+25) shl 16)+20,,0x40000006 ;ª ઠáë¥ £à ¨ ¢ª«.
|
||||||
mcall ,((3d_wnd_l+50) shl 16)+20,,0x40000007 ;§ «¨¢ª £à ¥© ¢ª«./¢ëª«.
|
mcall ,((3d_wnd_l+50) shl 16)+20,,0x40000007 ;§ «¨¢ª £à ¥© ¢ª«.
|
||||||
mcall ,((3d_wnd_l+75) shl 16)+20,,0x40000008 ;ᢥ⠢ª«./¢ëª«.
|
mcall ,((3d_wnd_l+75) shl 16)+20,,0x40000008 ;£à ¨ ¯® ¬ â¥à¨ « ¬ ¢ª«.
|
||||||
mcall ,((3d_wnd_l+100) shl 16)+20,,0x40000009 ;á¡à®á
|
mcall ,((3d_wnd_l+100) shl 16)+20,,0x40000009 ;ᢥ⠢ª«./¢ëª«.
|
||||||
|
mcall ,((3d_wnd_l+125) shl 16)+20,,0x4000000a ;á¡à®á
|
||||||
|
|
||||||
mcall SF_PUT_IMAGE,[image_data_toolbar],(21 shl 16)+21,(5 shl 16)+24 ;new
|
mcall SF_PUT_IMAGE,[image_data_toolbar],(21 shl 16)+21,(5 shl 16)+24 ;new
|
||||||
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
||||||
mcall ,,,(30 shl 16)+24 ;open
|
mcall ,,,(30 shl 16)+24 ;open
|
||||||
add ebx,IMAGE_TOOLBAR_ICON_SIZE*6
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE*6
|
||||||
mcall ,,,((3d_wnd_l) shl 16)+24 ;¢¥àè¨ë ¢ª«./¢ëª«.
|
mcall ,,,((3d_wnd_l) shl 16)+24 ;¢¥àè¨ë ¢ª«.
|
||||||
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
||||||
mcall ,,,((3d_wnd_l+25) shl 16)+24 ;£à ¨ ¢ª«./¢ëª«.
|
mcall ,,,((3d_wnd_l+25) shl 16)+24 ;ª ઠáë¥ £à ¨ ¢ª«.
|
||||||
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
||||||
mcall ,,,((3d_wnd_l+50) shl 16)+24 ;§ «¨¢ª £à ¥© ¢ª«./¢ëª«.
|
mcall ,,,((3d_wnd_l+50) shl 16)+24 ;§ «¨¢ª £à ¥© ¢ª«.
|
||||||
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
||||||
mcall ,,,((3d_wnd_l+75) shl 16)+24 ;ᢥ⠢ª«./¢ëª«.
|
mcall ,,,((3d_wnd_l+100) shl 16)+24 ;ᢥ⠢ª«./¢ëª«.
|
||||||
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
||||||
mcall ,,,((3d_wnd_l+100) shl 16)+24 ;á¡à®á
|
mcall ,,,((3d_wnd_l+125) shl 16)+24 ;á¡à®á
|
||||||
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
||||||
|
mcall ,,,((3d_wnd_l+75) shl 16)+24 ;£à ¨ ¯® ¬ â¥à¨ « ¬ ¢ª«.
|
||||||
|
|
||||||
mov dword[w_scr_t1.all_redraw],1
|
mov dword[w_scr_t1.all_redraw],1
|
||||||
stdcall [tl_draw], tree1
|
stdcall [tl_draw], tree1
|
||||||
@ -561,10 +564,15 @@ button:
|
|||||||
@@:
|
@@:
|
||||||
cmp ah,8
|
cmp ah,8
|
||||||
jne @f
|
jne @f
|
||||||
call mnu_light_on_off
|
call mnu_faces_mat
|
||||||
jmp still
|
jmp still
|
||||||
@@:
|
@@:
|
||||||
cmp ah,9
|
cmp ah,9
|
||||||
|
jne @f
|
||||||
|
call mnu_light_on_off
|
||||||
|
jmp still
|
||||||
|
@@:
|
||||||
|
cmp ah,10
|
||||||
jne @f
|
jne @f
|
||||||
call mnu_reset_settings
|
call mnu_reset_settings
|
||||||
jmp still
|
jmp still
|
||||||
@ -1397,9 +1405,9 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ;
|
|||||||
lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; <20> à ¬¥âàë ä®®¢®£® ®á¢¥é¥¨ï
|
lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; <20> à ¬¥âàë ä®®¢®£® ®á¢¥é¥¨ï
|
||||||
|
|
||||||
if lang eq ru
|
if lang eq ru
|
||||||
capt db 'info 3ds [user] ¢¥àá¨ï 18.02.16',0 ;¯®¤¯¨áì ®ª
|
capt db 'info 3ds [user] ¢¥àá¨ï 02.09.16',0 ;¯®¤¯¨áì ®ª
|
||||||
else
|
else
|
||||||
capt db 'info 3ds [user] version 18.02.16',0 ;window caption
|
capt db 'info 3ds [user] version 02.09.16',0 ;window caption
|
||||||
end if
|
end if
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
@ -1417,10 +1425,8 @@ i_end:
|
|||||||
color_vert rd 1
|
color_vert rd 1
|
||||||
color_face rd 1
|
color_face rd 1
|
||||||
color_select rd 1
|
color_select rd 1
|
||||||
rb 2048
|
|
||||||
align 16
|
align 16
|
||||||
thread_coords:
|
rb 4096
|
||||||
rb 2048
|
|
||||||
stacktop:
|
stacktop:
|
||||||
sys_path rb 2048
|
sys_path rb 2048
|
||||||
file_name rb 4096
|
file_name rb 4096
|
||||||
|
@ -25,6 +25,7 @@ struct obj_3d
|
|||||||
z_min dd ?
|
z_min dd ?
|
||||||
z_centr dd ?
|
z_centr dd ?
|
||||||
z_scale dd ?
|
z_scale dd ?
|
||||||
|
mat1_data dd ? ;¤ ë¥ 1-£® ¬ â¥à¨ « ¢ ®¡ê¥ªâ¥
|
||||||
ends
|
ends
|
||||||
|
|
||||||
offs_obj_poi_data equ 0 ;㪠§ â¥«ì ª®®à¤¨ âë ¢¥àè¨
|
offs_obj_poi_data equ 0 ;㪠§ â¥«ì ª®®à¤¨ âë ¢¥àè¨
|
||||||
@ -47,6 +48,7 @@ offs_obj_z_max equ 64
|
|||||||
offs_obj_z_min equ 68
|
offs_obj_z_min equ 68
|
||||||
offs_obj_z_centr equ 72
|
offs_obj_z_centr equ 72
|
||||||
offs_obj_z_scale equ 76
|
offs_obj_z_scale equ 76
|
||||||
|
offs_obj_mat1_data equ 80
|
||||||
|
|
||||||
struct material
|
struct material
|
||||||
name dd ?
|
name dd ?
|
||||||
@ -64,6 +66,7 @@ bit_vertexes equ 0
|
|||||||
bit_faces equ 1
|
bit_faces equ 1
|
||||||
bit_faces_fill equ 2
|
bit_faces_fill equ 2
|
||||||
bit_light equ 3
|
bit_light equ 3
|
||||||
|
bit_faces_mat equ 4
|
||||||
|
|
||||||
ini_name db 'info3ds.ini',0
|
ini_name db 'info3ds.ini',0
|
||||||
ini_sec_w3d db 'Window 3d',0
|
ini_sec_w3d db 'Window 3d',0
|
||||||
@ -118,6 +121,7 @@ proc obj_clear_param uses edi, o_data:dword
|
|||||||
mov dword[edi+offs_obj_tri_count],0
|
mov dword[edi+offs_obj_tri_count],0
|
||||||
mov dword[edi+offs_obj_normals_tri_count],0
|
mov dword[edi+offs_obj_normals_tri_count],0
|
||||||
mov dword[edi+offs_obj_normals_poi_count],0
|
mov dword[edi+offs_obj_normals_poi_count],0
|
||||||
|
mov dword[edi+offs_obj_mat1_data],0
|
||||||
cmp dword[edi+offs_obj_normals_tri_data],0
|
cmp dword[edi+offs_obj_normals_tri_data],0
|
||||||
je @f
|
je @f
|
||||||
stdcall mem.Free,[edi+offs_obj_normals_tri_data]
|
stdcall mem.Free,[edi+offs_obj_normals_tri_data]
|
||||||
@ -526,6 +530,13 @@ proc obj_init, o_data:dword
|
|||||||
mov [edi+offs_obj_tri_count],edx
|
mov [edi+offs_obj_tri_count],edx
|
||||||
add esi,8 ;2+4+2 (chunk+size+count)
|
add esi,8 ;2+4+2 (chunk+size+count)
|
||||||
mov [edi+offs_obj_tri_data],esi
|
mov [edi+offs_obj_tri_data],esi
|
||||||
|
|
||||||
|
;¯®¨áª ¬ â¥à¨ «®¢ £à ¥©
|
||||||
|
shl edx,3
|
||||||
|
add esi,edx
|
||||||
|
cmp word[esi],CHUNK_FACEMAT
|
||||||
|
jne .end_points
|
||||||
|
mov [edi+offs_obj_mat1_data],esi
|
||||||
.end_points:
|
.end_points:
|
||||||
|
|
||||||
stdcall obj_set_sizes, edi
|
stdcall obj_set_sizes, edi
|
||||||
@ -539,8 +550,11 @@ end if
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
; áâனª ¬ â¥à¨ «
|
; áâனª ¬ â¥à¨ «
|
||||||
|
;input:
|
||||||
|
; m_data - 㪠§ â¥«ì § ¯®«ï¥¬ãî áâàãªâãàã á ¬ â¥à¨ «®¬
|
||||||
|
; f_data - 㪠§ â¥«ì ¡«®ª CHUNK_MATERIAL ¨§ ä ©« 3ds
|
||||||
align 4
|
align 4
|
||||||
proc mat_init, m_data:dword
|
proc mat_init, m_data:dword, f_data:dword
|
||||||
pushad
|
pushad
|
||||||
mov edi,[m_data]
|
mov edi,[m_data]
|
||||||
|
|
||||||
@ -550,86 +564,82 @@ proc mat_init, m_data:dword
|
|||||||
mov dword[edi+offs_mat_col_diffuse],0
|
mov dword[edi+offs_mat_col_diffuse],0
|
||||||
mov dword[edi+offs_mat_col_specular],0
|
mov dword[edi+offs_mat_col_specular],0
|
||||||
|
|
||||||
stdcall [tl_node_get_data],tree1
|
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
cmp eax,0
|
mov ebx,[f_data]
|
||||||
je .no_material
|
xor ecx,ecx
|
||||||
mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª
|
cmp word[ebx],CHUNK_MATERIAL
|
||||||
add ebx,[open_file_data]
|
jne .no_material
|
||||||
xor ecx,ecx
|
mov ecx,ebx
|
||||||
cmp word[ebx],CHUNK_MATERIAL
|
add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª
|
||||||
jne .no_material
|
add ebx,6
|
||||||
mov ecx,ebx
|
cmp word[ebx],CHUNK_MATNAME
|
||||||
add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª
|
jne .no_material
|
||||||
add ebx,6
|
;*** (0) ***
|
||||||
cmp word[ebx],CHUNK_MATNAME
|
mov esi,ebx
|
||||||
jne .no_material
|
add ebx,6
|
||||||
;*** (0) ***
|
mov [edi+offs_mat_name],ebx
|
||||||
mov esi,ebx
|
sub ebx,6
|
||||||
add ebx,6
|
;*** (1) ***
|
||||||
mov [edi+offs_mat_name],ebx
|
.cycle_0: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ «
|
||||||
sub ebx,6
|
add esi,dword[esi+2]
|
||||||
;*** (1) ***
|
cmp word[esi],0xa010
|
||||||
.cycle_0: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ «
|
je @f
|
||||||
add esi,dword[esi+2]
|
cmp ecx,esi
|
||||||
cmp word[esi],0xa010
|
jg .cycle_0 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª
|
||||||
je @f
|
jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ «
|
||||||
cmp ecx,esi
|
@@:
|
||||||
jg .cycle_0 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª
|
;¥á«¨ 諨 梥⠬ â¥à¨ «
|
||||||
jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ «
|
add esi,6
|
||||||
@@:
|
cmp word[esi],0x0011
|
||||||
;¥á«¨ 諨 梥⠬ â¥à¨ «
|
jne .end_material
|
||||||
add esi,6
|
add esi,6
|
||||||
cmp word[esi],0x0011
|
mov dl,byte[esi]
|
||||||
jne .end_material
|
mov [edi+offs_mat_col_ambient+2],dl
|
||||||
add esi,6
|
mov dx,word[esi+1]
|
||||||
mov dl,byte[esi]
|
ror dx,8
|
||||||
mov [edi+offs_mat_col_ambient+2],dl
|
mov [edi+offs_mat_col_ambient],dx
|
||||||
mov dx,word[esi+1]
|
;*** (2) ***
|
||||||
ror dx,8
|
mov esi,ebx
|
||||||
mov [edi+offs_mat_col_ambient],dx
|
.cycle_1: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ «
|
||||||
;*** (2) ***
|
add esi,dword[esi+2]
|
||||||
mov esi,ebx
|
cmp word[esi],0xa020
|
||||||
.cycle_1: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ «
|
je @f
|
||||||
add esi,dword[esi+2]
|
cmp ecx,esi
|
||||||
cmp word[esi],0xa020
|
jg .cycle_1 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª
|
||||||
je @f
|
jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ «
|
||||||
cmp ecx,esi
|
@@:
|
||||||
jg .cycle_1 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª
|
;¥á«¨ 諨 梥⠬ â¥à¨ «
|
||||||
jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ «
|
add esi,6
|
||||||
@@:
|
cmp word[esi],0x0011
|
||||||
;¥á«¨ 諨 梥⠬ â¥à¨ «
|
jne .end_material
|
||||||
add esi,6
|
add esi,6
|
||||||
cmp word[esi],0x0011
|
mov dl,byte[esi]
|
||||||
jne .end_material
|
mov [edi+offs_mat_col_diffuse+2],dl
|
||||||
add esi,6
|
mov dx,word[esi+1]
|
||||||
mov dl,byte[esi]
|
ror dx,8
|
||||||
mov [edi+offs_mat_col_diffuse+2],dl
|
mov [edi+offs_mat_col_diffuse],dx
|
||||||
mov dx,word[esi+1]
|
;*** (3) ***
|
||||||
ror dx,8
|
mov esi,ebx
|
||||||
mov [edi+offs_mat_col_diffuse],dx
|
.cycle_2: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ «
|
||||||
;*** (3) ***
|
add esi,dword[esi+2]
|
||||||
mov esi,ebx
|
cmp word[esi],0xa030
|
||||||
.cycle_2: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ «
|
je @f
|
||||||
add esi,dword[esi+2]
|
cmp ecx,esi
|
||||||
cmp word[esi],0xa030
|
jg .cycle_2 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª
|
||||||
je @f
|
jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ «
|
||||||
cmp ecx,esi
|
@@:
|
||||||
jg .cycle_2 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª
|
;¥á«¨ 諨 梥⠬ â¥à¨ «
|
||||||
jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ «
|
add esi,6
|
||||||
@@:
|
cmp word[esi],0x0011
|
||||||
;¥á«¨ 諨 梥⠬ â¥à¨ «
|
jne .end_material
|
||||||
add esi,6
|
add esi,6
|
||||||
cmp word[esi],0x0011
|
mov dl,byte[esi]
|
||||||
jne .end_material
|
mov [edi+offs_mat_col_specular+2],dl
|
||||||
add esi,6
|
mov dx,word[esi+1]
|
||||||
mov dl,byte[esi]
|
ror dx,8
|
||||||
mov [edi+offs_mat_col_specular+2],dl
|
mov [edi+offs_mat_col_specular],dx
|
||||||
mov dx,word[esi+1]
|
|
||||||
ror dx,8
|
|
||||||
mov [edi+offs_mat_col_specular],dx
|
|
||||||
|
|
||||||
.end_material:
|
.end_material:
|
||||||
.no_material:
|
.no_material:
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
@ -714,6 +724,22 @@ end if
|
|||||||
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
|
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
|
||||||
stdcall [glTranslatef], [edi+offs_obj_x_centr],[edi+offs_obj_y_centr],[edi+offs_obj_z_centr]
|
stdcall [glTranslatef], [edi+offs_obj_x_centr],[edi+offs_obj_y_centr],[edi+offs_obj_z_centr]
|
||||||
|
|
||||||
|
if version_edit eq 0
|
||||||
|
;à¨á®¢ ¨¥ £à ¥© á ¨á¯®«ì§®¢ ¨¥¬ 梥⮢ ¬ â¥à¨ «®¢
|
||||||
|
bt dword[draw_mode],bit_faces_mat
|
||||||
|
jnc @f
|
||||||
|
mov eax,[edi+offs_obj_mat1_data]
|
||||||
|
.b_found:
|
||||||
|
cmp eax,0
|
||||||
|
je .end_triangles
|
||||||
|
mov ebx,eax
|
||||||
|
stdcall get_mat_color, eax
|
||||||
|
stdcall draw_3d_faces_color, edi,ebx,eax
|
||||||
|
stdcall found_mat_faces, ebx
|
||||||
|
jmp .b_found
|
||||||
|
@@:
|
||||||
|
end if
|
||||||
|
|
||||||
;à¨á®¢ ¨¥ â®ç¥ª
|
;à¨á®¢ ¨¥ â®ç¥ª
|
||||||
bt dword[draw_mode],bit_vertexes
|
bt dword[draw_mode],bit_vertexes
|
||||||
jnc .end_points
|
jnc .end_points
|
||||||
@ -863,7 +889,7 @@ SetLight:
|
|||||||
align 4
|
align 4
|
||||||
mnu_vertexes_on:
|
mnu_vertexes_on:
|
||||||
or dword[draw_mode], 1 shl bit_vertexes
|
or dword[draw_mode], 1 shl bit_vertexes
|
||||||
and dword[draw_mode], not (1 shl bit_faces) ;¢ëª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï £à ¥© (çâ®-¡ë ¥ ¬¥è «¨)
|
and dword[draw_mode], not ((1 shl bit_faces)+(1 shl bit_faces_mat)) ;¢ëª«îç ¥¬ ०¨¬ë à¨á®¢ ¨ï, ª®â®àë¥ ¬®£ãâ ¬¥è âì
|
||||||
call update_obj
|
call update_obj
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -871,7 +897,7 @@ mnu_vertexes_on:
|
|||||||
align 4
|
align 4
|
||||||
mnu_edges_on:
|
mnu_edges_on:
|
||||||
or dword[draw_mode], 1 shl bit_faces
|
or dword[draw_mode], 1 shl bit_faces
|
||||||
and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill))
|
and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill)+(1 shl bit_faces_mat))
|
||||||
call update_obj
|
call update_obj
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -879,7 +905,7 @@ mnu_edges_on:
|
|||||||
align 4
|
align 4
|
||||||
mnu_faces_on:
|
mnu_faces_on:
|
||||||
or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill)
|
or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill)
|
||||||
and dword[draw_mode], not (1 shl bit_vertexes)
|
and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_mat))
|
||||||
call update_obj
|
call update_obj
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -908,6 +934,13 @@ update_obj:
|
|||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
|
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ᯫ®èëå £à ¥©
|
||||||
|
align 4
|
||||||
|
mnu_faces_mat:
|
||||||
|
or dword[draw_mode], (1 shl bit_faces_mat)
|
||||||
|
call update_obj
|
||||||
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
update_obj:
|
update_obj:
|
||||||
push eax ebx
|
push eax ebx
|
||||||
@ -918,12 +951,120 @@ push eax ebx
|
|||||||
add ebx,dword[open_file_data] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ ¯ ¬ïâ¨
|
add ebx,dword[open_file_data] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ ¯ ¬ïâ¨
|
||||||
cmp word[ebx],CHUNK_OBJBLOCK
|
cmp word[ebx],CHUNK_OBJBLOCK
|
||||||
jne @f
|
jne @f
|
||||||
add eax,14 ;14=list_offs_obj3d
|
add eax,list_offs_obj3d
|
||||||
stdcall draw_3d, eax
|
stdcall draw_3d,eax
|
||||||
@@:
|
@@:
|
||||||
pop ebx eax
|
pop ebx eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;input:
|
||||||
|
; p_mat - 㪠§ â¥«ì ¤ ë¥ ¯à¥¤ë¤ã饣® ¬ â¥à¨ «
|
||||||
|
align 4
|
||||||
|
proc found_mat_faces uses ebx, p_mat:dword
|
||||||
|
mov eax,[p_mat]
|
||||||
|
add eax,[eax+2]
|
||||||
|
cmp word[eax],CHUNK_FACEMAT
|
||||||
|
je @f
|
||||||
|
xor eax,eax
|
||||||
|
@@:
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc get_mat_color uses ebx ecx edx edi esi, p_mat:dword
|
||||||
|
stdcall [tl_node_poi_get_info], tree1,0
|
||||||
|
mov ecx,eax
|
||||||
|
.cycle_0:
|
||||||
|
cmp ecx,0
|
||||||
|
je .cycle_0_end
|
||||||
|
stdcall [tl_node_poi_get_data], tree1,ecx
|
||||||
|
mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª
|
||||||
|
add ebx,[open_file_data]
|
||||||
|
cmp word[ebx],CHUNK_MATERIAL
|
||||||
|
jne .end_add_p3
|
||||||
|
add eax,list_offs_obj3d
|
||||||
|
mov esi,[eax+offs_mat_name]
|
||||||
|
cmp esi,0
|
||||||
|
jne @f
|
||||||
|
;init material
|
||||||
|
stdcall mat_init,eax,ebx
|
||||||
|
mov esi,[eax+offs_mat_name]
|
||||||
|
@@:
|
||||||
|
mov edi,[p_mat]
|
||||||
|
mov eax,5
|
||||||
|
add edi,eax
|
||||||
|
align 4
|
||||||
|
@@:
|
||||||
|
cmp al,0
|
||||||
|
je .found
|
||||||
|
lodsb
|
||||||
|
inc edi
|
||||||
|
cmp byte[edi],al
|
||||||
|
je @b
|
||||||
|
.end_add_p3:
|
||||||
|
stdcall [tl_node_poi_get_next_info], tree1,ecx
|
||||||
|
mov ecx,eax ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã
|
||||||
|
jmp .cycle_0
|
||||||
|
.cycle_0_end:
|
||||||
|
|
||||||
|
.no_found:
|
||||||
|
xor eax,eax
|
||||||
|
jmp .end_f
|
||||||
|
.found:
|
||||||
|
stdcall [tl_node_poi_get_data], tree1,ecx
|
||||||
|
add eax,list_offs_obj3d
|
||||||
|
mov eax,[eax+offs_mat_col_diffuse]
|
||||||
|
.end_f:
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc draw_3d_faces_color o_data:dword, p_mat:dword, color:dword
|
||||||
|
pushad
|
||||||
|
stdcall [glPolygonMode], GL_FRONT_AND_BACK,GL_FILL
|
||||||
|
stdcall [glColor3ub],[color+2],[color+1],[color]
|
||||||
|
stdcall [glBegin],GL_TRIANGLES
|
||||||
|
mov edi,[o_data]
|
||||||
|
mov esi,[p_mat]
|
||||||
|
add esi,6
|
||||||
|
@@:
|
||||||
|
lodsb
|
||||||
|
cmp al,0
|
||||||
|
jne @b
|
||||||
|
movzx ecx,word[esi] ;ecx - ç¨á«® £à ¥© á ¤ ë¬ ¬ â¥à¨ «®¬
|
||||||
|
mov edx,[edi+offs_obj_poi_data]
|
||||||
|
align 4
|
||||||
|
@@:
|
||||||
|
add esi,2
|
||||||
|
;word[esi] - ®¬¥à âà¥ã£®«ì¨ª
|
||||||
|
movzx ebx,word[esi]
|
||||||
|
shl ebx,3
|
||||||
|
add ebx,[edi+offs_obj_tri_data]
|
||||||
|
|
||||||
|
movzx eax,word[ebx] ;1-ï ¢¥àè¨
|
||||||
|
imul eax,12 ;float(x,y,z)
|
||||||
|
add eax,edx
|
||||||
|
stdcall [glVertex3f], [eax],[eax+4],[eax+8]
|
||||||
|
|
||||||
|
movzx eax,word[ebx+2] ;2-ï ¢¥àè¨
|
||||||
|
imul eax,12 ;float(x,y,z)
|
||||||
|
add eax,edx
|
||||||
|
stdcall [glVertex3f], [eax],[eax+4],[eax+8]
|
||||||
|
|
||||||
|
movzx eax,word[ebx+4] ;3-ï ¢¥àè¨
|
||||||
|
imul eax,12 ;float(x,y,z)
|
||||||
|
add eax,edx
|
||||||
|
stdcall [glVertex3f], [eax],[eax+4],[eax+8]
|
||||||
|
|
||||||
|
dec ecx
|
||||||
|
jnz @b
|
||||||
|
stdcall [glEnd]
|
||||||
|
|
||||||
|
.end_f:
|
||||||
|
popad
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 3.5 KiB |
Loading…
Reference in New Issue
Block a user