Subversion Repositories Kolibri OS

Rev

Rev 6513 | Rev 7610 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6513 Rev 6889
1
;
1
;
2
; áâàãªâãàë ¨ ä㭪樨 ¤«ï à¨á®¢ ­¨ï 3d ®¡ê¥ªâ®¢
2
; áâàãªâãàë ¨ ä㭪樨 ¤«ï à¨á®¢ ­¨ï 3d ®¡ê¥ªâ®¢
3
;
3
;
4
 
4
 
5
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
5
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
6
 
6
 
7
struct obj_3d
7
struct obj_3d
8
	poi_data dd ? ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
8
	poi_data dd ? ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
9
	poi_count dd ? ;ª®««¨ç¥á⢮ ¢¥à設
9
	poi_count dd ? ;ª®««¨ç¥á⢮ ¢¥à設
10
	tri_data dd ? ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
10
	tri_data dd ? ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
11
	tri_count dd ? ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
11
	tri_count dd ? ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
12
	normals_poi_data dd ? ;¤ ­­ë¥ ­®à¬ «¥© ª â®çª ¬
12
	normals_poi_data dd ? ;¤ ­­ë¥ ­®à¬ «¥© ª â®çª ¬
13
	normals_poi_count dd ? ;ª®««¨ç¥á⢮ ­®à¬ «¥© ª â®çª ¬
13
	normals_poi_count dd ? ;ª®««¨ç¥á⢮ ­®à¬ «¥© ª â®çª ¬
14
	normals_tri_data dd ? ;¤ ­­ë¥ ­®à¬ «¥© ª £à ­ï¬
14
	normals_tri_data dd ? ;¤ ­­ë¥ ­®à¬ «¥© ª £à ­ï¬
15
	normals_tri_count dd ? ;ª®««¨ç¥á⢮ ­®à¬ «¥© ª £à ­ï¬
15
	normals_tri_count dd ? ;ª®««¨ç¥á⢮ ­®à¬ «¥© ª £à ­ï¬
16
	x_max dd ?
16
	x_max dd ?
17
	x_min dd ?
17
	x_min dd ?
18
	x_centr dd ?
18
	x_centr dd ?
19
	x_scale dd ?
19
	x_scale dd ?
20
	y_max dd ?
20
	y_max dd ?
21
	y_min dd ?
21
	y_min dd ?
22
	y_centr dd ?
22
	y_centr dd ?
23
	y_scale dd ?
23
	y_scale dd ?
24
	z_max dd ?
24
	z_max dd ?
25
	z_min dd ?
25
	z_min dd ?
26
	z_centr dd ?
26
	z_centr dd ?
27
	z_scale dd ?
27
	z_scale dd ?
28
	mat1_data dd ? ;¤ ­­ë¥ 1-£® ¬ â¥à¨ «  ¢ ®¡ê¥ªâ¥
28
	mat1_data dd ? ;¤ ­­ë¥ 1-£® ¬ â¥à¨ «  ¢ ®¡ê¥ªâ¥
29
ends
29
ends
30
 
-
 
31
offs_obj_poi_data equ 0 ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
-
 
32
offs_obj_poi_count equ 4 ;ª®««¨ç¥á⢮ ¢¥à設
-
 
33
offs_obj_tri_data equ 8 ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
-
 
34
offs_obj_tri_count equ 12 ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
-
 
35
offs_obj_normals_poi_data equ 16
-
 
36
offs_obj_normals_poi_count equ 20
-
 
37
offs_obj_normals_tri_data equ 24
-
 
38
offs_obj_normals_tri_count equ 28
-
 
39
offs_obj_x_max equ 32
-
 
40
offs_obj_x_min equ 36
-
 
41
offs_obj_x_centr equ 40
-
 
42
offs_obj_x_scale equ 44
-
 
43
offs_obj_y_max equ 48
-
 
44
offs_obj_y_min equ 52
-
 
45
offs_obj_y_centr equ 56
-
 
46
offs_obj_y_scale equ 60
-
 
47
offs_obj_z_max equ 64
-
 
48
offs_obj_z_min equ 68
-
 
49
offs_obj_z_centr equ 72
-
 
50
offs_obj_z_scale equ 76
-
 
51
offs_obj_mat1_data equ 80
-
 
52
 
30
 
53
struct material
31
struct material
54
	name dd ?
32
	name dd ?
55
	col_ambient dd ? ;梥⠬ â¥à¨ « 
33
	col_ambient dd ? ;梥⠬ â¥à¨ « 
56
	col_diffuse dd ?
34
	col_diffuse dd ?
57
	col_specular dd ?
35
	col_specular dd ?
58
ends
36
ends
59
 
-
 
60
offs_mat_name equ 0
-
 
61
offs_mat_col_ambient equ 4
-
 
62
offs_mat_col_diffuse equ 8
-
 
63
offs_mat_col_specular equ 12
-
 
64
 
37
 
65
bit_vertexes equ 0
38
bit_vertexes equ 0
66
bit_faces equ 1 ;£à ­¨ à¨áãîâáï ª®­âãà ¬¨
39
bit_faces equ 1 ;£à ­¨ à¨áãîâáï ª®­âãà ¬¨
67
bit_faces_fill equ 2 ;£à ­¨ á § «¨¢ª®©
40
bit_faces_fill equ 2 ;£à ­¨ á § «¨¢ª®©
68
bit_light equ 3
41
bit_light equ 3
69
bit_faces_mat equ 4 ;£à ­¨ á 梥⮬ ¬ â¥à¨ « 
42
bit_faces_mat equ 4 ;£à ­¨ á 梥⮬ ¬ â¥à¨ « 
70
bit_smooth equ 5 ;£à ­¨ ᮠᣫ ¦¨¢ ­¨¥¬
43
bit_smooth equ 5 ;£à ­¨ ᮠᣫ ¦¨¢ ­¨¥¬
71
 
44
 
72
ini_name db 'info3ds.ini',0
45
ini_name db 'info3ds.ini',0
73
ini_sec_w3d db 'Window 3d',0
46
ini_sec_w3d db 'Window 3d',0
74
key_dv  db 'draw_vertices',0
47
key_dv  db 'draw_vertices',0
75
key_df  db 'draw_faces',0
48
key_df  db 'draw_faces',0
76
key_dff db 'draw_faces_fill',0
49
key_dff db 'draw_faces_fill',0
77
key_dfm db 'draw_faces_material',0
50
key_dfm db 'draw_faces_material',0
78
key_dl  db 'draw_light',0
51
key_dl  db 'draw_light',0
79
key_ds  db 'draw_smooth',0
52
key_ds  db 'draw_smooth',0
80
key_ox  db 'col_ox',0
53
key_ox  db 'col_ox',0
81
key_oy  db 'col_oy',0
54
key_oy  db 'col_oy',0
82
key_oz  db 'col_oz',0
55
key_oz  db 'col_oz',0
83
key_bk  db 'col_bkgnd',0
56
key_bk  db 'col_bkgnd',0
84
key_vert db 'col_vertices',0
57
key_vert db 'col_vertices',0
85
key_face db 'col_faces',0
58
key_face db 'col_faces',0
86
key_select db 'col_select',0
59
key_select db 'col_select',0
-
 
60
 
-
 
61
txt_err_save_img_file:
-
 
62
if lang eq ru
-
 
63
	db '¥ ¬®£ã á®åà ­¨âì ä ©«.',0
-
 
64
else
-
 
65
	db 'Can',39,'t save file.',0
-
 
66
end if
87
 
67
 
-
 
68
align 4
-
 
69
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
88
 
70
png_data dd ?
89
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
71
png_size dd ?
90
 
72
 
91
align 4
73
align 4
92
proc hex_in_str, buf:dword,val:dword,zif:dword
74
proc hex_in_str, buf:dword,val:dword,zif:dword
93
pushad
75
pushad
94
	mov edi,dword[buf]
76
	mov edi,dword[buf]
95
	mov ecx,dword[zif]
77
	mov ecx,dword[zif]
96
	add edi,ecx
78
	add edi,ecx
97
	dec edi
79
	dec edi
98
	mov ebx,dword[val]
80
	mov ebx,dword[val]
99
 
81
 
100
	.cycle:
82
	.cycle:
101
		mov al,bl
83
		mov al,bl
102
		and al,0xf
84
		and al,0xf
103
		cmp al,10
85
		cmp al,10
104
		jl @f
86
		jl @f
105
			add al,'a'-'0'-10
87
			add al,'a'-'0'-10
106
		@@:
88
		@@:
107
		add al,'0'
89
		add al,'0'
108
		mov byte[edi],al
90
		mov byte[edi],al
109
		dec edi
91
		dec edi
110
		shr ebx,4
92
		shr ebx,4
111
	loop .cycle
93
	loop .cycle
112
popad
94
popad
113
	ret
95
	ret
114
endp
96
endp
115
 
97
 
116
;ãáâ ­®¢ª  ¢á¥å ®á­®¢­ëå ¯¥à¥¬¥­­ëå ¯® 㬮«ç ­¨î
98
;ãáâ ­®¢ª  ¢á¥å ®á­®¢­ëå ¯¥à¥¬¥­­ëå ¯® 㬮«ç ­¨î
117
align 4
99
align 4
118
proc obj_clear_param uses edi, o_data:dword
100
proc obj_clear_param uses edi, o_data:dword
119
	mov edi,[o_data]
101
	mov edi,[o_data]
120
	;®¡­ã«¥­¨¥ 㪠§ â¥«¥© ­  ¤ ­­ë¥ ®¡ê¥ªâ®¢
102
	;®¡­ã«¥­¨¥ 㪠§ â¥«¥© ­  ¤ ­­ë¥ ®¡ê¥ªâ®¢
121
	mov dword[edi+offs_obj_poi_data],0
103
	mov dword[edi+obj_3d.poi_data],0
122
	mov dword[edi+offs_obj_poi_count],0
104
	mov dword[edi+obj_3d.poi_count],0
123
	mov dword[edi+offs_obj_tri_data],0
105
	mov dword[edi+obj_3d.tri_data],0
124
	mov dword[edi+offs_obj_tri_count],0
106
	mov dword[edi+obj_3d.tri_count],0
125
	mov dword[edi+offs_obj_normals_tri_count],0
107
	mov dword[edi+obj_3d.normals_tri_count],0
126
	mov dword[edi+offs_obj_normals_poi_count],0
108
	mov dword[edi+obj_3d.normals_poi_count],0
127
	mov dword[edi+offs_obj_mat1_data],0
109
	mov dword[edi+obj_3d.mat1_data],0
128
	cmp dword[edi+offs_obj_normals_tri_data],0
110
	cmp dword[edi+obj_3d.normals_tri_data],0
129
	je @f
111
	je @f
130
		stdcall mem.Free,[edi+offs_obj_normals_tri_data]
112
		stdcall mem.Free,[edi+obj_3d.normals_tri_data]
131
		mov dword[edi+offs_obj_normals_tri_data],0
113
		mov dword[edi+obj_3d.normals_tri_data],0
132
	@@:
114
	@@:
133
	cmp dword[edi+offs_obj_normals_poi_data],0
115
	cmp dword[edi+obj_3d.normals_poi_data],0
134
	je @f
116
	je @f
135
		stdcall mem.Free,[edi+offs_obj_normals_poi_data]
117
		stdcall mem.Free,[edi+obj_3d.normals_poi_data]
136
		mov dword[edi+offs_obj_normals_poi_data],0
118
		mov dword[edi+obj_3d.normals_poi_data],0
137
	@@:
119
	@@:
138
	ret
120
	ret
139
endp
121
endp
140
 
122
 
141
;¯®¨áª ¤ ­­ëå
123
;¯®¨áª ¤ ­­ëå
142
;input:
124
;input:
143
;eax - ⥪ã騩 㧥«
125
;eax - ⥪ã騩 㧥«
144
;output:
126
;output:
145
;eax - áâàãªâãà  â¥ªã饣® 㧫  (¨«¨ 0 ¯à¨ ­¥ã¤ ç¥)
127
;eax - áâàãªâãà  â¥ªã饣® 㧫  (¨«¨ 0 ¯à¨ ­¥ã¤ ç¥)
146
align 4
128
align 4
147
proc found_block_data uses ebx ecx edx, tlist:dword
129
proc found_block_data uses ebx ecx edx, tlist:dword
148
	mov edx,[tlist]
130
	mov edx,[tlist]
149
	mov ecx,eax
131
	mov ecx,eax
150
	stdcall [tl_node_poi_get_info], edx,0
132
	stdcall [tl_node_poi_get_info], edx,0
151
	@@:
133
	@@:
152
		mov ebx,eax
134
		mov ebx,eax
153
		stdcall [tl_node_poi_get_data], edx,ebx
135
		stdcall [tl_node_poi_get_data], edx,ebx
154
		cmp eax,ecx
136
		cmp eax,ecx
155
		je @f ;¥á«¨ ¯®¯ «¨ ­  ¢ë¡à ­­ë© 㧥«
137
		je @f ;¥á«¨ ¯®¯ «¨ ­  ¢ë¡à ­­ë© 㧥«
156
		stdcall [tl_node_poi_get_next_info], edx,ebx
138
		stdcall [tl_node_poi_get_next_info], edx,ebx
157
		cmp eax,0
139
		cmp eax,0
158
		jne @b
140
		jne @b
159
		jmp .end
141
		jmp .end
160
	@@:
142
	@@:
161
		mov eax,ebx
143
		mov eax,ebx
162
	.end:
144
	.end:
163
	ret
145
	ret
164
endp
146
endp
165
 
147
 
166
;ãáâ ­®¢ª  à §¬¥à®¢ ®¡ê¥ªâ 
148
;ãáâ ­®¢ª  à §¬¥à®¢ ®¡ê¥ªâ 
167
align 4
149
align 4
168
proc obj_set_sizes uses eax ebx esi edi, o_data:dword
150
proc obj_set_sizes uses eax ebx esi edi, o_data:dword
169
	mov edi,[o_data]
151
	mov edi,[o_data]
170
	cmp dword[edi+offs_obj_poi_count],0
152
	cmp dword[edi+obj_3d.poi_count],0
171
	je .end
153
	je .end
172
		finit
154
		finit
173
		mov eax,[edi+offs_obj_poi_data]
155
		mov eax,[edi+obj_3d.poi_data]
174
		mov ebx,dword[eax]
156
		mov ebx,dword[eax]
175
		mov [edi+offs_obj_x_min],ebx
157
		mov [edi+obj_3d.x_min],ebx
176
		mov [edi+offs_obj_x_max],ebx
158
		mov [edi+obj_3d.x_max],ebx
177
		mov ebx,dword[eax+4]
159
		mov ebx,dword[eax+4]
178
		mov [edi+offs_obj_y_min],ebx
160
		mov [edi+obj_3d.y_min],ebx
179
		mov [edi+offs_obj_y_max],ebx
161
		mov [edi+obj_3d.y_max],ebx
180
		mov ebx,dword[eax+8]
162
		mov ebx,dword[eax+8]
181
		mov [edi+offs_obj_z_min],ebx
163
		mov [edi+obj_3d.z_min],ebx
182
		mov [edi+offs_obj_z_max],ebx
164
		mov [edi+obj_3d.z_max],ebx
183
 
165
 
184
	mov ebx,[edi+offs_obj_poi_data]
166
	mov ebx,[edi+obj_3d.poi_data]
185
	mov esi,[edi+offs_obj_poi_count]
167
	mov esi,[edi+obj_3d.poi_count]
186
align 4
168
align 4
187
	.cycle_0: ;à ¡®â  á ª®®à¤¨­ â®© x
169
	.cycle_0: ;à ¡®â  á ª®®à¤¨­ â®© x
188
		fld dword[ebx]
170
		fld dword[ebx]
189
		fld dword[edi+offs_obj_x_min]
171
		fld dword[edi+obj_3d.x_min]
190
		fcomp
172
		fcomp
191
		fstsw ax
173
		fstsw ax
192
		sahf
174
		sahf
193
		jb @f
175
		jb @f
194
			mov eax,[ebx]
176
			mov eax,[ebx]
195
			mov [edi+offs_obj_x_min],eax
177
			mov [edi+obj_3d.x_min],eax
196
			ffree st0
178
			ffree st0
197
			fincstp
179
			fincstp
198
			jmp .next_x
180
			jmp .next_x
199
		@@:
181
		@@:
200
		fld dword[edi+offs_obj_x_max]
182
		fld dword[edi+obj_3d.x_max]
201
		fcompp
183
		fcompp
202
		fstsw ax
184
		fstsw ax
203
		sahf
185
		sahf
204
		ja .next_x
186
		ja .next_x
205
			mov eax,[ebx]
187
			mov eax,[ebx]
206
			mov [edi+offs_obj_x_max],eax
188
			mov [edi+obj_3d.x_max],eax
207
		.next_x:
189
		.next_x:
208
 
190
 
209
		add ebx,12
191
		add ebx,12
210
		dec esi
192
		dec esi
211
		jnz .cycle_0
193
		jnz .cycle_0
212
 
194
 
213
		fld1
195
		fld1
214
		fld dword[edi+offs_obj_x_max]
196
		fld dword[edi+obj_3d.x_max]
215
		fsub dword[edi+offs_obj_x_min]
197
		fsub dword[edi+obj_3d.x_min]
216
		fst dword[edi+offs_obj_x_centr]
198
		fst dword[edi+obj_3d.x_centr]
217
		fdivp ;1/size.x
199
		fdivp ;1/size.x
218
		fstp dword[edi+offs_obj_x_scale]
200
		fstp dword[edi+obj_3d.x_scale]
219
 
201
 
220
		fld dword[edi+offs_obj_x_centr]
202
		fld dword[edi+obj_3d.x_centr]
221
		fld1
203
		fld1
222
		fld1
204
		fld1
223
		faddp
205
		faddp
224
		fdivp ;centr.x = size.x/2
206
		fdivp ;centr.x = size.x/2
225
		fadd dword[edi+offs_obj_x_min]
207
		fadd dword[edi+obj_3d.x_min]
226
		fchs
208
		fchs
227
		fstp dword[edi+offs_obj_x_centr]
209
		fstp dword[edi+obj_3d.x_centr]
228
 
210
 
229
	mov ebx,[edi+offs_obj_poi_data]
211
	mov ebx,[edi+obj_3d.poi_data]
230
	mov esi,[edi+offs_obj_poi_count]
212
	mov esi,[edi+obj_3d.poi_count]
231
align 4
213
align 4
232
	.cycle_1: ;à ¡®â  á ª®®à¤¨­ â®© y
214
	.cycle_1: ;à ¡®â  á ª®®à¤¨­ â®© y
233
		fld dword[ebx+4]
215
		fld dword[ebx+4]
234
		fld dword[edi+offs_obj_y_min]
216
		fld dword[edi+obj_3d.y_min]
235
		fcomp
217
		fcomp
236
		fstsw ax
218
		fstsw ax
237
		sahf
219
		sahf
238
		jb @f
220
		jb @f
239
			mov eax,[ebx+4]
221
			mov eax,[ebx+4]
240
			mov [edi+offs_obj_y_min],eax
222
			mov [edi+obj_3d.y_min],eax
241
			ffree st0
223
			ffree st0
242
			fincstp
224
			fincstp
243
			jmp .next_y
225
			jmp .next_y
244
		@@:
226
		@@:
245
		fld dword[edi+offs_obj_y_max]
227
		fld dword[edi+obj_3d.y_max]
246
		fcompp
228
		fcompp
247
		fstsw ax
229
		fstsw ax
248
		sahf
230
		sahf
249
		ja .next_y
231
		ja .next_y
250
			mov eax,[ebx+4]
232
			mov eax,[ebx+4]
251
			mov [edi+offs_obj_y_max],eax
233
			mov [edi+obj_3d.y_max],eax
252
		.next_y:
234
		.next_y:
253
 
235
 
254
		add ebx,12
236
		add ebx,12
255
		dec esi
237
		dec esi
256
		jnz .cycle_1
238
		jnz .cycle_1
257
 
239
 
258
		fld1
240
		fld1
259
		fld dword[edi+offs_obj_y_max]
241
		fld dword[edi+obj_3d.y_max]
260
		fsub dword[edi+offs_obj_y_min]
242
		fsub dword[edi+obj_3d.y_min]
261
		fst dword[edi+offs_obj_y_centr]
243
		fst dword[edi+obj_3d.y_centr]
262
		fdivp ;1/size.y
244
		fdivp ;1/size.y
263
		fstp dword[edi+offs_obj_y_scale]
245
		fstp dword[edi+obj_3d.y_scale]
264
 
246
 
265
		fld dword[edi+offs_obj_y_centr]
247
		fld dword[edi+obj_3d.y_centr]
266
		fld1
248
		fld1
267
		fld1
249
		fld1
268
		faddp
250
		faddp
269
		fdivp ;centr.y = size.y/2
251
		fdivp ;centr.y = size.y/2
270
		fadd dword[edi+offs_obj_y_min]
252
		fadd dword[edi+obj_3d.y_min]
271
		fchs
253
		fchs
272
		fstp dword[edi+offs_obj_y_centr]
254
		fstp dword[edi+obj_3d.y_centr]
273
 
255
 
274
	mov ebx,[edi+offs_obj_poi_data]
256
	mov ebx,[edi+obj_3d.poi_data]
275
	mov esi,[edi+offs_obj_poi_count]
257
	mov esi,[edi+obj_3d.poi_count]
276
align 4
258
align 4
277
	.cycle_2: ;à ¡®â  á ª®®à¤¨­ â®© z
259
	.cycle_2: ;à ¡®â  á ª®®à¤¨­ â®© z
278
		fld dword[ebx+8]
260
		fld dword[ebx+8]
279
		fld dword[edi+offs_obj_z_min]
261
		fld dword[edi+obj_3d.z_min]
280
		fcomp
262
		fcomp
281
		fstsw ax
263
		fstsw ax
282
		sahf
264
		sahf
283
		jb @f
265
		jb @f
284
			mov eax,[ebx+8]
266
			mov eax,[ebx+8]
285
			mov [edi+offs_obj_z_min],eax
267
			mov [edi+obj_3d.z_min],eax
286
			ffree st0
268
			ffree st0
287
			fincstp
269
			fincstp
288
			jmp .next_z
270
			jmp .next_z
289
		@@:
271
		@@:
290
		fld dword[edi+offs_obj_z_max]
272
		fld dword[edi+obj_3d.z_max]
291
		fcompp
273
		fcompp
292
		fstsw ax
274
		fstsw ax
293
		sahf
275
		sahf
294
		ja .next_z
276
		ja .next_z
295
			mov eax,[ebx+8]
277
			mov eax,[ebx+8]
296
			mov [edi+offs_obj_z_max],eax
278
			mov [edi+obj_3d.z_max],eax
297
		.next_z:
279
		.next_z:
298
 
280
 
299
		add ebx,12
281
		add ebx,12
300
		dec esi
282
		dec esi
301
		jnz .cycle_2
283
		jnz .cycle_2
302
 
284
 
303
		fld1
285
		fld1
304
		fld dword[edi+offs_obj_z_max]
286
		fld dword[edi+obj_3d.z_max]
305
		fsub dword[edi+offs_obj_z_min]
287
		fsub dword[edi+obj_3d.z_min]
306
		fst dword[edi+offs_obj_z_centr]
288
		fst dword[edi+obj_3d.z_centr]
307
		fdivp ;1/size.z
289
		fdivp ;1/size.z
308
		fstp dword[edi+offs_obj_z_scale]
290
		fstp dword[edi+obj_3d.z_scale]
309
 
291
 
310
		fld dword[edi+offs_obj_z_centr]
292
		fld dword[edi+obj_3d.z_centr]
311
		fld1
293
		fld1
312
		fld1
294
		fld1
313
		faddp
295
		faddp
314
		fdivp ;centr.z = size.z/2
296
		fdivp ;centr.z = size.z/2
315
		fadd dword[edi+offs_obj_z_min]
297
		fadd dword[edi+obj_3d.z_min]
316
		fchs
298
		fchs
317
		fstp dword[edi+offs_obj_z_centr]
299
		fstp dword[edi+obj_3d.z_centr]
318
 
300
 
319
		;­ å®¤¨¬ à ¤¨ãá ¤«ï áä¥àë
301
		;­ å®¤¨¬ à ¤¨ãá ¤«ï áä¥àë
320
		fld dword[edi+offs_obj_x_max]
302
		fld dword[edi+obj_3d.x_max]
321
		fsub dword[edi+offs_obj_x_min]
303
		fsub dword[edi+obj_3d.x_min]
322
		fld dword[edi+offs_obj_y_max]
304
		fld dword[edi+obj_3d.y_max]
323
		fsub dword[edi+offs_obj_y_min]
305
		fsub dword[edi+obj_3d.y_min]
324
		faddp
306
		faddp
325
		fild dword[rad_c]
307
		fild dword[rad_c]
326
		fdivp ;radius=(size.x+size.y)/rad_c
308
		fdivp ;radius=(size.x+size.y)/rad_c
327
		fstp dword[sph_radius]
309
		fstp dword[sph_radius]
328
 
310
 
329
	;¤¥« ¥¬ ®¤¨­ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ­¥ ­ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥­¨ï
311
	;¤¥« ¥¬ ®¤¨­ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ­¥ ­ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥­¨ï
330
	fld dword[edi+offs_obj_y_scale]
312
	fld dword[edi+obj_3d.y_scale]
331
	fdiv dword[ratio] ;¯à¨¢¥¤¥­¨¥ ¬ áèâ ¡  ¯® ®á¨ y ãç¨â뢠ï çâ® ¯® ¢ëá®â¥ íªà ­ ¬¥­ìè¥
313
	fdiv dword[ratio] ;¯à¨¢¥¤¥­¨¥ ¬ áèâ ¡  ¯® ®á¨ y ãç¨â뢠ï çâ® ¯® ¢ëá®â¥ íªà ­ ¬¥­ìè¥
332
	fcomp dword[edi+offs_obj_x_scale]
314
	fcomp dword[edi+obj_3d.x_scale]
333
	fstsw ax
315
	fstsw ax
334
	sahf
316
	sahf
335
	jb @f
317
	jb @f
336
		;ᦠ⨥ ¬ áèâ ¡  ¯® y
318
		;ᦠ⨥ ¬ áèâ ¡  ¯® y
337
		fld dword[edi+offs_obj_x_scale]
319
		fld dword[edi+obj_3d.x_scale]
338
		fmul dword[ratio]
320
		fmul dword[ratio]
339
		fstp dword[edi+offs_obj_y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x
321
		fstp dword[edi+obj_3d.y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x
340
		jmp .end
322
		jmp .end
341
	@@:
323
	@@:
342
		;ᦠ⨥ ¬ áèâ ¡  ¯® x >...<
324
		;ᦠ⨥ ¬ áèâ ¡  ¯® x >...<
343
		fld	dword[edi+offs_obj_x_scale]
325
		fld	dword[edi+obj_3d.x_scale]
344
		fdiv dword[ratio]
326
		fdiv dword[ratio]
345
		fstp dword[edi+offs_obj_x_scale]
327
		fstp dword[edi+obj_3d.x_scale]
346
	.end:
328
	.end:
347
	ret
329
	ret
348
endp
330
endp
349
 
331
 
350
;description:
332
;description:
351
; ¢ëç¨á«¥­¨¥ ­®à¬ «¥© ¤«ï £à ­¥© ¯® 3-¬ ¢¥à設 ¬
333
; ¢ëç¨á«¥­¨¥ ­®à¬ «¥© ¤«ï £à ­¥© ¯® 3-¬ ¢¥à設 ¬
352
;   â ª¦¥ ­®à¬ «¥© ¤«ï ᣫ ¦¨¢ ­¨ï ª ¢¥à設 ¬
334
;   â ª¦¥ ­®à¬ «¥© ¤«ï ᣫ ¦¨¢ ­¨ï ª ¢¥à設 ¬
353
align 4
335
align 4
354
proc obj_set_normals, o_data:dword
336
proc obj_set_normals, o_data:dword
355
locals
337
locals
356
	tbl1 rd 9 ;ebp-72
338
	tbl1 rd 9 ;ebp-72
357
	tbl2 rd 9 ;ebp-36
339
	tbl2 rd 9 ;ebp-36
358
endl
340
endl
359
pushad
341
pushad
360
	mov ecx,[o_data]
342
	mov ecx,[o_data]
361
	cmp dword[ecx+offs_obj_poi_count],0
343
	cmp dword[ecx+obj_3d.poi_count],0
362
	je .end
344
	je .end
363
		mov eax,[ecx+offs_obj_tri_count]
345
		mov eax,[ecx+obj_3d.tri_count]
364
		mov [ecx+offs_obj_normals_tri_count],eax ;­  ª ¦¤ë© âà¥ã£®«ì­¨ª 1 ­®à¬ «ì
346
		mov [ecx+obj_3d.normals_tri_count],eax ;­  ª ¦¤ë© âà¥ã£®«ì­¨ª 1 ­®à¬ «ì
365
		cmp eax,0
347
		cmp eax,0
366
		je .end
348
		je .end
367
		finit
349
		finit
368
		imul eax,12
350
		imul eax,12
369
		stdcall mem.Alloc, eax
351
		stdcall mem.Alloc, eax
370
		mov [ecx+offs_obj_normals_tri_data],eax
352
		mov [ecx+obj_3d.normals_tri_data],eax
371
 
353
 
372
		mov edx,[ecx+offs_obj_tri_data]
354
		mov edx,[ecx+obj_3d.tri_data]
373
		mov ebx,[ecx+offs_obj_tri_count]
355
		mov ebx,[ecx+obj_3d.tri_count]
374
		mov ecx,[ecx+offs_obj_poi_data]
356
		mov ecx,[ecx+obj_3d.poi_data]
375
align 4
357
align 4
376
		@@:
358
		@@:
377
			mov edi,ebp
359
			mov edi,ebp
378
			sub edi,36 ;tbl2
360
			sub edi,36 ;tbl2
379
			movzx esi,word[edx] ;1-ï ¢¥à設 
361
			movzx esi,word[edx] ;1-ï ¢¥à設 
380
			imul esi,12
362
			imul esi,12
381
			add esi,ecx
363
			add esi,ecx
382
			movsd
364
			movsd
383
			movsd
365
			movsd
384
			movsd
366
			movsd
385
			movzx esi,word[edx+2] ;2-ï ¢¥à設 
367
			movzx esi,word[edx+2] ;2-ï ¢¥à設 
386
			imul esi,12
368
			imul esi,12
387
			add esi,ecx
369
			add esi,ecx
388
			movsd
370
			movsd
389
			movsd
371
			movsd
390
			movsd
372
			movsd
391
			movzx esi,word[edx+4] ;3-ï ¢¥à設 
373
			movzx esi,word[edx+4] ;3-ï ¢¥à設 
392
			imul esi,12
374
			imul esi,12
393
			add esi,ecx
375
			add esi,ecx
394
			movsd
376
			movsd
395
			movsd
377
			movsd
396
			movsd
378
			movsd
397
 
379
 
398
			mov esi,ebp
380
			mov esi,ebp
399
			sub esi,72 ;tbl1
381
			sub esi,72 ;tbl1
400
			sub edi,36 ;tbl2
382
			sub edi,36 ;tbl2
401
			;v1 <-> v2
383
			;v1 <-> v2
402
			fld dword[edi+12]
384
			fld dword[edi+12]
403
			fsub dword[edi]
385
			fsub dword[edi]
404
			fstp dword[esi] ;(x2-x1)
386
			fstp dword[esi] ;(x2-x1)
405
			fld dword[edi+16]
387
			fld dword[edi+16]
406
			fsub dword[edi+4]
388
			fsub dword[edi+4]
407
			fstp dword[esi+4] ;(y2-y1)
389
			fstp dword[esi+4] ;(y2-y1)
408
			fld dword[edi+20]
390
			fld dword[edi+20]
409
			fsub dword[edi+8]
391
			fsub dword[edi+8]
410
			fstp dword[esi+8] ;(z2-z1)
392
			fstp dword[esi+8] ;(z2-z1)
411
			;v2 <-> v3
393
			;v2 <-> v3
412
			fld dword[edi+12]
394
			fld dword[edi+12]
413
			fsub dword[edi+24]
395
			fsub dword[edi+24]
414
			fstp dword[esi+12] ;(x2-x3)
396
			fstp dword[esi+12] ;(x2-x3)
415
			fld dword[edi+16]
397
			fld dword[edi+16]
416
			fsub dword[edi+28]
398
			fsub dword[edi+28]
417
			fstp dword[esi+16] ;(y2-y3)
399
			fstp dword[esi+16] ;(y2-y3)
418
			fld dword[edi+20]
400
			fld dword[edi+20]
419
			fsub dword[edi+32]
401
			fsub dword[edi+32]
420
			fstp dword[esi+20] ;(z2-z3)
402
			fstp dword[esi+20] ;(z2-z3)
421
			;v3 <-> v1
403
			;v3 <-> v1
422
			fld dword[edi+24]
404
			fld dword[edi+24]
423
			fsub dword[edi]
405
			fsub dword[edi]
424
			fstp dword[esi+24] ;(x3-x1)
406
			fstp dword[esi+24] ;(x3-x1)
425
			fld dword[edi+28]
407
			fld dword[edi+28]
426
			fsub dword[edi+4]
408
			fsub dword[edi+4]
427
			fstp dword[esi+28] ;(y3-y1)
409
			fstp dword[esi+28] ;(y3-y1)
428
			fld dword[edi+32]
410
			fld dword[edi+32]
429
			fsub dword[edi+8]
411
			fsub dword[edi+8]
430
			fstp dword[esi+32] ;(z3-z1)
412
			fstp dword[esi+32] ;(z3-z1)
431
 
413
 
432
			;A = (y2-y1) * (z3-z1) - (z2-z1) * (y3-y1)
414
			;A = (y2-y1) * (z3-z1) - (z2-z1) * (y3-y1)
433
			fld dword[esi+4]
415
			fld dword[esi+4]
434
			fmul dword[esi+32]
416
			fmul dword[esi+32]
435
			fld dword[esi+8]
417
			fld dword[esi+8]
436
			fmul dword[esi+28]
418
			fmul dword[esi+28]
437
			fsubp
419
			fsubp
438
			fstp dword[eax] ;set normal.a
420
			fstp dword[eax] ;set normal.a
439
 
421
 
440
			;B = (z2-z1) * (x3-x1) - (x2-x1) * (z3-z1)
422
			;B = (z2-z1) * (x3-x1) - (x2-x1) * (z3-z1)
441
			fld dword[esi+8]
423
			fld dword[esi+8]
442
			fmul dword[esi+24]
424
			fmul dword[esi+24]
443
			fld dword[esi]
425
			fld dword[esi]
444
			fmul dword[esi+32]
426
			fmul dword[esi+32]
445
			fsubp
427
			fsubp
446
			fstp dword[eax+4] ;set normal.b
428
			fstp dword[eax+4] ;set normal.b
447
 
429
 
448
			;C = (x2-x1) * (y3-y1) - (y2-y1) * (x3-x1)
430
			;C = (x2-x1) * (y3-y1) - (y2-y1) * (x3-x1)
449
			fld dword[esi]
431
			fld dword[esi]
450
			fmul dword[esi+28]
432
			fmul dword[esi+28]
451
			fld dword[esi+4]
433
			fld dword[esi+4]
452
			fmul dword[esi+24]
434
			fmul dword[esi+24]
453
			fsubp
435
			fsubp
454
			fstp dword[eax+8] ;set normal.c
436
			fstp dword[eax+8] ;set normal.c
455
 
437
 
456
			stdcall V3_Norm,eax
438
			stdcall V3_Norm,eax
457
 
439
 
458
			add edx,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
440
			add edx,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
459
			add eax,12
441
			add eax,12
460
			dec ebx
442
			dec ebx
461
			jnz @b
443
			jnz @b
462
 
444
 
463
		;­®à¬ «¨ ª ¢¥à設 ¬
445
		;­®à¬ «¨ ª ¢¥à設 ¬
464
		mov ebx,[o_data]
446
		mov ebx,[o_data]
465
		mov ecx,[ebx+offs_obj_poi_count]
447
		mov ecx,[ebx+obj_3d.poi_count]
466
		mov [ebx+offs_obj_normals_poi_count],ecx
448
		mov [ebx+obj_3d.normals_poi_count],ecx
467
		cmp ecx,0
449
		cmp ecx,0
468
		je .end
450
		je .end
469
		imul ecx,12
451
		imul ecx,12
470
		stdcall mem.Alloc,ecx
452
		stdcall mem.Alloc,ecx
471
		mov [ebx+offs_obj_normals_poi_data],eax
453
		mov [ebx+obj_3d.normals_poi_data],eax
472
 
454
 
473
		mov edi,eax
455
		mov edi,eax
474
		mov eax,0.0
456
		mov eax,0.0
475
		shr ecx,2
457
		shr ecx,2
476
		rep stosd ;®ç¨á⪠ 0-¬¨ float
458
		rep stosd ;®ç¨á⪠ 0-¬¨ float
477
 
459
 
478
		mov edx,[ebx+offs_obj_tri_count]
460
		mov edx,[ebx+obj_3d.tri_count]
479
		mov edi,[ebx+offs_obj_tri_data]
461
		mov edi,[ebx+obj_3d.tri_data]
480
		mov eax,[ebx+offs_obj_normals_tri_data]
462
		mov eax,[ebx+obj_3d.normals_tri_data]
481
		mov ecx,[ebx+offs_obj_poi_data]
463
		mov ecx,[ebx+obj_3d.poi_data]
482
		mov ebx,[ebx+offs_obj_normals_poi_data]
464
		mov ebx,[ebx+obj_3d.normals_poi_data]
483
align 4
465
align 4
484
		.cycle_0: ;¯® £à ­ï¬
466
		.cycle_0: ;¯® £à ­ï¬
485
			movzx esi,word[edi] ;1-ï ¢¥à設 
467
			movzx esi,word[edi] ;1-ï ¢¥à設 
486
			imul esi,12
468
			imul esi,12
487
			add esi,ecx
469
			add esi,ecx
488
			push esi
470
			push esi
489
			movzx esi,word[edi+2] ;2-ï ¢¥à設 
471
			movzx esi,word[edi+2] ;2-ï ¢¥à設 
490
			imul esi,12
472
			imul esi,12
491
			add esi,ecx
473
			add esi,ecx
492
			push esi
474
			push esi
493
			movzx esi,word[edi+4] ;3-ï ¢¥à設 
475
			movzx esi,word[edi+4] ;3-ï ¢¥à設 
494
			imul esi,12
476
			imul esi,12
495
			add esi,ecx
477
			add esi,ecx
496
			push esi
478
			push esi
497
 
479
 
498
			movzx esi,word[edi] ;1-ï ¢¥à設 
480
			movzx esi,word[edi] ;1-ï ¢¥à設 
499
			imul esi,12
481
			imul esi,12
500
			add esi,ebx
482
			add esi,ebx
501
			push esi
483
			push esi
502
			movzx esi,word[edi+2] ;2-ï ¢¥à設 
484
			movzx esi,word[edi+2] ;2-ï ¢¥à設 
503
			imul esi,12
485
			imul esi,12
504
			add esi,ebx
486
			add esi,ebx
505
			push esi
487
			push esi
506
			movzx esi,word[edi+4] ;3-ï ¢¥à設 
488
			movzx esi,word[edi+4] ;3-ï ¢¥à設 
507
			imul esi,12
489
			imul esi,12
508
			add esi,ebx
490
			add esi,ebx
509
			push esi
491
			push esi
510
 
492
 
511
			stdcall poi_normal_add,eax
493
			stdcall poi_normal_add,eax
512
 
494
 
513
			add edi,8
495
			add edi,8
514
			add eax,12
496
			add eax,12
515
			dec edx
497
			dec edx
516
			jnz .cycle_0
498
			jnz .cycle_0
517
		.cycle_0_end:
499
		.cycle_0_end:
518
	.end:
500
	.end:
519
popad
501
popad
520
	ret
502
	ret
521
endp
503
endp
522
 
504
 
523
;input:
505
;input:
524
; norm_tr - 㪠§ â¥«ì ­  ­®à¬ «ì ª £à ­¨
506
; norm_tr - 㪠§ â¥«ì ­  ­®à¬ «ì ª £à ­¨
525
; n1, n2, n3 - 㪠§ â¥«¨ ­  ­®à¬ «¨ ¢¥à設
507
; n1, n2, n3 - 㪠§ â¥«¨ ­  ­®à¬ «¨ ¢¥à設
526
; c1, c2, c3 - 㪠§ â¥«¨ ­  ª®®à¤¨­ âë ¢¥à設
508
; c1, c2, c3 - 㪠§ â¥«¨ ­  ª®®à¤¨­ âë ¢¥à設
527
align 4
509
align 4
528
proc poi_normal_add uses eax ebx,\
510
proc poi_normal_add uses eax ebx,\
529
	norm_tr:dword, n1:dword, n2:dword, n3:dword, c1:dword, c2:dword, c3:dword
511
	norm_tr:dword, n1:dword, n2:dword, n3:dword, c1:dword, c2:dword, c3:dword
530
 
512
 
531
	mov ebx,[norm_tr]
513
	mov ebx,[norm_tr]
532
 
514
 
533
	mov eax,[n1]
515
	mov eax,[n1]
534
	fld dword[eax]
516
	fld dword[eax]
535
	fadd dword[ebx]
517
	fadd dword[ebx]
536
	fstp dword[eax]
518
	fstp dword[eax]
537
	fld dword[eax+4]
519
	fld dword[eax+4]
538
	fadd dword[ebx+4]
520
	fadd dword[ebx+4]
539
	fstp dword[eax+4]
521
	fstp dword[eax+4]
540
	fld dword[eax+8]
522
	fld dword[eax+8]
541
	fadd dword[ebx+8]
523
	fadd dword[ebx+8]
542
	fstp dword[eax+8]
524
	fstp dword[eax+8]
543
 
525
 
544
	mov eax,[n2]
526
	mov eax,[n2]
545
	fld dword[eax]
527
	fld dword[eax]
546
	fadd dword[ebx]
528
	fadd dword[ebx]
547
	fstp dword[eax]
529
	fstp dword[eax]
548
	fld dword[eax+4]
530
	fld dword[eax+4]
549
	fadd dword[ebx+4]
531
	fadd dword[ebx+4]
550
	fstp dword[eax+4]
532
	fstp dword[eax+4]
551
	fld dword[eax+8]
533
	fld dword[eax+8]
552
	fadd dword[ebx+8]
534
	fadd dword[ebx+8]
553
	fstp dword[eax+8]
535
	fstp dword[eax+8]
554
 
536
 
555
	mov eax,[n3]
537
	mov eax,[n3]
556
	fld dword[eax]
538
	fld dword[eax]
557
	fadd dword[ebx]
539
	fadd dword[ebx]
558
	fstp dword[eax]
540
	fstp dword[eax]
559
	fld dword[eax+4]
541
	fld dword[eax+4]
560
	fadd dword[ebx+4]
542
	fadd dword[ebx+4]
561
	fstp dword[eax+4]
543
	fstp dword[eax+4]
562
	fld dword[eax+8]
544
	fld dword[eax+8]
563
	fadd dword[ebx+8]
545
	fadd dword[ebx+8]
564
	fstp dword[eax+8]
546
	fstp dword[eax+8]
565
 
547
 
566
	ret
548
	ret
567
endp
549
endp
568
 
550
 
569
;description:
551
;description:
570
; normalize vector
552
; normalize vector
571
align 4
553
align 4
572
proc V3_Norm uses eax ebx, a:dword
554
proc V3_Norm uses eax ebx, a:dword
573
	mov ebx,[a]
555
	mov ebx,[a]
574
	fld dword[ebx]
556
	fld dword[ebx]
575
	fmul st0,st0
557
	fmul st0,st0
576
	fld dword[ebx+4]
558
	fld dword[ebx+4]
577
	fmul st0,st0
559
	fmul st0,st0
578
	faddp
560
	faddp
579
	fld dword[ebx+8]
561
	fld dword[ebx+8]
580
	fmul st0,st0
562
	fmul st0,st0
581
	faddp
563
	faddp
582
	fsqrt ;st0 = sqrt(a.X^2 +a.Y^2 +a.Z^2)
564
	fsqrt ;st0 = sqrt(a.X^2 +a.Y^2 +a.Z^2)
583
	ftst
565
	ftst
584
	fstsw ax
566
	fstsw ax
585
	sahf
567
	sahf
586
	je .r1 ;if (sqrt(...)==0) return 1
568
	je .r1 ;if (sqrt(...)==0) return 1
587
		fld dword[ebx] ;offs_X = 0
569
		fld dword[ebx] ;offs_X = 0
588
		fdiv st0,st1
570
		fdiv st0,st1
589
		fstp dword[ebx] ;a.X/=sqrt(...)
571
		fstp dword[ebx] ;a.X/=sqrt(...)
590
		fld dword[ebx+4]
572
		fld dword[ebx+4]
591
		fdiv st0,st1
573
		fdiv st0,st1
592
		fstp dword[ebx+4] ;a.Y/=sqrt(...)
574
		fstp dword[ebx+4] ;a.Y/=sqrt(...)
593
		fld dword[ebx+8]
575
		fld dword[ebx+8]
594
		fdiv st0,st1
576
		fdiv st0,st1
595
		fstp dword[ebx+8] ;a.Z/=sqrt(...)
577
		fstp dword[ebx+8] ;a.Z/=sqrt(...)
596
	.r1:
578
	.r1:
597
	ffree st0
579
	ffree st0
598
	fincstp
580
	fincstp
599
	ret
581
	ret
600
endp
582
endp
601
 
583
 
602
;­ áâனª  áâàãªâãàë 3d ®¡ê¥ªâ 
584
;­ áâனª  áâàãªâãàë 3d ®¡ê¥ªâ 
603
align 4
585
align 4
604
proc obj_init, o_data:dword
586
proc obj_init, o_data:dword
605
	pushad
587
	pushad
606
	mov edi,[o_data]
588
	mov edi,[o_data]
607
	stdcall obj_clear_param, edi
589
	stdcall obj_clear_param, edi
608
	stdcall [tl_node_get_data],tree1
590
	stdcall [tl_node_get_data],tree1
609
	xor edx,edx
591
	xor edx,edx
610
	cmp eax,0
592
	cmp eax,0
611
	je .no_points
593
	je .no_points
612
		mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
594
		mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
613
		add ebx,[open_file_data]
595
		add ebx,[open_file_data]
614
		xor ecx,ecx
596
		xor ecx,ecx
615
		cmp word[ebx],CHUNK_OBJBLOCK
597
		cmp word[ebx],CHUNK_OBJBLOCK
616
		jne @f
598
		jne @f
617
			mov ecx,ebx
599
			mov ecx,ebx
618
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
600
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
619
			push eax edi
601
			push eax edi
620
				mov edi,ebx
602
				mov edi,ebx
621
				add edi,6
603
				add edi,6
622
				cld
604
				cld
623
				xor al,al
605
				xor al,al
624
				repne scasb ;¯à®¯ã᪠¨¬¥­¨ ®¡ê¥ªâ 
606
				repne scasb ;¯à®¯ã᪠¨¬¥­¨ ®¡ê¥ªâ 
625
				mov ebx,edi
607
				mov ebx,edi
626
			pop edi eax
608
			pop edi eax
627
		@@:
609
		@@:
628
		cmp word[ebx],CHUNK_TRIMESH
610
		cmp word[ebx],CHUNK_TRIMESH
629
		jne @f
611
		jne @f
630
			mov ecx,ebx
612
			mov ecx,ebx
631
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
613
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
632
			add ebx,6
614
			add ebx,6
633
		@@:
615
		@@:
634
		cmp word[ebx],CHUNK_VERTLIST
616
		cmp word[ebx],CHUNK_VERTLIST
635
		jne .no_points
617
		jne .no_points
636
			mov esi,ebx
618
			mov esi,ebx
637
			movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª
619
			movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª
638
			add ebx,8
620
			add ebx,8
639
			mov [edi+offs_obj_poi_data],ebx
621
			mov [edi+obj_3d.poi_data],ebx
640
			mov [edi+offs_obj_poi_count],edx
622
			mov [edi+obj_3d.poi_count],edx
641
 
623
 
642
			.cycle_0: ;横« ¤«ï ¯®¨áª  âà¥ã£®«ì­¨ª®¢
624
			.cycle_0: ;横« ¤«ï ¯®¨áª  âà¥ã£®«ì­¨ª®¢
643
				add esi,dword[esi+2]
625
				add esi,dword[esi+2]
644
				cmp word[esi],CHUNK_FACELIST
626
				cmp word[esi],CHUNK_FACELIST
645
				je @f
627
				je @f
646
					cmp ecx,esi
628
					cmp ecx,esi
647
					jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
629
					jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
648
					jmp .end_points ;¥á«¨ ­¥ ­ è«¨ âà¥ã£®«ì­¨ª¨
630
					jmp .end_points ;¥á«¨ ­¥ ­ è«¨ âà¥ã£®«ì­¨ª¨
649
			@@:
631
			@@:
650
			;¥á«¨ ­ è«¨ âà¥ã£®«ì­¨ª¨
632
			;¥á«¨ ­ è«¨ âà¥ã£®«ì­¨ª¨
651
			movzx edx,word[esi+6]
633
			movzx edx,word[esi+6]
652
			mov [edi+offs_obj_tri_count],edx
634
			mov [edi+obj_3d.tri_count],edx
653
			add esi,8 ;2+4+2 (chunk+size+count)
635
			add esi,8 ;2+4+2 (chunk+size+count)
654
			mov [edi+offs_obj_tri_data],esi
636
			mov [edi+obj_3d.tri_data],esi
655
 
637
 
656
			;¯®¨áª ¬ â¥à¨ «®¢ £à ­¥©
638
			;¯®¨áª ¬ â¥à¨ «®¢ £à ­¥©
657
			shl edx,3
639
			shl edx,3
658
			add esi,edx
640
			add esi,edx
659
			cmp word[esi],CHUNK_FACEMAT
641
			cmp word[esi],CHUNK_FACEMAT
660
			jne .end_points
642
			jne .end_points
661
				mov [edi+offs_obj_mat1_data],esi
643
				mov [edi+obj_3d.mat1_data],esi
662
		.end_points:
644
		.end_points:
663
 
645
 
664
		stdcall obj_set_sizes, edi
646
		stdcall obj_set_sizes, edi
665
		stdcall obj_set_normals, edi
647
		stdcall obj_set_normals, edi
666
if version_edit eq 0
648
if version_edit eq 0
667
		stdcall draw_3d, edi
649
		stdcall draw_3d, edi
668
end if
650
end if
669
	.no_points:
651
	.no_points:
670
	popad
652
	popad
671
	ret
653
	ret
672
endp
654
endp
673
 
655
 
674
;­ áâனª  ¬ â¥à¨ « 
656
;­ áâனª  ¬ â¥à¨ « 
675
;input:
657
;input:
676
; m_data - 㪠§ â¥«ì ­  § ¯®«­ï¥¬ãî áâàãªâãàã á ¬ â¥à¨ «®¬
658
; m_data - 㪠§ â¥«ì ­  § ¯®«­ï¥¬ãî áâàãªâãàã á ¬ â¥à¨ «®¬
677
; f_data - 㪠§ â¥«ì­  ­  ¡«®ª CHUNK_MATERIAL ¨§ ä ©«  3ds
659
; f_data - 㪠§ â¥«ì­  ­  ¡«®ª CHUNK_MATERIAL ¨§ ä ©«  3ds
678
align 4
660
align 4
679
proc mat_init, m_data:dword, f_data:dword
661
proc mat_init, m_data:dword, f_data:dword
680
	pushad
662
	pushad
681
	mov edi,[m_data]
663
	mov edi,[m_data]
682
 
664
 
683
	;... clear edi ...
665
	;... clear edi ...
684
	mov dword[edi+offs_mat_name],0
666
	mov dword[edi+material.name],0
685
	mov dword[edi+offs_mat_col_ambient],0
667
	mov dword[edi+material.col_ambient],0
686
	mov dword[edi+offs_mat_col_diffuse],0
668
	mov dword[edi+material.col_diffuse],0
687
	mov dword[edi+offs_mat_col_specular],0
669
	mov dword[edi+material.col_specular],0
688
 
670
 
689
	xor edx,edx
671
	xor edx,edx
690
	mov ebx,[f_data]
672
	mov ebx,[f_data]
691
	xor ecx,ecx
673
	xor ecx,ecx
692
	cmp word[ebx],CHUNK_MATERIAL
674
	cmp word[ebx],CHUNK_MATERIAL
693
	jne .no_material
675
	jne .no_material
694
		mov ecx,ebx
676
		mov ecx,ebx
695
		add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
677
		add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
696
		add ebx,6
678
		add ebx,6
697
	cmp word[ebx],CHUNK_MATNAME
679
	cmp word[ebx],CHUNK_MATNAME
698
	jne .no_material
680
	jne .no_material
699
		;*** (0) ***
681
		;*** (0) ***
700
		mov esi,ebx
682
		mov esi,ebx
701
		add ebx,6
683
		add ebx,6
702
		mov [edi+offs_mat_name],ebx
684
		mov [edi+material.name],ebx
703
		sub ebx,6
685
		sub ebx,6
704
		;*** (1) ***
686
		;*** (1) ***
705
		.cycle_0: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
687
		.cycle_0: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
706
			add esi,dword[esi+2]
688
			add esi,dword[esi+2]
707
			cmp word[esi],0xa010
689
			cmp word[esi],0xa010
708
			je @f
690
			je @f
709
				cmp ecx,esi
691
				cmp ecx,esi
710
				jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
692
				jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
711
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
693
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
712
		@@:
694
		@@:
713
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
695
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
714
		add esi,6
696
		add esi,6
715
		cmp word[esi],0x0011
697
		cmp word[esi],0x0011
716
		jne .end_material
698
		jne .end_material
717
			add esi,6
699
			add esi,6
718
			mov dl,byte[esi]
700
			mov dl,byte[esi]
719
			mov [edi+offs_mat_col_ambient+2],dl
701
			mov byte[edi+material.col_ambient+2],dl
720
			mov dx,word[esi+1]
702
			mov dx,word[esi+1]
721
			ror dx,8
703
			ror dx,8
722
			mov [edi+offs_mat_col_ambient],dx
704
			mov word[edi+material.col_ambient],dx
723
		;*** (2) ***
705
		;*** (2) ***
724
		mov esi,ebx
706
		mov esi,ebx
725
		.cycle_1: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
707
		.cycle_1: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
726
			add esi,dword[esi+2]
708
			add esi,dword[esi+2]
727
			cmp word[esi],0xa020
709
			cmp word[esi],0xa020
728
			je @f
710
			je @f
729
				cmp ecx,esi
711
				cmp ecx,esi
730
				jg .cycle_1 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
712
				jg .cycle_1 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
731
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
713
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
732
		@@:
714
		@@:
733
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
715
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
734
		add esi,6
716
		add esi,6
735
		cmp word[esi],0x0011
717
		cmp word[esi],0x0011
736
		jne .end_material
718
		jne .end_material
737
			add esi,6
719
			add esi,6
738
			mov dl,byte[esi]
720
			mov dl,byte[esi]
739
			mov [edi+offs_mat_col_diffuse+2],dl
721
			mov byte[edi+material.col_diffuse+2],dl
740
			mov dx,word[esi+1]
722
			mov dx,word[esi+1]
741
			ror dx,8
723
			ror dx,8
742
			mov [edi+offs_mat_col_diffuse],dx
724
			mov word[edi+material.col_diffuse],dx
743
		;*** (3) ***
725
		;*** (3) ***
744
		mov esi,ebx
726
		mov esi,ebx
745
		.cycle_2: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
727
		.cycle_2: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
746
			add esi,dword[esi+2]
728
			add esi,dword[esi+2]
747
			cmp word[esi],0xa030
729
			cmp word[esi],0xa030
748
			je @f
730
			je @f
749
				cmp ecx,esi
731
				cmp ecx,esi
750
				jg .cycle_2 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
732
				jg .cycle_2 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
751
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
733
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
752
		@@:
734
		@@:
753
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
735
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
754
		add esi,6
736
		add esi,6
755
		cmp word[esi],0x0011
737
		cmp word[esi],0x0011
756
		jne .end_material
738
		jne .end_material
757
			add esi,6
739
			add esi,6
758
			mov dl,byte[esi]
740
			mov dl,byte[esi]
759
			mov [edi+offs_mat_col_specular+2],dl
741
			mov byte[edi+material.col_specular+2],dl
760
			mov dx,word[esi+1]
742
			mov dx,word[esi+1]
761
			ror dx,8
743
			ror dx,8
762
			mov [edi+offs_mat_col_specular],dx
744
			mov word[edi+material.col_specular],dx
763
 
745
 
764
		.end_material:
746
		.end_material:
765
	.no_material:
747
	.no_material:
766
	popad
748
	popad
767
	ret
749
	ret
768
endp
750
endp
769
 
751
 
770
align 4
752
align 4
771
proc buf_draw_beg uses eax, buf:dword
753
proc buf_draw_beg uses eax, buf:dword
772
	mov eax,[buf]
754
	mov eax,[buf]
773
	stdcall [buf2d_clear], eax, [eax+16] ;ç¨á⨬ ¡ãä¥à
755
	stdcall [buf2d_clear], eax, [eax+16] ;ç¨á⨬ ¡ãä¥à
774
	stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff
756
	stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff
775
	stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff
757
	stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff
776
	cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦­  ®è¨¡ª  ä ©« 
758
	cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦­  ®è¨¡ª  ä ©« 
777
	jne @f
759
	jne @f
778
		stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000
760
		stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000
779
	@@:
761
	@@:
780
	ret
762
	ret
781
endp
763
endp
782
 
764
 
783
;à¨á®¢ ­¨¥ ¬ â¥à¨ « 
765
;à¨á®¢ ­¨¥ ¬ â¥à¨ « 
784
align 4
766
align 4
785
proc draw_material uses edi, m_data:dword
767
proc draw_material uses edi, m_data:dword
786
	mov edi,[m_data]
768
	mov edi,[m_data]
787
	stdcall buf_draw_beg, buf_ogl
769
	stdcall buf_draw_beg, buf_ogl
788
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff
770
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff
789
 
771
 
790
	stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+offs_mat_name],15,45,0 ;¨¬ï ¬ â¥à¨ « 
772
	stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+material.name],15,45,0 ;¨¬ï ¬ â¥à¨ « 
791
	stdcall draw_color, [edi+offs_mat_col_ambient], txt_a010,2,55 ;®ªà㦠î騩 梥â
773
	stdcall draw_color, [edi+material.col_ambient], txt_a010,2,55 ;®ªà㦠î騩 梥â
792
	stdcall draw_color, [edi+offs_mat_col_diffuse], txt_a020,2,75 ;¤¨äã§­ë© æ¢¥â
774
	stdcall draw_color, [edi+material.col_diffuse], txt_a020,2,75 ;¤¨äã§­ë© æ¢¥â
793
	stdcall draw_color, [edi+offs_mat_col_specular],txt_a030,2,95 ;§¥àª «ì­ë© 梥â
775
	stdcall draw_color, [edi+material.col_specular],txt_a030,2,95 ;§¥àª «ì­ë© 梥â
794
 
776
 
795
	stdcall [buf2d_draw], buf_ogl
777
	stdcall [buf2d_draw], buf_ogl
796
	ret
778
	ret
797
endp
779
endp
798
 
780
 
799
align 4
781
align 4
800
proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword
782
proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword
801
	mov eax,[c_x]
783
	mov eax,[c_x]
802
	mov ebx,[c_y]
784
	mov ebx,[c_y]
803
	; ¯àאַ㣮«ì­¨ª
785
	; ¯àאַ㣮«ì­¨ª
804
	inc ebx
786
	inc ebx
805
	stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color]
787
	stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color]
806
	dec ebx
788
	dec ebx
807
	stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0
789
	stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0
808
	; ¯®¤¯¨á¨
790
	; ¯®¤¯¨á¨
809
	add eax,33
791
	add eax,33
810
	stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0
792
	stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0
811
	add ebx,10
793
	add ebx,10
812
	stdcall hex_in_str, buffer,[color],6
794
	stdcall hex_in_str, buffer,[color],6
813
	mov byte[buffer+6],0
795
	mov byte[buffer+6],0
814
	stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0
796
	stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0
815
	ret
797
	ret
816
endp
798
endp
817
 
799
 
818
;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
800
;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
819
align 4
801
align 4
820
proc draw_3d uses eax ebx ecx edi, o_data:dword
802
proc draw_3d uses eax ebx ecx edi, o_data:dword
821
	mov edi,[o_data]
803
	mov edi,[o_data]
822
	cmp dword[edi+offs_obj_poi_count],2
804
	cmp dword[edi+obj_3d.poi_count],2
823
	jl .end_f
805
	jl .end_f
824
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
806
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
825
	stdcall [glPushMatrix]
807
	stdcall [glPushMatrix]
826
	bt dword[draw_mode],bit_light
808
	bt dword[draw_mode],bit_light
827
	jnc @f
809
	jnc @f
828
		call SetLight
810
		call SetLight
829
		jmp .end_l
811
		jmp .end_l
830
	@@:
812
	@@:
831
		stdcall [glDisable],GL_LIGHTING
813
		stdcall [glDisable],GL_LIGHTING
832
	.end_l:
814
	.end_l:
833
	stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
815
	stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
834
	stdcall [glScalef], [edi+offs_obj_x_scale],[edi+offs_obj_y_scale],[edi+offs_obj_z_scale]
816
	stdcall [glScalef], [edi+obj_3d.x_scale],[edi+obj_3d.y_scale],[edi+obj_3d.z_scale]
835
	stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
817
	stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
836
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
818
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
837
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
819
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
838
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
820
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
839
	stdcall [glTranslatef], [edi+offs_obj_x_centr],[edi+offs_obj_y_centr],[edi+offs_obj_z_centr]
821
	stdcall [glTranslatef], [edi+obj_3d.x_centr],[edi+obj_3d.y_centr],[edi+obj_3d.z_centr]
840
 
822
 
841
if version_edit eq 0
823
if version_edit eq 0
842
	;à¨á®¢ ­¨¥ £à ­¥© á ¨á¯®«ì§®¢ ­¨¥¬ 梥⮢ ¬ â¥à¨ «®¢
824
	;à¨á®¢ ­¨¥ £à ­¥© á ¨á¯®«ì§®¢ ­¨¥¬ 梥⮢ ¬ â¥à¨ «®¢
843
	bt dword[draw_mode],bit_faces_mat
825
	bt dword[draw_mode],bit_faces_mat
844
	jnc @f
826
	jnc @f
845
		mov eax,[edi+offs_obj_mat1_data]
827
		mov eax,[edi+obj_3d.mat1_data]
846
		.b_found:
828
		.b_found:
847
		cmp eax,0
829
		cmp eax,0
848
		je .end_points
830
		je .end_points
849
			mov ebx,eax
831
			mov ebx,eax
850
			stdcall get_mat_color, eax
832
			stdcall get_mat_color, eax
851
			stdcall draw_3d_faces_color, edi,ebx,eax
833
			stdcall draw_3d_faces_color, edi,ebx,eax
852
			stdcall found_mat_faces, ebx
834
			stdcall found_mat_faces, ebx
853
		jmp .b_found
835
		jmp .b_found
854
	@@:
836
	@@:
855
end if
837
end if
856
 
838
 
857
	;à¨á®¢ ­¨¥ £à ­¥© ¡¥§ 梥⮢ ¬ â¥à¨ «®¢
839
	;à¨á®¢ ­¨¥ £à ­¥© ¡¥§ 梥⮢ ¬ â¥à¨ «®¢
858
	bt dword[draw_mode],bit_faces
840
	bt dword[draw_mode],bit_faces
859
	jnc .end_triangles
841
	jnc .end_triangles
860
	cmp dword[edi+offs_obj_tri_count],0
842
	cmp dword[edi+obj_3d.tri_count],0
861
	je .end_triangles
843
	je .end_triangles
862
	cmp dword[edi+offs_obj_poi_count],0
844
	cmp dword[edi+obj_3d.poi_count],0
863
	je .end_triangles
845
	je .end_triangles
864
		bt dword[draw_mode],bit_faces_fill
846
		bt dword[draw_mode],bit_faces_fill
865
		jc @f
847
		jc @f
866
			push GL_LINE
848
			push GL_LINE
867
			jmp .end_0
849
			jmp .end_0
868
		@@:
850
		@@:
869
			push GL_FILL
851
			push GL_FILL
870
		.end_0:
852
		.end_0:
871
		stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥
853
		stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥
872
		stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face]
854
		stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face]
873
		
855
		
874
		bt dword[draw_mode],bit_smooth
856
		bt dword[draw_mode],bit_smooth
875
		jnc .triangles_flat
857
		jnc .triangles_flat
876
		bt dword[draw_mode],bit_light
858
		bt dword[draw_mode],bit_light
877
		jnc .triangles_flat
859
		jnc .triangles_flat
878
			;triangles smooth
860
			;triangles smooth
879
			stdcall [glBegin],GL_TRIANGLES
861
			stdcall [glBegin],GL_TRIANGLES
880
			mov eax,[edi+offs_obj_tri_data]
862
			mov eax,[edi+obj_3d.tri_data]
881
			mov ecx,[edi+offs_obj_tri_count]
863
			mov ecx,[edi+obj_3d.tri_count]
882
			mov edx,[edi+offs_obj_normals_tri_data]
864
			mov edx,[edi+obj_3d.normals_tri_data]
883
align 4
865
align 4
884
			@@:
866
			@@:
885
				movzx ebx,word[eax] ;1-ï ¢¥à設 
867
				movzx ebx,word[eax] ;1-ï ¢¥à設 
886
				imul ebx,12
868
				imul ebx,12
887
					add ebx,[edi+offs_obj_normals_poi_data]
869
					add ebx,[edi+obj_3d.normals_poi_data]
888
					stdcall [glNormal3fv], ebx
870
					stdcall [glNormal3fv], ebx
889
					sub ebx,[edi+offs_obj_normals_poi_data]
871
					sub ebx,[edi+obj_3d.normals_poi_data]
890
				add ebx,[edi+offs_obj_poi_data]
872
				add ebx,[edi+obj_3d.poi_data]
891
				stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
873
				stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
892
				movzx ebx,word[eax+2] ;2-ï ¢¥à設 
874
				movzx ebx,word[eax+2] ;2-ï ¢¥à設 
893
				imul ebx,12
875
				imul ebx,12
894
					add ebx,[edi+offs_obj_normals_poi_data]
876
					add ebx,[edi+obj_3d.normals_poi_data]
895
					stdcall [glNormal3fv], ebx
877
					stdcall [glNormal3fv], ebx
896
					sub ebx,[edi+offs_obj_normals_poi_data]
878
					sub ebx,[edi+obj_3d.normals_poi_data]
897
				add ebx,[edi+offs_obj_poi_data]
879
				add ebx,[edi+obj_3d.poi_data]
898
				stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
880
				stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
899
				movzx ebx,word[eax+4] ;3-ï ¢¥à設 
881
				movzx ebx,word[eax+4] ;3-ï ¢¥à設 
900
				imul ebx,12
882
				imul ebx,12
901
					add ebx,[edi+offs_obj_normals_poi_data]
883
					add ebx,[edi+obj_3d.normals_poi_data]
902
					stdcall [glNormal3fv], ebx
884
					stdcall [glNormal3fv], ebx
903
					sub ebx,[edi+offs_obj_normals_poi_data]
885
					sub ebx,[edi+obj_3d.normals_poi_data]
904
				add ebx,[edi+offs_obj_poi_data]
886
				add ebx,[edi+obj_3d.poi_data]
905
				stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
887
				stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
906
				add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
888
				add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
907
				dec ecx
889
				dec ecx
908
				jnz @b
890
				jnz @b
909
			stdcall [glEnd]
891
			stdcall [glEnd]
910
			jmp .end_points
892
			jmp .end_points
911
 
893
 
912
		.triangles_flat:
894
		.triangles_flat:
913
		stdcall [glBegin],GL_TRIANGLES
895
		stdcall [glBegin],GL_TRIANGLES
914
		mov eax,[edi+offs_obj_tri_data]
896
		mov eax,[edi+obj_3d.tri_data]
915
		mov ecx,[edi+offs_obj_tri_count]
897
		mov ecx,[edi+obj_3d.tri_count]
916
		mov edx,[edi+offs_obj_normals_tri_data]
898
		mov edx,[edi+obj_3d.normals_tri_data]
917
align 4
899
align 4
918
		@@:
900
		@@:
919
			;
901
			;
920
			bt dword[draw_mode],bit_light
902
			bt dword[draw_mode],bit_light
921
			jnc .norm1
903
			jnc .norm1
922
				stdcall [glNormal3fv], edx
904
				stdcall [glNormal3fv], edx
923
				add edx,12
905
				add edx,12
924
			.norm1:
906
			.norm1:
925
			movzx ebx,word[eax] ;1-ï ¢¥à設 
907
			movzx ebx,word[eax] ;1-ï ¢¥à設 
926
			imul ebx,12
908
			imul ebx,12
927
			add ebx,[edi+offs_obj_poi_data]
909
			add ebx,[edi+obj_3d.poi_data]
928
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
910
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
929
			movzx ebx,word[eax+2] ;2-ï ¢¥à設 
911
			movzx ebx,word[eax+2] ;2-ï ¢¥à設 
930
			imul ebx,12
912
			imul ebx,12
931
			add ebx,[edi+offs_obj_poi_data]
913
			add ebx,[edi+obj_3d.poi_data]
932
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
914
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
933
			movzx ebx,word[eax+4] ;3-ï ¢¥à設 
915
			movzx ebx,word[eax+4] ;3-ï ¢¥à設 
934
			imul ebx,12
916
			imul ebx,12
935
			add ebx,[edi+offs_obj_poi_data]
917
			add ebx,[edi+obj_3d.poi_data]
936
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
918
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
937
			add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
919
			add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
938
			dec ecx
920
			dec ecx
939
			jnz @b
921
			jnz @b
940
		stdcall [glEnd]
922
		stdcall [glEnd]
941
		jmp .end_points
923
		jmp .end_points
942
	.end_triangles:
924
	.end_triangles:
943
 
925
 
944
	;à¨á®¢ ­¨¥ â®ç¥ª
926
	;à¨á®¢ ­¨¥ â®ç¥ª
945
	bt dword[draw_mode],bit_vertexes
927
	bt dword[draw_mode],bit_vertexes
946
	jnc .end_points
928
	jnc .end_points
947
		stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert]
929
		stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert]
948
		stdcall [glBegin],GL_POINTS
930
		stdcall [glBegin],GL_POINTS
949
		mov eax,[edi+offs_obj_poi_data]
931
		mov eax,[edi+obj_3d.poi_data]
950
		mov ebx,[edi+offs_obj_poi_count]
932
		mov ebx,[edi+obj_3d.poi_count]
951
		mov edx,[edi+offs_obj_normals_poi_data]
933
		mov edx,[edi+obj_3d.normals_poi_data]
952
align 4
934
align 4
953
		@@:
935
		@@:
954
			bt dword[draw_mode],bit_light
936
			bt dword[draw_mode],bit_light
955
			jnc .norm0
937
			jnc .norm0
956
				stdcall [glNormal3fv], edx
938
				stdcall [glNormal3fv], edx
957
				add edx,12
939
				add edx,12
958
			.norm0:
940
			.norm0:
959
			stdcall [glVertex3f], [eax],[eax+4],[eax+8]
941
			stdcall [glVertex3f], [eax],[eax+4],[eax+8]
960
			add eax,12
942
			add eax,12
961
			dec ebx
943
			dec ebx
962
			jnz @b
944
			jnz @b
963
		stdcall [glEnd]
945
		stdcall [glEnd]
964
	.end_points:
946
	.end_points:
965
 
947
 
966
if version_edit eq 1
948
if version_edit eq 1
967
	;à¨á®¢ ­¨¥  ªâ¨¢­®© â®çª¨
949
	;à¨á®¢ ­¨¥  ªâ¨¢­®© â®çª¨
968
	stdcall [tl_node_get_data],tree3
950
	stdcall [tl_node_get_data],tree3
969
	cmp eax,0
951
	cmp eax,0
970
	je @f
952
	je @f
971
		;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
953
		;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
972
		mov eax,[eax]
954
		mov eax,[eax]
973
 
955
 
974
		stdcall [glBegin],GL_LINES
956
		stdcall [glBegin],GL_LINES
975
		stdcall [glColor3ub], [color_ox+2],[color_ox+1],[color_ox]
957
		stdcall [glColor3ub], [color_ox+2],[color_ox+1],[color_ox]
976
		stdcall [glVertex3f], [edi+offs_obj_x_min],[eax+4],[eax+8]
958
		stdcall [glVertex3f], [edi+obj_3d.x_min],[eax+4],[eax+8]
977
		stdcall [glVertex3f], [edi+offs_obj_x_max],[eax+4],[eax+8]
959
		stdcall [glVertex3f], [edi+obj_3d.x_max],[eax+4],[eax+8]
978
		stdcall [glColor3ub], [color_oy+2],[color_oy+1],[color_oy]
960
		stdcall [glColor3ub], [color_oy+2],[color_oy+1],[color_oy]
979
		stdcall [glVertex3f], [eax],[edi+offs_obj_y_min],[eax+8]
961
		stdcall [glVertex3f], [eax],[edi+obj_3d.y_min],[eax+8]
980
		stdcall [glVertex3f], [eax],[edi+offs_obj_y_max],[eax+8]
962
		stdcall [glVertex3f], [eax],[edi+obj_3d.y_max],[eax+8]
981
		stdcall [glColor3ub], [color_oz+2],[color_oz+1],[color_oz]
963
		stdcall [glColor3ub], [color_oz+2],[color_oz+1],[color_oz]
982
		stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_min]
964
		stdcall [glVertex3f], [eax],[eax+4],[edi+obj_3d.z_min]
983
		stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_max]
965
		stdcall [glVertex3f], [eax],[eax+4],[edi+obj_3d.z_max]
984
		stdcall [glEnd]
966
		stdcall [glEnd]
985
 
967
 
986
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
968
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
987
		stdcall [glPushMatrix]
969
		stdcall [glPushMatrix]
988
			stdcall [glTranslatef], [eax],[eax+4],[eax+8]
970
			stdcall [glTranslatef], [eax],[eax+4],[eax+8]
989
			stdcall [gluSphere], [qObj], [sph_radius], 8,8
971
			stdcall [gluSphere], [qObj], [sph_radius], 8,8
990
		stdcall [glPopMatrix]
972
		stdcall [glPopMatrix]
991
	@@:
973
	@@:
992
 
974
 
993
	;à¨á®¢ ­¨¥ ¢ë¤¥«¥­­ëå â®ç¥ª
975
	;à¨á®¢ ­¨¥ ¢ë¤¥«¥­­ëå â®ç¥ª
994
	cmp dword[obj_poi_sel_c],0
976
	cmp dword[obj_poi_sel_c],0
995
	je .end_select
977
	je .end_select
996
		mov ecx,dword[obj_poi_sel_c]
978
		mov ecx,dword[obj_poi_sel_c]
997
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
979
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
998
		stdcall dword[tl_node_poi_get_info], tree3,0
980
		stdcall dword[tl_node_poi_get_info], tree3,0
999
align 4
981
align 4
1000
		@@:
982
		@@:
1001
			cmp eax,0
983
			cmp eax,0
1002
			je .end_select
984
			je .end_select
1003
			mov ebx,eax
985
			mov ebx,eax
1004
			cmp word[ebx],ID_ICON_POINT_SEL
986
			cmp word[ebx],ID_ICON_POINT_SEL
1005
			jne .next_sel
987
			jne .next_sel
1006
			stdcall [tl_node_poi_get_data], tree3,ebx
988
			stdcall [tl_node_poi_get_data], tree3,ebx
1007
			mov eax,[eax]
989
			mov eax,[eax]
1008
			stdcall [glPushMatrix]
990
			stdcall [glPushMatrix]
1009
				stdcall [glTranslatef], [eax],[eax+4],[eax+8]
991
				stdcall [glTranslatef], [eax],[eax+4],[eax+8]
1010
				stdcall [gluSphere], [qObj], [sph_radius], 4,4
992
				stdcall [gluSphere], [qObj], [sph_radius], 4,4
1011
			stdcall [glPopMatrix]
993
			stdcall [glPopMatrix]
1012
			dec ecx
994
			dec ecx
1013
			jz .end_select
995
			jz .end_select
1014
			.next_sel:
996
			.next_sel:
1015
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
997
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
1016
			jmp @b
998
			jmp @b
1017
    .end_select:
999
    .end_select:
1018
end if
1000
end if
1019
 
1001
 
1020
	stdcall [glPopMatrix]
1002
	stdcall [glPopMatrix]
1021
if version_edit eq 1
1003
if version_edit eq 1
1022
	cmp dword[obj_poi_sel_c],0
1004
	cmp dword[obj_poi_sel_c],0
1023
	je @f
1005
	je @f
1024
		stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
1006
		stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
1025
	@@:
1007
	@@:
1026
end if
1008
end if
1027
	stdcall [kosglSwapBuffers]
1009
	stdcall [kosglSwapBuffers]
1028
	.end_f:
1010
	.end_f:
1029
	ret
1011
	ret
1030
endp
1012
endp
1031
 
1013
 
1032
align 4
1014
align 4
1033
SetLight:
1015
SetLight:
1034
	stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
1016
	stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
1035
	stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
1017
	stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
1036
 
1018
 
1037
	stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
1019
	stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
1038
	stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
1020
	stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
1039
 
1021
 
1040
	stdcall [glEnable], GL_COLOR_MATERIAL
1022
	stdcall [glEnable], GL_COLOR_MATERIAL
1041
	stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
1023
	stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
1042
	stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
1024
	stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
1043
	stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
1025
	stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
1044
	stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
1026
	stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
1045
 
1027
 
1046
	stdcall [glEnable],GL_LIGHTING
1028
	stdcall [glEnable],GL_LIGHTING
1047
	stdcall [glEnable],GL_LIGHT0
1029
	stdcall [glEnable],GL_LIGHT0
1048
	ret
1030
	ret
1049
 
1031
 
1050
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ¢¥à設
1032
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ¢¥à設
1051
align 4
1033
align 4
1052
mnu_vertexes_on:
1034
mnu_vertexes_on:
1053
	or dword[draw_mode], 1 shl bit_vertexes
1035
	or dword[draw_mode], 1 shl bit_vertexes
1054
	and dword[draw_mode], not ((1 shl bit_faces)+(1 shl bit_faces_mat)) ;¢ëª«îç ¥¬ ०¨¬ë à¨á®¢ ­¨ï, ª®â®àë¥ ¬®£ãâ ¬¥è âì
1036
	and dword[draw_mode], not ((1 shl bit_faces)+(1 shl bit_faces_mat)) ;¢ëª«îç ¥¬ ०¨¬ë à¨á®¢ ­¨ï, ª®â®àë¥ ¬®£ãâ ¬¥è âì
1055
	call update_obj
1037
	call update_obj
1056
	ret
1038
	ret
1057
 
1039
 
1058
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ª àª á­ëå £à ­¥©
1040
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ª àª á­ëå £à ­¥©
1059
align 4
1041
align 4
1060
mnu_edges_on:
1042
mnu_edges_on:
1061
	or dword[draw_mode], 1 shl bit_faces
1043
	or dword[draw_mode], 1 shl bit_faces
1062
	and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill)+(1 shl bit_faces_mat))
1044
	and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill)+(1 shl bit_faces_mat))
1063
	call update_obj
1045
	call update_obj
1064
	ret
1046
	ret
1065
 
1047
 
1066
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ᯫ®è­ëå £à ­¥©
1048
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ᯫ®è­ëå £à ­¥©
1067
align 4
1049
align 4
1068
mnu_faces_on:
1050
mnu_faces_on:
1069
	or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill)
1051
	or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill)
1070
	and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_mat))
1052
	and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_mat))
1071
	call update_obj
1053
	call update_obj
1072
	ret
1054
	ret
1073
 
1055
 
1074
;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥­¨¥
1056
;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥­¨¥
1075
align 4
1057
align 4
1076
mnu_light_on_off:
1058
mnu_light_on_off:
1077
	xor dword[draw_mode], 1 shl bit_light
1059
	xor dword[draw_mode], 1 shl bit_light
1078
	call update_obj
1060
	call update_obj
1079
	ret
1061
	ret
1080
 
1062
 
1081
align 4
1063
align 4
1082
mnu_smooth_on_off:
1064
mnu_smooth_on_off:
1083
	xor dword[draw_mode], 1 shl bit_smooth
1065
	xor dword[draw_mode], 1 shl bit_smooth
1084
	call update_obj
1066
	call update_obj
1085
	ret
1067
	ret
1086
 
1068
 
1087
align 4
1069
align 4
1088
mnu_reset_settings:
1070
mnu_reset_settings:
1089
	mov dword[angle_x],0.0
1071
	mov dword[angle_x],0.0
1090
	mov dword[angle_y],0.0
1072
	mov dword[angle_y],0.0
1091
	mov dword[angle_z],0.0
1073
	mov dword[angle_z],0.0
1092
	m2m dword[draw_mode],dword[def_dr_mode]
1074
	m2m dword[draw_mode],dword[def_dr_mode]
1093
	call update_obj
1075
	call update_obj
1094
	ret
1076
	ret
-
 
1077
 
-
 
1078
align 4
-
 
1079
mnu_make_scrshot:
-
 
1080
	pushad
-
 
1081
	copy_path open_dialog_name,communication_area_default_path,file_name,0
-
 
1082
	mov [OpenDialog_data.type],1
-
 
1083
	stdcall [OpenDialog_Start],OpenDialog_data
-
 
1084
	cmp [OpenDialog_data.status],2
-
 
1085
	je .end_save_file
-
 
1086
		;ª®¤ ¯à¨ 㤠筮¬ ®âªàë⨨ ¤¨ «®£ 
-
 
1087
		mov dword[png_data],0
-
 
1088
 
-
 
1089
		;create image struct
-
 
1090
		stdcall [img_create], [buf_ogl.w], [buf_ogl.h], Image.bpp24
-
 
1091
		mov ebx,eax
-
 
1092
		test eax,eax
-
 
1093
		jz @f
-
 
1094
			;copy foto to image buffer
-
 
1095
			mov edi,[eax+Image.Data]
-
 
1096
			mov esi,[buf_ogl]
-
 
1097
			mov ecx,[buf_ogl.w]
-
 
1098
			mov edx,[buf_ogl.h]
-
 
1099
			imul ecx,edx
-
 
1100
			imul ecx,3
-
 
1101
			shr ecx,2 ;OpenGL buffer align to 4
-
 
1102
			rep movsd
-
 
1103
 
-
 
1104
			;encode image
-
 
1105
			stdcall [img_encode], eax, LIBIMG_FORMAT_PNG, 0
-
 
1106
			test eax,eax
-
 
1107
			jz @f
-
 
1108
				mov [png_data],eax
-
 
1109
				mov [png_size],ecx
-
 
1110
		@@:
-
 
1111
		stdcall [img_destroy],ebx
-
 
1112
 
-
 
1113
        ; § ¯®«­ï¥¬ áâàãªâãàã ¤«ï á®åà ­¥­¨ï ä ©« 
-
 
1114
        mov ebx,run_file_70
-
 
1115
        mov dword[ebx],SSF_CREATE_FILE
-
 
1116
        mov eax,[png_size]
-
 
1117
        mov [ebx+12],eax ;file size
-
 
1118
        mov eax,[png_data]
-
 
1119
        mov [ebx+16],eax
-
 
1120
        mov dword[ebx+FileInfoBlock.FileName], openfile_path
-
 
1121
 
-
 
1122
        mcall SF_FILE,run_file_70
-
 
1123
        test eax,eax
-
 
1124
        jnz .save_error
-
 
1125
			;notify_window_run openfile_path
-
 
1126
			jmp @f
-
 
1127
		.save_error:
-
 
1128
			;á®®¡é¥­¨¥ ® ­¥ã¤ ç­®¬ á®åà ­¥­¨¨
-
 
1129
			notify_window_run txt_err_save_img_file
-
 
1130
		@@:
-
 
1131
		mcall SF_SYS_MISC, SSF_MEM_FREE, [png_data]
-
 
1132
	.end_save_file:
-
 
1133
	popad
-
 
1134
	ret
1095
 
1135
 
1096
if version_edit eq 1
1136
if version_edit eq 1
1097
 
1137
 
1098
align 4
1138
align 4
1099
update_obj:
1139
update_obj:
1100
	stdcall draw_3d, o3d
1140
	stdcall draw_3d, o3d
1101
	ret
1141
	ret
1102
 
1142
 
1103
else
1143
else
1104
 
1144
 
1105
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ᯫ®è­ëå £à ­¥©
1145
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ᯫ®è­ëå £à ­¥©
1106
align 4
1146
align 4
1107
mnu_faces_mat:
1147
mnu_faces_mat:
1108
	or dword[draw_mode], (1 shl bit_faces_mat)
1148
	or dword[draw_mode], (1 shl bit_faces_mat)
1109
	call update_obj
1149
	call update_obj
1110
	ret
1150
	ret
1111
 
1151
 
1112
align 4
1152
align 4
1113
update_obj:
1153
update_obj:
1114
push eax ebx
1154
push eax ebx
1115
	stdcall [tl_node_get_data],tree1
1155
	stdcall [tl_node_get_data],tree1
1116
	cmp eax,0
1156
	cmp eax,0
1117
	je @f
1157
	je @f
1118
		mov ebx,dword[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
1158
		mov ebx,dword[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
1119
		add ebx,dword[open_file_data] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ ¯ ¬ïâ¨
1159
		add ebx,dword[open_file_data] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ ¯ ¬ïâ¨
1120
		cmp word[ebx],CHUNK_OBJBLOCK
1160
		cmp word[ebx],CHUNK_OBJBLOCK
1121
		jne @f
1161
		jne @f
1122
			add eax,list_offs_obj3d
1162
			add eax,list_offs_obj3d
1123
			stdcall draw_3d,eax
1163
			stdcall draw_3d,eax
1124
	@@:
1164
	@@:
1125
pop ebx eax
1165
pop ebx eax
1126
	ret
1166
	ret
1127
 
1167
 
1128
;input:
1168
;input:
1129
; p_mat - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¯à¥¤ë¤ã饣® ¬ â¥à¨ « 
1169
; p_mat - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¯à¥¤ë¤ã饣® ¬ â¥à¨ « 
1130
align 4
1170
align 4
1131
proc found_mat_faces uses ebx, p_mat:dword
1171
proc found_mat_faces uses ebx, p_mat:dword
1132
	mov eax,[p_mat]
1172
	mov eax,[p_mat]
1133
	add eax,[eax+2]
1173
	add eax,[eax+2]
1134
	cmp word[eax],CHUNK_FACEMAT
1174
	cmp word[eax],CHUNK_FACEMAT
1135
	je @f
1175
	je @f
1136
		xor eax,eax
1176
		xor eax,eax
1137
	@@:
1177
	@@:
1138
	ret
1178
	ret
1139
endp
1179
endp
1140
 
1180
 
1141
align 4
1181
align 4
1142
proc get_mat_color uses ebx ecx edx edi esi, p_mat:dword
1182
proc get_mat_color uses ebx ecx edx edi esi, p_mat:dword
1143
	stdcall [tl_node_poi_get_info], tree1,0
1183
	stdcall [tl_node_poi_get_info], tree1,0
1144
	mov ecx,eax
1184
	mov ecx,eax
1145
	.cycle_0:
1185
	.cycle_0:
1146
		cmp ecx,0
1186
		cmp ecx,0
1147
		je .cycle_0_end
1187
		je .cycle_0_end
1148
			stdcall [tl_node_poi_get_data], tree1,ecx
1188
			stdcall [tl_node_poi_get_data], tree1,ecx
1149
			mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
1189
			mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
1150
			add ebx,[open_file_data]
1190
			add ebx,[open_file_data]
1151
			cmp word[ebx],CHUNK_MATERIAL
1191
			cmp word[ebx],CHUNK_MATERIAL
1152
			jne .end_add_p3
1192
			jne .end_add_p3
1153
			add eax,list_offs_obj3d
1193
			add eax,list_offs_obj3d
1154
			mov esi,[eax+offs_mat_name]
1194
			mov esi,[eax+material.name]
1155
			cmp esi,0
1195
			cmp esi,0
1156
			jne @f
1196
			jne @f
1157
				;init material
1197
				;init material
1158
				stdcall mat_init,eax,ebx
1198
				stdcall mat_init,eax,ebx
1159
				mov esi,[eax+offs_mat_name]
1199
				mov esi,[eax+material.name]
1160
			@@:
1200
			@@:
1161
			mov edi,[p_mat]
1201
			mov edi,[p_mat]
1162
			mov eax,5
1202
			mov eax,5
1163
			add edi,eax
1203
			add edi,eax
1164
align 4
1204
align 4
1165
			@@:
1205
			@@:
1166
				cmp al,0
1206
				cmp al,0
1167
				je .found
1207
				je .found
1168
				lodsb
1208
				lodsb
1169
				inc edi
1209
				inc edi
1170
				cmp byte[edi],al
1210
				cmp byte[edi],al
1171
				je @b
1211
				je @b
1172
		.end_add_p3:
1212
		.end_add_p3:
1173
		stdcall [tl_node_poi_get_next_info], tree1,ecx
1213
		stdcall [tl_node_poi_get_next_info], tree1,ecx
1174
		mov ecx,eax ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã
1214
		mov ecx,eax ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã
1175
		jmp .cycle_0
1215
		jmp .cycle_0
1176
	.cycle_0_end:
1216
	.cycle_0_end:
1177
 
1217
 
1178
	.no_found:
1218
	.no_found:
1179
		xor eax,eax
1219
		xor eax,eax
1180
		jmp .end_f
1220
		jmp .end_f
1181
	.found:
1221
	.found:
1182
		stdcall [tl_node_poi_get_data], tree1,ecx
1222
		stdcall [tl_node_poi_get_data], tree1,ecx
1183
		add eax,list_offs_obj3d
1223
		add eax,list_offs_obj3d
1184
		mov eax,[eax+offs_mat_col_diffuse]
1224
		mov eax,[eax+material.col_diffuse]
1185
	.end_f:
1225
	.end_f:
1186
	ret
1226
	ret
1187
endp
1227
endp
1188
 
1228
 
1189
align 4
1229
align 4
1190
proc draw_3d_faces_color o_data:dword, p_mat:dword, color:dword
1230
proc draw_3d_faces_color o_data:dword, p_mat:dword, color:dword
1191
pushad
1231
pushad
1192
	stdcall [glPolygonMode], GL_FRONT_AND_BACK,GL_FILL
1232
	stdcall [glPolygonMode], GL_FRONT_AND_BACK,GL_FILL
1193
	stdcall [glColor3ub],[color+2],[color+1],[color]
1233
	stdcall [glColor3ub],[color+2],[color+1],[color]
1194
	stdcall [glBegin],GL_TRIANGLES
1234
	stdcall [glBegin],GL_TRIANGLES
1195
	mov edi,[o_data]
1235
	mov edi,[o_data]
1196
	mov esi,[p_mat]
1236
	mov esi,[p_mat]
1197
	add esi,6
1237
	add esi,6
1198
	@@:
1238
	@@:
1199
		lodsb
1239
		lodsb
1200
		cmp al,0
1240
		cmp al,0
1201
		jne @b
1241
		jne @b
1202
	movzx ecx,word[esi] ;ecx - ç¨á«® £à ­¥© á ¤ ­­ë¬ ¬ â¥à¨ «®¬
1242
	movzx ecx,word[esi] ;ecx - ç¨á«® £à ­¥© á ¤ ­­ë¬ ¬ â¥à¨ «®¬
1203
	mov edx,[edi+offs_obj_poi_data]
1243
	mov edx,[edi+obj_3d.poi_data]
1204
 
1244
 
1205
	bt dword[draw_mode],bit_smooth
1245
	bt dword[draw_mode],bit_smooth
1206
	jnc @f
1246
	jnc @f
1207
	bt dword[draw_mode],bit_light
1247
	bt dword[draw_mode],bit_light
1208
	jnc @f
1248
	jnc @f
1209
align 4
1249
align 4
1210
	.cycle_0:
1250
	.cycle_0:
1211
		add esi,2
1251
		add esi,2
1212
		;word[esi] - ­®¬¥à âà¥ã£®«ì­¨ª 
1252
		;word[esi] - ­®¬¥à âà¥ã£®«ì­¨ª 
1213
		movzx ebx,word[esi]
1253
		movzx ebx,word[esi]
1214
 
1254
 
1215
		shl ebx,3
1255
		shl ebx,3
1216
		add ebx,[edi+offs_obj_tri_data]
1256
		add ebx,[edi+obj_3d.tri_data]
1217
	
1257
	
1218
		movzx eax,word[ebx] ;1-ï ¢¥à設 
1258
		movzx eax,word[ebx] ;1-ï ¢¥à設 
1219
		imul eax,12 ;float(x,y,z)
1259
		imul eax,12 ;float(x,y,z)
1220
			add eax,[edi+offs_obj_normals_poi_data]
1260
			add eax,[edi+obj_3d.normals_poi_data]
1221
			stdcall [glNormal3fv], eax
1261
			stdcall [glNormal3fv], eax
1222
			sub eax,[edi+offs_obj_normals_poi_data]
1262
			sub eax,[edi+obj_3d.normals_poi_data]
1223
		add eax,edx
1263
		add eax,edx
1224
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1264
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1225
 
1265
 
1226
		movzx eax,word[ebx+2] ;2-ï ¢¥à設 
1266
		movzx eax,word[ebx+2] ;2-ï ¢¥à設 
1227
		imul eax,12 ;float(x,y,z)
1267
		imul eax,12 ;float(x,y,z)
1228
			add eax,[edi+offs_obj_normals_poi_data]
1268
			add eax,[edi+obj_3d.normals_poi_data]
1229
			stdcall [glNormal3fv], eax
1269
			stdcall [glNormal3fv], eax
1230
			sub eax,[edi+offs_obj_normals_poi_data]
1270
			sub eax,[edi+obj_3d.normals_poi_data]
1231
		add eax,edx
1271
		add eax,edx
1232
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1272
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1233
 
1273
 
1234
		movzx eax,word[ebx+4] ;3-ï ¢¥à設 
1274
		movzx eax,word[ebx+4] ;3-ï ¢¥à設 
1235
		imul eax,12 ;float(x,y,z)
1275
		imul eax,12 ;float(x,y,z)
1236
			add eax,[edi+offs_obj_normals_poi_data]
1276
			add eax,[edi+obj_3d.normals_poi_data]
1237
			stdcall [glNormal3fv], eax
1277
			stdcall [glNormal3fv], eax
1238
			sub eax,[edi+offs_obj_normals_poi_data]
1278
			sub eax,[edi+obj_3d.normals_poi_data]
1239
		add eax,edx
1279
		add eax,edx
1240
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1280
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1241
		
1281
		
1242
		dec ecx
1282
		dec ecx
1243
		jnz .cycle_0
1283
		jnz .cycle_0
1244
	stdcall [glEnd]
1284
	stdcall [glEnd]
1245
	jmp .end_f
1285
	jmp .end_f
1246
 
1286
 
1247
align 4
1287
align 4
1248
	@@:
1288
	@@:
1249
		add esi,2
1289
		add esi,2
1250
		;word[esi] - ­®¬¥à âà¥ã£®«ì­¨ª 
1290
		;word[esi] - ­®¬¥à âà¥ã£®«ì­¨ª 
1251
		movzx ebx,word[esi]
1291
		movzx ebx,word[esi]
1252
		;­®à¬ «¨ ¤«ï ®á¢¥é¥­¨ï
1292
		;­®à¬ «¨ ¤«ï ®á¢¥é¥­¨ï
1253
		bt dword[draw_mode],bit_light
1293
		bt dword[draw_mode],bit_light
1254
		jnc .norm
1294
		jnc .norm
1255
			mov eax,ebx
1295
			mov eax,ebx
1256
			imul eax,12
1296
			imul eax,12
1257
			add eax,[edi+offs_obj_normals_tri_data]
1297
			add eax,[edi+obj_3d.normals_tri_data]
1258
			stdcall [glNormal3fv], eax
1298
			stdcall [glNormal3fv], eax
1259
		.norm:
1299
		.norm:
1260
 
1300
 
1261
		shl ebx,3
1301
		shl ebx,3
1262
		add ebx,[edi+offs_obj_tri_data]
1302
		add ebx,[edi+obj_3d.tri_data]
1263
	
1303
	
1264
		movzx eax,word[ebx] ;1-ï ¢¥à設 
1304
		movzx eax,word[ebx] ;1-ï ¢¥à設 
1265
		imul eax,12 ;float(x,y,z)
1305
		imul eax,12 ;float(x,y,z)
1266
		add eax,edx
1306
		add eax,edx
1267
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1307
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1268
 
1308
 
1269
		movzx eax,word[ebx+2] ;2-ï ¢¥à設 
1309
		movzx eax,word[ebx+2] ;2-ï ¢¥à設 
1270
		imul eax,12 ;float(x,y,z)
1310
		imul eax,12 ;float(x,y,z)
1271
		add eax,edx
1311
		add eax,edx
1272
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1312
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1273
 
1313
 
1274
		movzx eax,word[ebx+4] ;3-ï ¢¥à設 
1314
		movzx eax,word[ebx+4] ;3-ï ¢¥à設 
1275
		imul eax,12 ;float(x,y,z)
1315
		imul eax,12 ;float(x,y,z)
1276
		add eax,edx
1316
		add eax,edx
1277
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1317
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1278
		
1318
		
1279
		dec ecx
1319
		dec ecx
1280
		jnz @b
1320
		jnz @b
1281
	stdcall [glEnd]
1321
	stdcall [glEnd]
1282
 
1322
 
1283
.end_f:
1323
.end_f:
1284
popad
1324
popad
1285
	ret
1325
	ret
1286
endp
1326
endp
1287
 
1327
 
1288
end if
1328
end if
1289
 
1329
 
1290
align 4
1330
align 4
1291
draw_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ®¡ê¥ªâ 
1331
draw_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ®¡ê¥ªâ 
1292
def_dr_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ¯® 㬮«ç ­¨î
1332
def_dr_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ¯® 㬮«ç ­¨î
1293
delt_size dd 3.0 ;¨§¬¥­¥­¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë
1333
delt_size dd 3.0 ;¨§¬¥­¥­¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë
1294
mouse_drag dd 0 ;०¨¬ ¯®¢®à®â  áæ¥­ë ®â ¯¥à¥¬¥é¥­¨¨ ªãàá®à  ¬ëè¨
1334
mouse_drag dd 0 ;०¨¬ ¯®¢®à®â  áæ¥­ë ®â ¯¥à¥¬¥é¥­¨¨ ªãàá®à  ¬ëè¨
1295
mouse_x dd 0
1335
mouse_x dd 0
1296
mouse_y dd 0
1336
mouse_y dd 0
1297
sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥­¨ï  ªâ¨¢­®© â®çª¨
1337
sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥­¨ï  ªâ¨¢­®© â®çª¨
1298
>
1338
>