Subversion Repositories Kolibri OS

Rev

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

Rev 6513 Rev 6889
Line 26... Line 26...
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
Line 30... Line -...
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 ?
Line 58... Line -...
58
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
36
ends
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 ;£à ­¨ á § «¨¢ª®©
Line 83... Line 56...
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
Line -... Line 60...
-
 
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
Line -... Line 66...
-
 
66
end if
87
 
67
 
-
 
68
align 4
-
 
69
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
Line 88... Line 70...
88
 
70
png_data dd ?
89
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
71
png_size dd ?
90
 
72
 
91
align 4
73
align 4
Line 116... Line 98...
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
Line 140... Line 122...
140
 
122
 
Line 165... Line 147...
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
Line 182... Line 164...
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]
Line 206... Line 188...
206
			mov [edi+offs_obj_x_max],eax
188
			mov [edi+obj_3d.x_max],eax
207
		.next_x:
189
		.next_x:
208
 
190
 
Line 209... Line 191...
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]
Line 215... Line 197...
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
Line 223... Line 205...
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
Line 247... Line 229...
247
		fstsw ax
229
		fstsw ax
248
		sahf
230
		sahf
249
		ja .next_y
231
		ja .next_y
Line 250... Line 232...
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
Line 256... Line 238...
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]
Line 264... Line 246...
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
Line 288... Line 270...
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]
Line 291... Line 273...
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
Line 297... Line 279...
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]
Line 305... Line 287...
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
Line 314... Line 296...
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
Line 334... Line 316...
334
	sahf
316
	sahf
Line 356... Line 338...
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
Line 371... Line 353...
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
Line 460... Line 442...
460
			dec ebx
442
			dec ebx
461
			jnz @b
443
			jnz @b
Line 462... Line 444...
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
Line 471... Line 453...
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
Line 475... Line 457...
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: ;¯® £à ­ï¬
Line 634... Line 616...
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
Line 641... Line 623...
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
Line 647... Line 629...
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
Line 655... Line 637...
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
Line 662... Line 644...
662
		.end_points:
644
		.end_points:
663
 
645
 
664
		stdcall obj_set_sizes, edi
646
		stdcall obj_set_sizes, edi
Line 679... Line 661...
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]
Line 682... Line 664...
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
Line 687... Line 669...
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]
Line 697... Line 679...
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
Line 714... Line 696...
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
Line 734... Line 716...
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
Line 754... Line 736...
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
Line 763... Line 745...
763
 
745
 
764
		.end_material:
746
		.end_material:
765
	.no_material:
747
	.no_material:
766
	popad
748
	popad
Line 785... Line 767...
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
Line 789... Line 771...
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 ;¤¨äã§­ë© æ¢¥â
Line 793... Line 775...
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
Line 817... Line 799...
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
Line 829... Line 811...
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]
Line 840... Line 822...
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
Line 855... Line 837...
855
end if
837
end if
Line 856... Line 838...
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
Line 875... Line 857...
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
Line 911... Line 893...
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
Line 944... Line 926...
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
Line 971... Line 953...
971
		;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
953
		;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
972
		mov eax,[eax]
954
		mov eax,[eax]
Line 973... Line 955...
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]
Line 984... Line 966...
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]
Line 1091... Line 1073...
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
Line -... Line 1077...
-
 
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
 
Line 1096... Line 1136...
1096
if version_edit eq 1
1136
if version_edit eq 1
1097
 
1137
 
1098
align 4
1138
align 4
Line 1149... Line 1189...
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
Line 1179... Line 1219...
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
Line 1188... Line 1228...
1188
 
1228
 
Line 1198... Line 1238...
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]
Line 1204... Line 1244...
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
Line 1211... Line 1251...
1211
		add esi,2
1251
		add esi,2
1212
		;word[esi] - ­®¬¥à âà¥ã£®«ì­¨ª 
1252
		;word[esi] - ­®¬¥à âà¥ã£®«ì­¨ª 
1213
		movzx ebx,word[esi]
1253
		movzx ebx,word[esi]
Line 1214... Line 1254...
1214
 
1254
 
1215
		shl ebx,3
1255
		shl ebx,3
Line 1216... Line 1256...
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]
Line 1223... Line 1263...
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
Line 1230... Line 1270...
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]
Line 1237... Line 1277...
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]
Line 1252... Line 1292...
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:
Line 1260... Line 1300...
1260
 
1300
 
1261
		shl ebx,3
1301
		shl ebx,3
Line 1262... Line 1302...
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)