Subversion Repositories Kolibri OS

Rev

Rev 6060 | Rev 6509 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6060 Rev 6081
Line 46... Line 46...
46
offs_obj_z_max equ 64
46
offs_obj_z_max equ 64
47
offs_obj_z_min equ 68
47
offs_obj_z_min equ 68
48
offs_obj_z_centr equ 72
48
offs_obj_z_centr equ 72
49
offs_obj_z_scale equ 76
49
offs_obj_z_scale equ 76
Line -... Line 50...
-
 
50
 
-
 
51
struct material
-
 
52
	name dd ?
-
 
53
	col_ambient dd ? ;梥⠬ â¥à¨ « 
-
 
54
	col_diffuse dd ?
-
 
55
	col_specular dd ?
-
 
56
ends
-
 
57
 
-
 
58
offs_mat_name equ 0
-
 
59
offs_mat_col_ambient equ 4
-
 
60
offs_mat_col_diffuse equ 8
Line 50... Line 61...
50
 
61
offs_mat_col_specular equ 12
51
 
62
 
52
bit_vertexes equ 0
63
bit_vertexes equ 0
53
bit_faces equ 1
64
bit_faces equ 1
Line 69... Line 80...
69
key_select db 'col_select',0
80
key_select db 'col_select',0
Line 70... Line 81...
70
 
81
 
Line -... Line 82...
-
 
82
 
-
 
83
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
-
 
84
 
-
 
85
align 4
-
 
86
proc hex_in_str, buf:dword,val:dword,zif:dword
-
 
87
pushad
-
 
88
	mov edi,dword[buf]
-
 
89
	mov ecx,dword[zif]
-
 
90
	add edi,ecx
-
 
91
	dec edi
-
 
92
	mov ebx,dword[val]
-
 
93
 
-
 
94
	.cycle:
-
 
95
		mov al,bl
-
 
96
		and al,0xf
-
 
97
		cmp al,10
-
 
98
		jl @f
-
 
99
			add al,'a'-'0'-10
-
 
100
		@@:
-
 
101
		add al,'0'
-
 
102
		mov byte[edi],al
-
 
103
		dec edi
-
 
104
		shr ebx,4
-
 
105
	loop .cycle
Line 71... Line 106...
71
 
106
popad
72
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
107
	ret
73
 
108
endp
74
 
109
 
Line 501... Line 536...
501
	.no_points:
536
	.no_points:
502
	popad
537
	popad
503
	ret
538
	ret
504
endp
539
endp
Line -... Line 540...
-
 
540
 
-
 
541
;­ áâனª  ¬ â¥à¨ « 
-
 
542
align 4
-
 
543
proc mat_init, m_data:dword
-
 
544
	pushad
-
 
545
	mov edi,[m_data]
-
 
546
 
-
 
547
	;... clear edi ...
-
 
548
	mov dword[edi+offs_mat_name],0
-
 
549
	mov dword[edi+offs_mat_col_ambient],0
-
 
550
	mov dword[edi+offs_mat_col_diffuse],0
-
 
551
	mov dword[edi+offs_mat_col_specular],0
-
 
552
 
-
 
553
	stdcall [tl_node_get_data],tree1
-
 
554
	xor edx,edx
-
 
555
	cmp eax,0
-
 
556
	je .no_material
-
 
557
		mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
-
 
558
		add ebx,[open_file_data]
-
 
559
		xor ecx,ecx
-
 
560
		cmp word[ebx],CHUNK_MATERIAL
-
 
561
		jne .no_material
-
 
562
			mov ecx,ebx
-
 
563
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
-
 
564
			add ebx,6
-
 
565
		cmp word[ebx],CHUNK_MATNAME
-
 
566
		jne .no_material
-
 
567
			;*** (0) ***
-
 
568
			mov esi,ebx
-
 
569
			add ebx,6
-
 
570
			mov [edi+offs_mat_name],ebx
-
 
571
			sub ebx,6
-
 
572
			;*** (1) ***
-
 
573
			.cycle_0: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
-
 
574
				add esi,dword[esi+2]
-
 
575
				cmp word[esi],0xa010
-
 
576
				je @f
-
 
577
					cmp ecx,esi
-
 
578
					jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
-
 
579
					jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
580
			@@:
-
 
581
			;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
582
			add esi,6
-
 
583
			cmp word[esi],0x0011
-
 
584
			jne .end_material
-
 
585
				add esi,6
-
 
586
				mov dl,byte[esi]
-
 
587
				mov [edi+offs_mat_col_ambient+2],dl
-
 
588
				mov dx,word[esi+1]
-
 
589
				ror dx,8
-
 
590
				mov [edi+offs_mat_col_ambient],dx
-
 
591
			;*** (2) ***
-
 
592
			mov esi,ebx
-
 
593
			.cycle_1: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
-
 
594
				add esi,dword[esi+2]
-
 
595
				cmp word[esi],0xa020
-
 
596
				je @f
-
 
597
					cmp ecx,esi
-
 
598
					jg .cycle_1 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
-
 
599
					jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
600
			@@:
-
 
601
			;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
602
			add esi,6
-
 
603
			cmp word[esi],0x0011
-
 
604
			jne .end_material
-
 
605
				add esi,6
-
 
606
				mov dl,byte[esi]
-
 
607
				mov [edi+offs_mat_col_diffuse+2],dl
-
 
608
				mov dx,word[esi+1]
-
 
609
				ror dx,8
-
 
610
				mov [edi+offs_mat_col_diffuse],dx
-
 
611
			;*** (3) ***
-
 
612
			mov esi,ebx
-
 
613
			.cycle_2: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
-
 
614
				add esi,dword[esi+2]
-
 
615
				cmp word[esi],0xa030
-
 
616
				je @f
-
 
617
					cmp ecx,esi
-
 
618
					jg .cycle_2 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
-
 
619
					jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
620
			@@:
-
 
621
			;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
622
			add esi,6
-
 
623
			cmp word[esi],0x0011
-
 
624
			jne .end_material
-
 
625
				add esi,6
-
 
626
				mov dl,byte[esi]
-
 
627
				mov [edi+offs_mat_col_specular+2],dl
-
 
628
				mov dx,word[esi+1]
-
 
629
				ror dx,8
-
 
630
				mov [edi+offs_mat_col_specular],dx
-
 
631
 
-
 
632
			.end_material:
-
 
633
	.no_material:
-
 
634
	popad
-
 
635
	ret
-
 
636
endp
-
 
637
 
-
 
638
align 4
-
 
639
proc buf_draw_beg uses eax, buf:dword
-
 
640
	mov eax,[buf]
-
 
641
	stdcall [buf2d_clear], eax, [eax+16] ;ç¨á⨬ ¡ãä¥à
-
 
642
	stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff
-
 
643
	stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff
-
 
644
	cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦­  ®è¨¡ª  ä ©« 
-
 
645
	jne @f
-
 
646
		stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000
-
 
647
	@@:
-
 
648
	ret
-
 
649
endp
-
 
650
 
-
 
651
;à¨á®¢ ­¨¥ ¬ â¥à¨ « 
-
 
652
align 4
-
 
653
proc draw_material uses edi, m_data:dword
-
 
654
	mov edi,[m_data]
-
 
655
	stdcall buf_draw_beg, buf_ogl
-
 
656
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff
-
 
657
 
-
 
658
	stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+offs_mat_name],15,45,0 ;¨¬ï ¬ â¥à¨ « 
-
 
659
	stdcall draw_color, [edi+offs_mat_col_ambient], txt_a010,2,55 ;®ªà㦠î騩 梥â
-
 
660
	stdcall draw_color, [edi+offs_mat_col_diffuse], txt_a020,2,75 ;¤¨äã§­ë© æ¢¥â
-
 
661
	stdcall draw_color, [edi+offs_mat_col_specular],txt_a030,2,95 ;§¥àª «ì­ë© 梥â
-
 
662
 
-
 
663
	stdcall [buf2d_draw], buf_ogl
-
 
664
	ret
-
 
665
endp
-
 
666
 
-
 
667
align 4
-
 
668
proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword
-
 
669
	mov eax,[c_x]
-
 
670
	mov ebx,[c_y]
-
 
671
	; ¯àאַ㣮«ì­¨ª
-
 
672
	inc ebx
-
 
673
	stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color]
-
 
674
	dec ebx
-
 
675
	stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0
-
 
676
	; ¯®¤¯¨á¨
-
 
677
	add eax,33
-
 
678
	stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0
-
 
679
	add ebx,10
-
 
680
	stdcall hex_in_str, buffer,[color],6
-
 
681
	mov byte[buffer+6],0
-
 
682
	stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0
-
 
683
	ret
-
 
684
endp
505
 
685
 
506
;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
686
;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
507
align 4
687
align 4
508
proc draw_3d uses eax ebx ecx edi, o_data:dword
688
proc draw_3d uses eax ebx ecx edi, o_data:dword
509
	mov edi,[o_data]
689
	mov edi,[o_data]
Line 728... Line 908...
728
 
908
 
Line 729... Line 909...
729
else
909
else
730
 
910
 
731
align 4
911
align 4
732
update_obj:
912
update_obj:
733
push eax
913
push eax ebx
734
	stdcall [tl_node_get_data],tree1
914
	stdcall [tl_node_get_data],tree1
-
 
915
	cmp eax,0
-
 
916
	je @f
-
 
917
		mov ebx,dword[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
-
 
918
		add ebx,dword[open_file_data] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ ¯ ¬ïâ¨
735
	cmp eax,0
919
		cmp word[ebx],CHUNK_OBJBLOCK
736
	je @f
920
		jne @f
737
		add eax,14 ;14=list_offs_obj3d
921
			add eax,14 ;14=list_offs_obj3d
738
		stdcall draw_3d, eax
922
			stdcall draw_3d, eax
739
	@@:
923
	@@:
Line 740... Line 924...
740
pop eax
924
pop ebx eax
Line 741... Line 925...
741
	ret
925
	ret