Subversion Repositories Kolibri OS

Rev

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

Rev 6022 Rev 6046
Line 10... Line 10...
10
3d_wnd_w equ 320
10
3d_wnd_w equ 320
11
3d_wnd_h equ 240
11
3d_wnd_h equ 240
12
SIZE_ONE_FLOAT equ 14
12
SIZE_ONE_FLOAT equ 14
13
MAX_OBJECT_SIZE equ (4+SIZE_ONE_FLOAT*3+1)
13
MAX_OBJECT_SIZE equ (4+SIZE_ONE_FLOAT*3+1)
Line 14... Line -...
14
 
-
 
15
bit_vertexes equ 0
-
 
16
bit_faces equ 1
-
 
17
bit_faces_fill equ 2
-
 
18
bit_light equ 3
-
 
19
 
-
 
20
ini_name db 'info3ds.ini',0
-
 
21
ini_sec_w3d db 'Window 3d',0
-
 
22
key_dv  db 'draw_vertices',0
-
 
23
key_df  db 'draw_faces',0
-
 
24
key_dff db 'draw_faces_fill',0
-
 
25
key_dl  db 'draw_light',0
-
 
26
key_ox  db 'col_ox',0
-
 
27
key_oy  db 'col_oy',0
-
 
28
key_oz  db 'col_oz',0
-
 
29
key_bk  db 'col_bkgnd',0
-
 
30
key_vert db 'col_vertices',0
-
 
31
key_face db 'col_faces',0
-
 
32
key_select db 'col_select',0
-
 
33
 
14
 
Line 34... Line 15...
34
prop_wnd_run db 0 ;¯¥à¥¬¥­­ ï á«¥¤ïé ï §  ⥬ çâ®-¡ë ­¥ § ¯ã᪠âì ¡®«ìè¥ 1-£® ®ª­  ᮠ᢮©á⢠¬¨ ®¤­®¢à¥¬¥­­®
15
prop_wnd_run db 0 ;¯¥à¥¬¥­­ ï á«¥¤ïé ï §  ⥬ çâ®-¡ë ­¥ § ¯ã᪠âì ¡®«ìè¥ 1-£® ®ª­  ᮠ᢮©á⢠¬¨ ®¤­®¢à¥¬¥­­®
35
 
16
 
36
txt_q db '?',0
17
txt_q db '?',0
37
txt_space:
18
txt_space:
38
	db SIZE_ONE_FLOAT dup(' ')
19
	db SIZE_ONE_FLOAT dup(' ')
Line 39... Line -...
39
.end:
-
 
40
	db 0
-
 
41
 
20
.end:
42
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
21
	db 0
43
 
22
 
44
obj_point: ;¤®¡ ¢«ï¥¬ë© ®¡ê¥ªâ
23
obj_point: ;¤®¡ ¢«ï¥¬ë© ®¡ê¥ªâ
Line 59... Line 38...
59
prop_start:
38
prop_start:
60
pushad
39
pushad
61
	mcall 40,0x27 ;¬ áª  ®¦¨¤ ¥¬ëå ᮡë⨩
40
	mcall 40,0x27 ;¬ áª  ®¦¨¤ ¥¬ëå ᮡë⨩
62
	inc byte[prop_wnd_run]
41
	inc byte[prop_wnd_run]
63
	mov dword[w_scr_t3.type],1
42
	mov dword[w_scr_t3.type],1
-
 
43
	mov edi,o3d
64
	call prop_wnd_clear_param
44
	stdcall obj_clear_param, edi
Line 65... Line 45...
65
 
45
 
66
	stdcall [tl_node_get_data],tree1
46
	stdcall [tl_node_get_data],tree1
67
	xor edx,edx
47
	xor edx,edx
68
	mov dword[capt_p],txt_q
48
	mov dword[capt_p],txt_q
Line 146... Line 126...
146
				mov eax,[eax]
126
				mov eax,[eax]
147
				add eax,[open_file_data]
127
				add eax,[open_file_data]
148
				cmp word[eax],CHUNK_FACELIST
128
				cmp word[eax],CHUNK_FACELIST
149
				jne .cycle_2
129
				jne .cycle_2
150
				movzx ecx,word[eax+6]
130
				movzx ecx,word[eax+6]
151
				mov [obj_tri_count],ecx
131
				mov [edi+offs_obj_tri_count],ecx
152
				add eax,8 ;2+4+2 (chunk+size+count)
132
				add eax,8 ;2+4+2 (chunk+size+count)
153
				mov [obj_tri_data],eax
133
				mov [edi+offs_obj_tri_data],eax
154
			jmp .set_points
134
			jmp .set_points
155
		.end_vlist:
135
		.end_vlist:
156
		cmp word[ebx],CHUNK_TRACKPIVOT
136
		cmp word[ebx],CHUNK_TRACKPIVOT
157
		jne @f
137
		jne @f
158
			inc edx
138
			inc edx
Line 166... Line 146...
166
			add ebx,6
146
			add ebx,6
167
			mov dword[capt_p],txt_b014
147
			mov dword[capt_p],txt_b014
168
			;jmp .set_points
148
			;jmp .set_points
169
		@@:
149
		@@:
170
		.set_points:
150
		.set_points:
171
		mov [obj_poi_data],ebx
151
		mov [edi+offs_obj_poi_data],ebx
172
		mov [obj_poi_count],edx
152
		mov [edi+offs_obj_poi_count],edx
173
	.no_points:
153
	.no_points:
Line 174... Line 154...
174
 
154
 
175
	;­ áâனª  ᯨ᪠ ®¡ê¥ªâ®¢
155
	;­ áâனª  ᯨ᪠ ®¡ê¥ªâ®¢
176
	mov dword[tree3.info_max_count],2
156
	mov dword[tree3.info_max_count],2
Line 210... Line 190...
210
			dec edx
190
			dec edx
211
			cmp edx,0
191
			cmp edx,0
212
			jg .new_point
192
			jg .new_point
213
			stdcall dword[tl_cur_beg], tree3
193
			stdcall dword[tl_cur_beg], tree3
214
	.no_object:
194
	.no_object:
215
	call obj_set_sizes
195
	stdcall obj_set_sizes, o3d
216
	call obj_set_normals
196
	stdcall obj_set_normals, o3d
217
	edit_boxes_set_sys_color edit1,editboxes_end,sc ;ãáâ ­®¢ª  á¨á⥬­ëå 梥⮢
197
	edit_boxes_set_sys_color edit1,editboxes_end,sc ;ãáâ ­®¢ª  á¨á⥬­ëå 梥⮢
218
	stdcall [edit_box_set_text], edit1, txt_q
198
	stdcall [edit_box_set_text], edit1, txt_q
219
	stdcall [edit_box_set_text], edit2, txt_q
199
	stdcall [edit_box_set_text], edit2, txt_q
220
	stdcall [edit_box_set_text], edit3, txt_q
200
	stdcall [edit_box_set_text], edit3, txt_q
221
	mov eax,0xc0c0c0
201
	mov eax,0xc0c0c0
Line 315... Line 295...
315
	stdcall [edit_box_draw], edit1
295
	stdcall [edit_box_draw], edit1
316
	stdcall [edit_box_draw], edit2
296
	stdcall [edit_box_draw], edit2
317
	stdcall [edit_box_draw], edit3
297
	stdcall [edit_box_draw], edit3
Line 318... Line 298...
318
 
298
 
319
	stdcall [kmainmenu_draw], [main_menu]
299
	stdcall [kmainmenu_draw], [main_menu]
320
	call draw_3d
300
	stdcall draw_3d, o3d
321
	mcall 12,2
301
	mcall 12,2
322
popad
302
popad
Line 323... Line -...
323
	ret
-
 
324
 
-
 
325
;ãáâ ­®¢ª  ¢á¥å ®á­®¢­ëå ¯¥à¥¬¥­­ëå ¯® 㬮«ç ­¨î
-
 
326
align 4
-
 
327
prop_wnd_clear_param:
-
 
328
	;ãáâ ­®¢ª  ¯ à ¬¥â஢ ®â®¡à ¦¥­¨ï
-
 
329
	call mnu_reset_settings
-
 
330
 
-
 
331
	;®¡­ã«¥­¨¥ 㪠§ â¥«¥© ­  ¤ ­­ë¥ ®¡ê¥ªâ®¢
-
 
332
	mov dword[obj_poi_data],0
-
 
333
	mov dword[obj_poi_count],0
-
 
334
	mov dword[obj_poi_sel_c],0
-
 
335
	mov dword[obj_tri_data],0
-
 
336
	mov dword[obj_tri_count],0
-
 
337
	mov dword[obj_normals_tri_count],0
-
 
338
	mov dword[obj_normals_poi_count],0
-
 
339
	stdcall mem.Free,[obj_normals_tri_data]
-
 
340
	stdcall mem.Free,[obj_normals_poi_data]
-
 
341
	mov dword[obj_normals_tri_data],0
-
 
342
	mov dword[obj_normals_poi_data],0
-
 
343
	ret
-
 
344
 
-
 
345
;¯®¨áª ¤ ­­ëå
-
 
346
;input:
-
 
347
;eax - ⥪ã騩 㧥«
-
 
348
;output:
-
 
349
;eax - áâàãªâãà  â¥ªã饣® 㧫  (¨«¨ 0 ¯à¨ ­¥ã¤ ç¥)
-
 
350
align 4
-
 
351
proc found_block_data uses ebx ecx edx, tlist:dword
-
 
352
	mov edx,[tlist]
-
 
353
	mov ecx,eax
-
 
354
	stdcall [tl_node_poi_get_info], edx,0
-
 
355
	@@:
-
 
356
		mov ebx,eax
-
 
357
		stdcall [tl_node_poi_get_data], edx,ebx
-
 
358
		cmp eax,ecx
-
 
359
		je @f ;¥á«¨ ¯®¯ «¨ ­  ¢ë¡à ­­ë© 㧥«
-
 
360
		stdcall [tl_node_poi_get_next_info], edx,ebx
-
 
361
		cmp eax,0
-
 
362
		jne @b
-
 
363
		jmp .end
-
 
364
	@@:
-
 
365
		mov eax,ebx
-
 
366
	.end:
-
 
367
	ret
-
 
368
endp
-
 
369
 
-
 
370
;ãáâ ­®¢ª  à §¬¥à®¢ ®¡ê¥ªâ 
-
 
371
align 4
-
 
372
proc obj_set_sizes uses eax ebx esi
-
 
373
	cmp dword[obj_poi_count],0
-
 
374
	je .end
-
 
375
		finit
-
 
376
		mov eax,[obj_poi_data]
-
 
377
		mov ebx,dword[eax]
-
 
378
		mov [obj_x_min],ebx
-
 
379
		mov [obj_x_max],ebx
-
 
380
		mov ebx,dword[eax+4]
-
 
381
		mov [obj_y_min],ebx
-
 
382
		mov [obj_y_max],ebx
-
 
383
		mov ebx,dword[eax+8]
-
 
384
		mov [obj_z_min],ebx
-
 
385
		mov [obj_z_max],ebx
-
 
386
 
-
 
387
	mov ebx,[obj_poi_data]
-
 
388
	mov esi,[obj_poi_count]
-
 
389
align 4
-
 
390
	.cycle_0: ;à ¡®â  á ª®®à¤¨­ â®© x
-
 
391
		fld dword[ebx]
-
 
392
		fld dword[obj_x_min]
-
 
393
		fcomp
-
 
394
		fstsw ax
-
 
395
		sahf
-
 
396
		jb @f
-
 
397
			mov eax,[ebx]
-
 
398
			mov [obj_x_min],eax
-
 
399
			ffree st0
-
 
400
			fincstp
-
 
401
			jmp .next_x
-
 
402
		@@:
-
 
403
		fld dword[obj_x_max]
-
 
404
		fcompp
-
 
405
		fstsw ax
-
 
406
		sahf
-
 
407
		ja .next_x
-
 
408
			mov eax,[ebx]
-
 
409
			mov [obj_x_max],eax
-
 
410
		.next_x:
-
 
411
 
-
 
412
		add ebx,12
-
 
413
		dec esi
-
 
414
		jnz .cycle_0
-
 
415
 
-
 
416
		fld1
-
 
417
		fld dword[obj_x_max]
-
 
418
		fsub dword[obj_x_min]
-
 
419
		fst dword[obj_x_centr]
-
 
420
		fdivp ;1/size.x
-
 
421
		fstp dword[obj_x_scale]
-
 
422
 
-
 
423
		fld dword[obj_x_centr]
-
 
424
		fld1
-
 
425
		fld1
-
 
426
		faddp
-
 
427
		fdivp ;centr.x = size.x/2
-
 
428
		fadd dword[obj_x_min]
-
 
429
		fchs
-
 
430
		fstp dword[obj_x_centr]
-
 
431
 
-
 
432
	mov ebx,[obj_poi_data]
-
 
433
	mov esi,[obj_poi_count]
-
 
434
align 4
-
 
435
	.cycle_1: ;à ¡®â  á ª®®à¤¨­ â®© y
-
 
436
		fld dword[ebx+4]
-
 
437
		fld dword[obj_y_min]
-
 
438
		fcomp
-
 
439
		fstsw ax
-
 
440
		sahf
-
 
441
		jb @f
-
 
442
			mov eax,[ebx+4]
-
 
443
			mov [obj_y_min],eax
-
 
444
			ffree st0
-
 
445
			fincstp
-
 
446
			jmp .next_y
-
 
447
		@@:
-
 
448
		fld dword[obj_y_max]
-
 
449
		fcompp
-
 
450
		fstsw ax
-
 
451
		sahf
-
 
452
		ja .next_y
-
 
453
			mov eax,[ebx+4]
-
 
454
			mov [obj_y_max],eax
-
 
455
		.next_y:
-
 
456
 
-
 
457
		add ebx,12
-
 
458
		dec esi
-
 
459
		jnz .cycle_1
-
 
460
 
-
 
461
		fld1
-
 
462
		fld dword[obj_y_max]
-
 
463
		fsub dword[obj_y_min]
-
 
464
		fst dword[obj_y_centr]
-
 
465
		fdivp ;1/size.y
-
 
466
		fstp dword[obj_y_scale]
-
 
467
 
-
 
468
		fld dword[obj_y_centr]
-
 
469
		fld1
-
 
470
		fld1
-
 
471
		faddp
-
 
472
		fdivp ;centr.y = size.y/2
-
 
473
		fadd dword[obj_y_min]
-
 
474
		fchs
-
 
475
		fstp dword[obj_y_centr]
-
 
476
 
-
 
477
	mov ebx,[obj_poi_data]
-
 
478
	mov esi,[obj_poi_count]
-
 
479
align 4
-
 
480
	.cycle_2: ;à ¡®â  á ª®®à¤¨­ â®© z
-
 
481
		fld dword[ebx+8]
-
 
482
		fld dword[obj_z_min]
-
 
483
		fcomp
-
 
484
		fstsw ax
-
 
485
		sahf
-
 
486
		jb @f
-
 
487
			mov eax,[ebx+8]
-
 
488
			mov [obj_z_min],eax
-
 
489
			ffree st0
-
 
490
			fincstp
-
 
491
			jmp .next_z
-
 
492
		@@:
-
 
493
		fld dword[obj_z_max]
-
 
494
		fcompp
-
 
495
		fstsw ax
-
 
496
		sahf
-
 
497
		ja .next_z
-
 
498
			mov eax,[ebx+8]
-
 
499
			mov [obj_z_max],eax
-
 
500
		.next_z:
-
 
501
 
-
 
502
		add ebx,12
-
 
503
		dec esi
-
 
504
		jnz .cycle_2
-
 
505
 
-
 
506
		fld1
-
 
507
		fld dword[obj_z_max]
-
 
508
		fsub dword[obj_z_min]
-
 
509
		fst dword[obj_z_centr]
-
 
510
		fdivp ;1/size.z
-
 
511
		fstp dword[obj_z_scale]
-
 
512
 
-
 
513
		fld dword[obj_z_centr]
-
 
514
		fld1
-
 
515
		fld1
-
 
516
		faddp
-
 
517
		fdivp ;centr.z = size.z/2
-
 
518
		fadd dword[obj_z_min]
-
 
519
		fchs
-
 
520
		fstp dword[obj_z_centr]
-
 
521
 
-
 
522
		;­ å®¤¨¬ à ¤¨ãá ¤«ï áä¥àë
-
 
523
		fld dword[obj_x_max]
-
 
524
		fsub dword[obj_x_min]
-
 
525
		fld dword[obj_y_max]
-
 
526
		fsub dword[obj_y_min]
-
 
527
		faddp
-
 
528
		fild dword[rad_c]
-
 
529
		fdivp ;radius=(size.x+size.y)/rad_c
-
 
530
		fstp dword[sph_radius]
-
 
531
 
-
 
532
	;¤¥« ¥¬ ®¤¨­ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ­¥ ­ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥­¨ï
-
 
533
	fld dword[obj_y_scale]
-
 
534
	fdiv dword[ratio] ;¯à¨¢¥¤¥­¨¥ ¬ áèâ ¡  ¯® ®á¨ y ãç¨â뢠ï çâ® ¯® ¢ëá®â¥ íªà ­ ¬¥­ìè¥
-
 
535
	fcomp dword[obj_x_scale]
-
 
536
	fstsw ax
-
 
537
	sahf
-
 
538
	jb @f
-
 
539
		;ᦠ⨥ ¬ áèâ ¡  ¯® y
-
 
540
		fld dword[obj_x_scale]
-
 
541
		fmul dword[ratio]
-
 
542
		fstp dword[obj_y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x
-
 
543
		jmp .end
-
 
544
	@@:
-
 
545
		;ᦠ⨥ ¬ áèâ ¡  ¯® x >...<
-
 
546
		fld	dword[obj_x_scale]
-
 
547
		fdiv dword[ratio]
-
 
548
		fstp dword[obj_x_scale]
-
 
549
	.end:
-
 
550
	ret
-
 
551
endp
-
 
552
 
-
 
553
;ãáâ ­®¢ª  ­®à¬ «¥© ¤«ï £à ­¥©
-
 
554
align 4
-
 
555
proc obj_set_normals
-
 
556
locals
-
 
557
	tbl1 rd 9 ;ebp-72
-
 
558
	tbl2 rd 9 ;ebp-36
-
 
559
endl
-
 
560
pushad
-
 
561
	cmp dword[obj_poi_count],0
-
 
562
	je .end
-
 
563
		finit
-
 
564
		mov ecx,[obj_tri_count]
-
 
565
		mov [obj_normals_tri_count],ecx ;­  ª ¦¤ë© âà¥ã£®«ì­¨ª 1 ­ à¬ «ì
-
 
566
		cmp ecx,0
-
 
567
		je .end
-
 
568
		imul ecx,12
-
 
569
		stdcall mem.Alloc, ecx
-
 
570
		mov [obj_normals_tri_data],eax
-
 
571
 
-
 
572
		mov edx,[obj_tri_data]
-
 
573
		mov ebx,[obj_tri_count]
-
 
574
align 4
-
 
575
		@@:
-
 
576
			mov edi,ebp
-
 
577
			sub edi,36 ;tbl2
-
 
578
			movzx esi,word[edx] ;1-ï ¢¥à設 
-
 
579
			imul esi,12
-
 
580
			add esi,[obj_poi_data]
-
 
581
			mov ecx,3
-
 
582
			rep movsd
-
 
583
			movzx esi,word[edx+2] ;2-ï ¢¥à設 
-
 
584
			imul esi,12
-
 
585
			add esi,[obj_poi_data]
-
 
586
			mov ecx,3
-
 
587
			rep movsd
-
 
588
			movzx esi,word[edx+4] ;3-ï ¢¥à設 
-
 
589
			imul esi,12
-
 
590
			add esi,[obj_poi_data]
-
 
591
			mov ecx,3
-
 
592
			rep movsd
-
 
593
 
-
 
594
			mov esi,ebp
-
 
595
			sub esi,72 ;tbl1
-
 
596
			sub edi,36 ;tbl2
-
 
597
			;v1 <-> v2
-
 
598
			fld dword[edi+12]
-
 
599
			fsub dword[edi]
-
 
600
			fstp dword[esi] ;(x1-x2)
-
 
601
			fld dword[edi+16]
-
 
602
			fsub dword[edi+4]
-
 
603
			fstp dword[esi+4] ;(y1-y2)
-
 
604
			fld dword[edi+20]
-
 
605
			fsub dword[edi+8]
-
 
606
			fstp dword[esi+8] ;(z1-z2)
-
 
607
			;v2 <-> v3
-
 
608
			fld dword[edi+24]
-
 
609
			fsub dword[edi+12]
-
 
610
			fstp dword[esi+12] ;(x2-x3)
-
 
611
			fld dword[edi+28]
-
 
612
			fsub dword[edi+16]
-
 
613
			fstp dword[esi+16] ;(y2-y3)
-
 
614
			fld dword[edi+32]
-
 
615
			fsub dword[edi+20]
-
 
616
			fstp dword[esi+20] ;(z2-z3)
-
 
617
			;v3 <-> v1
-
 
618
			fld dword[edi]
-
 
619
			fsub dword[edi+24]
-
 
620
			fstp dword[esi+24] ;(x3-x1)
-
 
621
			fld dword[edi+4]
-
 
622
			fsub dword[edi+28]
-
 
623
			fstp dword[esi+28] ;(y3-y1)
-
 
624
			fld dword[edi+8]
-
 
625
			fsub dword[edi+32]
-
 
626
			fstp dword[esi+32] ;(z3-z1)
-
 
627
 
-
 
628
			;a1,a2,a3
-
 
629
			fld dword[esi+4]
-
 
630
			fmul dword[esi+8]
-
 
631
			fstp dword[edi] ;a1=(y1-y2)*(z1-z2)
-
 
632
			fld dword[esi+16]
-
 
633
			fmul dword[esi+20]
-
 
634
			fstp dword[edi+4] ;a2=(y2-y3)*(z2-z3)
-
 
635
			fld dword[esi+28]
-
 
636
			fmul dword[esi+32]
-
 
637
			fstp dword[edi+8] ;a3=(y3-y1)*(z3-z1)
-
 
638
			;b1,b2,b3
-
 
639
			fld dword[esi]
-
 
640
			fmul dword[esi+8]
-
 
641
			fstp dword[edi] ;b1=(x1-x2)*(z1-z2)
-
 
642
			fld dword[esi+12]
-
 
643
			fmul dword[esi+20]
-
 
644
			fstp dword[edi+4] ;b2=(x2-x3)*(z2-z3)
-
 
645
			fld dword[esi+24]
-
 
646
			fmul dword[esi+32]
-
 
647
			fstp dword[edi+8] ;b3=(x3-x1)*(z3-z1)
-
 
648
			;c1,á2,á3
-
 
649
			fld dword[esi]
-
 
650
			fmul dword[esi+4]
-
 
651
			fstp dword[edi] ;c1=(x1-x2)*(y1-y2)
-
 
652
			fld dword[esi+12]
-
 
653
			fmul dword[esi+16]
-
 
654
			fstp dword[edi+4] ;c2=(x2-x3)*(y2-y3)
-
 
655
			fld dword[esi+24]
-
 
656
			fmul dword[esi+28]
-
 
657
			fstp dword[edi+8] ;c3=(x3-x1)*(y3-y1)
-
 
658
			
-
 
659
			fld dword[edi]
-
 
660
			fadd dword[edi+4]
-
 
661
			fadd dword[edi+8]
-
 
662
			fstp dword[eax] ;set normal.a
-
 
663
			fld dword[edi+12]
-
 
664
			fadd dword[edi+16]
-
 
665
			fadd dword[edi+20]
-
 
666
			fstp dword[eax+4] ;set normal.b
-
 
667
			fld dword[edi+24]
-
 
668
			fadd dword[edi+28]
-
 
669
			fadd dword[edi+32]
-
 
670
			fstp dword[eax+8] ;set normal.c
-
 
671
			
-
 
672
			add edx,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
-
 
673
			add eax,12
-
 
674
			dec ebx
-
 
675
			jnz @b
-
 
676
	.end:
-
 
677
popad
-
 
678
	ret
-
 
679
endp
-
 
680
 
-
 
681
;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
-
 
682
align 4
-
 
683
draw_3d:
-
 
684
	cmp dword[obj_poi_count],2
-
 
685
	jl .end_f
-
 
686
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
-
 
687
	stdcall [glPushMatrix]
-
 
688
	bt dword[draw_mode],bit_light
-
 
689
	jnc @f
-
 
690
		call SetLight
-
 
691
		jmp .end_l
-
 
692
	@@:
-
 
693
		stdcall [glDisable],GL_LIGHTING
-
 
694
	.end_l:
-
 
695
	stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
-
 
696
	stdcall [glScalef], [obj_x_scale],[obj_y_scale],[obj_z_scale]
-
 
697
	stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
-
 
698
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
-
 
699
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
-
 
700
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
-
 
701
	stdcall [glTranslatef], [obj_x_centr],[obj_y_centr],[obj_z_centr]
-
 
702
 
-
 
703
	;à¨á®¢ ­¨¥ â®ç¥ª
-
 
704
	bt dword[draw_mode],bit_vertexes
-
 
705
	jnc .end_points
-
 
706
		stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert]
-
 
707
		stdcall [glBegin],GL_POINTS
-
 
708
		mov eax,[obj_poi_data]
-
 
709
		mov ebx,[obj_poi_count]
-
 
710
		@@:
-
 
711
			stdcall [glVertex3f], [eax],[eax+4],[eax+8]
-
 
712
			add eax,12
-
 
713
			dec ebx
-
 
714
			jnz @b
-
 
715
		stdcall [glEnd]
-
 
716
	.end_points:
-
 
717
 
-
 
718
	;à¨á®¢ ­¨¥  ªâ¨¢­®© â®çª¨
-
 
719
	stdcall [tl_node_get_data],tree3
-
 
720
	cmp eax,0
-
 
721
	je @f
-
 
722
		;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
-
 
723
		mov eax,[eax]
-
 
724
 
-
 
725
		stdcall [glBegin],GL_LINES
-
 
726
		stdcall [glColor3ub],[color_ox+2],[color_ox+1],[color_ox]
-
 
727
		stdcall [glVertex3f], [obj_x_min],[eax+4],[eax+8]
-
 
728
		stdcall [glVertex3f], [obj_x_max],[eax+4],[eax+8]
-
 
729
		stdcall [glColor3ub],[color_oy+2],[color_oy+1],[color_oy]
-
 
730
		stdcall [glVertex3f], [eax],[obj_y_min],[eax+8]
-
 
731
		stdcall [glVertex3f], [eax],[obj_y_max],[eax+8]
-
 
732
		stdcall [glColor3ub],[color_oz+2],[color_oz+1],[color_oz]
-
 
733
		stdcall [glVertex3f], [eax],[eax+4],[obj_z_min]
-
 
734
		stdcall [glVertex3f], [eax],[eax+4],[obj_z_max]
-
 
735
		stdcall [glEnd]
-
 
736
 
-
 
737
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
-
 
738
		stdcall [glPushMatrix]
-
 
739
			stdcall [glTranslatef], [eax],[eax+4],[eax+8]
-
 
740
			stdcall [gluSphere], [qObj], [sph_radius], 8,8
-
 
741
		stdcall [glPopMatrix]
-
 
742
	@@:
-
 
743
 
-
 
744
	;à¨á®¢ ­¨¥ ¢ë¤¥«¥­­ëå â®ç¥ª
-
 
745
	cmp dword[obj_poi_sel_c],0
-
 
746
	je .end_select
-
 
747
		mov ecx,dword[obj_poi_sel_c]
-
 
748
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
-
 
749
		stdcall dword[tl_node_poi_get_info], tree3,0
-
 
750
		@@:
-
 
751
			cmp eax,0
-
 
752
			je .end_select
-
 
753
			mov ebx,eax
-
 
754
			cmp word[ebx],ID_ICON_POINT_SEL
-
 
755
			jne .next_sel
-
 
756
			stdcall [tl_node_poi_get_data], tree3,ebx
-
 
757
			mov eax,[eax]
-
 
758
			stdcall [glPushMatrix]
-
 
759
				stdcall [glTranslatef], [eax],[eax+4],[eax+8]
-
 
760
				stdcall [gluSphere], [qObj], [sph_radius], 4,4
-
 
761
			stdcall [glPopMatrix]
-
 
762
			dec ecx
-
 
763
			jz .end_select
-
 
764
			.next_sel:
-
 
765
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
-
 
766
			jmp @b
-
 
767
    .end_select:
-
 
768
 
-
 
769
	;à¨á®¢ ­¨¥ £à ­¥©
-
 
770
	bt dword[draw_mode],bit_faces
-
 
771
	jnc .end_triangles
-
 
772
	cmp dword[obj_tri_count],0
-
 
773
	je .end_triangles
-
 
774
	cmp dword[obj_poi_count],0
-
 
775
	je .end_triangles
-
 
776
		bt dword[draw_mode],bit_faces_fill
-
 
777
		jc @f
-
 
778
			push GL_LINE
-
 
779
			jmp .end_0
-
 
780
		@@:
-
 
781
			push GL_FILL
-
 
782
		.end_0:
-
 
783
		stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥
-
 
784
		stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face]
-
 
785
		stdcall [glBegin],GL_TRIANGLES
-
 
786
		mov eax,[obj_tri_data]
-
 
787
		mov ecx,[obj_tri_count]
-
 
788
		mov edx,[obj_normals_tri_data]
-
 
789
		@@:
-
 
790
			;
-
 
791
			bt dword[draw_mode],bit_light
-
 
792
			jnc .norm
-
 
793
				;[obj_normals_tri_count]
-
 
794
				stdcall [glNormal3fv], edx
-
 
795
				add edx,12
-
 
796
			.norm:
-
 
797
			;
-
 
798
			movzx ebx,word[eax] ;1-ï ¢¥à設 
-
 
799
			imul ebx,12
-
 
800
			add ebx,[obj_poi_data]
-
 
801
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
-
 
802
			movzx ebx,word[eax+2] ;2-ï ¢¥à設 
-
 
803
			imul ebx,12
-
 
804
			add ebx,[obj_poi_data]
-
 
805
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
-
 
806
			movzx ebx,word[eax+4] ;3-ï ¢¥à設 
-
 
807
			imul ebx,12
-
 
808
			add ebx,[obj_poi_data]
-
 
809
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
-
 
810
			add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
-
 
811
			dec ecx
-
 
812
			jnz @b
-
 
813
		stdcall [glEnd]
-
 
814
	.end_triangles:
-
 
815
 
-
 
816
	stdcall [glPopMatrix]
-
 
817
	cmp dword[obj_poi_sel_c],0
-
 
818
	je @f
-
 
819
		stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
-
 
820
	@@:
-
 
821
	stdcall [kosglSwapBuffers]
-
 
822
	.end_f:
-
 
823
	ret
-
 
824
 
-
 
825
align 4
-
 
826
SetLight:
-
 
827
	stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
-
 
828
	stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
-
 
829
 
-
 
830
	stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
-
 
831
	stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
-
 
832
 
-
 
833
	stdcall [glEnable], GL_COLOR_MATERIAL
-
 
834
	stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
-
 
835
	stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
-
 
836
	stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
-
 
837
	stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
-
 
838
 
-
 
839
	stdcall [glEnable],GL_LIGHTING
-
 
840
	stdcall [glEnable],GL_LIGHT0
-
 
841
	ret
303
	ret
842
 
304
 
843
align 4
305
align 4
Line 844... Line 306...
844
proc prop_key uses eax ebx
306
proc prop_key uses eax ebx
Line 868... Line 330...
868
	cmp ah,178 ;Up
330
	cmp ah,178 ;Up
869
	jne @f
331
	jne @f
870
		fld dword[angle_x]
332
		fld dword[angle_x]
871
		fadd dword[delt_size]
333
		fadd dword[delt_size]
872
		fstp dword[angle_x]
334
		fstp dword[angle_x]
873
		call draw_3d
335
		stdcall draw_3d, o3d
874
		jmp .end
336
		jmp .end
875
	@@:
337
	@@:
876
	cmp ah,177 ;Down
338
	cmp ah,177 ;Down
877
	jne @f
339
	jne @f
878
		fld dword[angle_x]
340
		fld dword[angle_x]
879
		fsub dword[delt_size]
341
		fsub dword[delt_size]
880
		fstp dword[angle_x]
342
		fstp dword[angle_x]
881
		call draw_3d
343
		stdcall draw_3d, o3d
882
		jmp .end
344
		jmp .end
883
	@@:
345
	@@:
884
	cmp ah,176 ;Left
346
	cmp ah,176 ;Left
885
	jne @f
347
	jne @f
886
		fld dword[angle_y]
348
		fld dword[angle_y]
887
		fadd dword[delt_size]
349
		fadd dword[delt_size]
888
		fstp dword[angle_y]
350
		fstp dword[angle_y]
889
		call draw_3d
351
		stdcall draw_3d, o3d
890
		jmp .end
352
		jmp .end
891
	@@:
353
	@@:
892
	cmp ah,179 ;Right
354
	cmp ah,179 ;Right
893
	jne @f
355
	jne @f
894
		fld dword[angle_y]
356
		fld dword[angle_y]
895
		fsub dword[delt_size]
357
		fsub dword[delt_size]
896
		fstp dword[angle_y]
358
		fstp dword[angle_y]
897
		call draw_3d
359
		stdcall draw_3d, o3d
898
		;jmp .end
360
		;jmp .end
899
	@@:
361
	@@:
900
	.end:
362
	.end:
901
	ret
363
	ret
902
endp
364
endp
Line 945... Line 407...
945
		fisub dword[mouse_x]
407
		fisub dword[mouse_x]
946
		fdiv dword[angle_dym] ;¥á«¨ ªãàá®à ¤¢¨¦¥âáï ¯® ®á¨ x (¢¢¥àå ¨«¨ ¢­¨§) â® ¯®¢®à®â ¤¥« ¥¬ ¢®ªà㣠®á¨ y
408
		fdiv dword[angle_dym] ;¥á«¨ ªãàá®à ¤¢¨¦¥âáï ¯® ®á¨ x (¢¢¥àå ¨«¨ ¢­¨§) â® ¯®¢®à®â ¤¥« ¥¬ ¢®ªà㣠®á¨ y
947
		fadd dword[angle_y]
409
		fadd dword[angle_y]
948
		fstp dword[angle_y]
410
		fstp dword[angle_y]
Line 949... Line 411...
949
 
411
 
950
		call draw_3d
412
		stdcall draw_3d, o3d
951
		jmp .end_d
413
		jmp .end_d
952
	.end_m:
414
	.end_m:
953
	bt eax,16
415
	bt eax,16
954
	jnc @f
416
	jnc @f
Line 991... Line 453...
991
	mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨
453
	mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨
Line 992... Line 454...
992
 
454
 
993
	cmp ah,3
455
	cmp ah,3
994
	jne @f
456
	jne @f
995
		call get_point_coords
457
		call get_point_coords
996
		call draw_3d
458
		stdcall draw_3d, o3d
997
		jmp prop_still.end
459
		jmp prop_still.end
998
	@@:
460
	@@:
999
	cmp ah,4
461
	cmp ah,4
1000
	jne @f
462
	jne @f
Line 1056... Line 518...
1056
			mov byte[obj_point.text],'*' ;®â¬¥ç ¥¬ çâ® ¢¥à設  ¨§¬¥­ï« áì
518
			mov byte[obj_point.text],'*' ;®â¬¥ç ¥¬ çâ® ¢¥à設  ¨§¬¥­ï« áì
1057
			stdcall dword[tl_node_set_data], tree3,obj_point
519
			stdcall dword[tl_node_set_data], tree3,obj_point
1058
			stdcall dword[tl_draw], tree3
520
			stdcall dword[tl_draw], tree3
1059
			mov byte[can_save],1 ;¤«ï ¯®ª §  ª­®¯ª¨ '‘®åà ­¨âì'
521
			mov byte[can_save],1 ;¤«ï ¯®ª §  ª­®¯ª¨ '‘®åà ­¨âì'
1060
			mov dword[offs_last_timer],0 ;¤«ï ®¡­®¢«¥­¨ï ¡«®ª  ¢ â ©¬¥à¥
522
			mov dword[offs_last_timer],0 ;¤«ï ®¡­®¢«¥­¨ï ¡«®ª  ¢ â ©¬¥à¥
1061
			call draw_3d
523
			stdcall draw_3d, o3d
1062
		.no_select_1:
524
		.no_select_1:
1063
		pop esi edi ecx ebx eax
525
		pop esi edi ecx ebx eax
1064
		jmp prop_still.end
526
		jmp prop_still.end
1065
	@@:
527
	@@:
1066
	cmp ah,5
528
	cmp ah,5
Line 1118... Line 580...
1118
	jne prop_still.end
580
	jne prop_still.end
1119
.exit:
581
.exit:
1120
	mov dword[tree3.data_img],0 ;ç¨á⨬ 㪠§ â¥«¨ ­  ¨ª®­ª¨ çâ®-¡ë ¨å ­¥ 㤠«¨« ¤¥áâàãªâ®à
582
	mov dword[tree3.data_img],0 ;ç¨á⨬ 㪠§ â¥«¨ ­  ¨ª®­ª¨ çâ®-¡ë ¨å ­¥ 㤠«¨« ¤¥áâàãªâ®à
1121
	mov dword[tree3.data_img_sys],0 ;â. ª. ®­¨ ¥é¥ ¨á¯®«ì§ãîâìáï ¢ ¤à㣨å í«¥¬¥­â å
583
	mov dword[tree3.data_img_sys],0 ;â. ª. ®­¨ ¥é¥ ¨á¯®«ì§ãîâìáï ¢ ¤à㣨å í«¥¬¥­â å
1122
	stdcall dword[tl_data_clear], tree3
584
	stdcall dword[tl_data_clear], tree3
-
 
585
	mov edi,o3d
1123
	stdcall mem.Free,[obj_normals_tri_data]
586
	stdcall mem.Free,[edi+offs_obj_normals_tri_data]
1124
	stdcall mem.Free,[obj_normals_poi_data]
587
	stdcall mem.Free,[edi+offs_obj_normals_poi_data]
1125
	mov dword[obj_normals_tri_data],0
588
	mov dword[edi+offs_obj_normals_tri_data],0
1126
	mov dword[obj_normals_poi_data],0
589
	mov dword[edi+offs_obj_normals_poi_data],0
1127
	mov byte[prop_wnd_run],0 ;®¡­ã«ï¥¬ áç¥â稪 ®ª®­
590
	mov byte[prop_wnd_run],0 ;®¡­ã«ï¥¬ áç¥â稪 ®ª®­
1128
	mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë
591
	mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë
Line 1129... Line 592...
1129
 
592
 
1130
align 4
593
align 4
Line 1161... Line 624...
1161
	;¯à®á¬ âਢ ¥¬ ¢ë¤¥«¥­­ãî ª®®à¤¨­ âã
624
	;¯à®á¬ âਢ ¥¬ ¢ë¤¥«¥­­ãî ª®®à¤¨­ âã
1162
	stdcall [tl_node_get_data],tree3
625
	stdcall [tl_node_get_data],tree3
1163
	cmp [cursor_last_draw],eax
626
	cmp [cursor_last_draw],eax
1164
	je @f
627
	je @f
1165
		mov [cursor_last_draw],eax
628
		mov [cursor_last_draw],eax
1166
		call draw_3d
629
		stdcall draw_3d, o3d
1167
	@@:
630
	@@:
1168
	ret
631
	ret
1169
endp
632
endp
Line 1170... Line -...
1170
 
-
 
1171
;¨§¬¥­ï¥¬ ०¨¬ à¨á®¢ ­¨ï ¢¥à設
-
 
1172
align 4
-
 
1173
mnu_vertexes_on_off:
-
 
1174
	xor dword[draw_mode], 1 shl bit_vertexes
-
 
1175
	ret
-
 
1176
 
-
 
1177
;¨§¬¥­ï¥¬ ०¨¬ à¨á®¢ ­¨ï £à ­¥©
-
 
1178
align 4
-
 
1179
mnu_faces_on_off:
-
 
1180
	xor dword[draw_mode], 1 shl bit_faces
-
 
1181
	ret
-
 
1182
 
-
 
1183
;¨§¬¥­ï¥¬ ª àª á­ë¥ ¨«¨ ᯫ®è­ë¥ £à ­¨
-
 
1184
align 4
-
 
1185
mnu_faces_fill_on_off:
-
 
1186
	xor dword[draw_mode], 1 shl bit_faces_fill
-
 
1187
	or  dword[draw_mode], 1 shl bit_faces ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï £à ­¥© (¥á«¨ ¢¤à㣠¡ë« ®âª«î祭)
-
 
1188
	ret
-
 
1189
 
-
 
1190
;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥­¨¥
-
 
1191
align 4
-
 
1192
mnu_light_on_off:
-
 
1193
	xor dword[draw_mode], 1 shl bit_light
-
 
1194
	ret
-
 
1195
 
-
 
1196
align 4
-
 
1197
mnu_reset_settings:
-
 
1198
	mov dword[angle_x],0.0
-
 
1199
	mov dword[angle_y],0.0
-
 
1200
	mov dword[angle_z],0.0
-
 
1201
	m2m dword[draw_mode],dword[def_dr_mode]
-
 
1202
	ret
-
 
1203
 
633
 
1204
align 4
634
align 4
1205
proc mnu_vertexes_select uses eax ebx
635
proc mnu_vertexes_select uses eax ebx
1206
	stdcall [tl_node_get_data],tree3
636
	stdcall [tl_node_get_data],tree3
1207
	cmp eax,0
637
	cmp eax,0
Line 1425... Line 855...
1425
popad
855
popad
1426
	ret
856
	ret
1427
endp
857
endp
Line 1428... Line 858...
1428
 
858
 
1429
align 4
-
 
1430
def_dr_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ¯® 㬮«ç ­¨î
-
 
1431
delt_size dd 3.0 ;¨§¬¥­¥­¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë
-
 
1432
mouse_drag dd 0 ;०¨¬ ¯®¢®à®â  áæ¥­ë ®â ¯¥à¥¬¥é¥­¨¨ ªãàá®à  ¬ëè¨
-
 
1433
mouse_x dd 0
-
 
1434
mouse_y dd 0
859
align 4
1435
angle_dxm dd 1.7775 ;~ 3d_wnd_w/180 - ¯à¨¡ ¢«¥­¨¥ 㣫®¢ ¯®¢®à®â  áæ¥­ë ¯à¨ ¢à é¥­¨¨ ¬ë襩
860
angle_dxm dd 1.7775 ;~ 3d_wnd_w/180 - ¯à¨¡ ¢«¥­¨¥ 㣫®¢ ¯®¢®à®â  áæ¥­ë ¯à¨ ¢à é¥­¨¨ ¬ë襩
1436
angle_dym dd 1.3335 ;~ 3d_wnd_h/180
861
angle_dym dd 1.3335 ;~ 3d_wnd_h/180
1437
ratio dd 1.3333 ;~ 3d_wnd_w/3d_wnd_h
-
 
1438
;angle_dzm dd ?
-
 
1439
draw_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ®¡ê¥ªâ 
-
 
1440
obj_poi_data dd 0 ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
-
 
1441
obj_poi_count dd 0 ;ª®««¨ç¥á⢮ ¢¥à設
-
 
1442
obj_poi_sel_c dd 0 ;ª®««¨ç¥á⢮ ¢ë¤¥«¥­­ëå ¢¥à設
-
 
1443
obj_tri_data dd 0 ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
-
 
1444
obj_tri_count dd 0 ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
862
ratio dd 1.3333 ;~ 3d_wnd_w/3d_wnd_h
1445
cursor_last_draw dd 0 ;¯®«®¦¥­¨¥ ªãàá®à  ¯à¨ ¯®á«¥¤­¥© ¯à®à¨á®¢ª¥ 3d ®ª­ 
-
 
1446
sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥­¨ï  ªâ¨¢­®© â®çª¨
-
 
1447
 
-
 
1448
obj_normals_poi_data dd 0
-
 
1449
obj_normals_poi_count dd 0
-
 
1450
obj_normals_tri_data dd 0
-
 
1451
obj_normals_tri_count dd 0
-
 
1452
 
-
 
1453
obj_x_max dd 0
-
 
1454
obj_x_min dd 0
-
 
1455
obj_x_centr dd 0
-
 
1456
obj_x_scale dd 1.0
-
 
1457
obj_y_max dd 0
-
 
1458
obj_y_min dd 0
-
 
1459
obj_y_centr dd 0
-
 
1460
obj_y_scale dd 1.0
-
 
1461
obj_z_max dd 0
-
 
1462
obj_z_min dd 0
-
 
1463
obj_z_centr dd 0
-
 
1464
obj_z_scale dd 1.0
-
 
1465
 
863
cursor_last_draw dd 0 ;¯®«®¦¥­¨¥ ªãàá®à  ¯à¨ ¯®á«¥¤­¥© ¯à®à¨á®¢ª¥ 3d ®ª­ 
Line 1466... Line 864...
1466
capt_p dd 0
864
capt_p dd 0
1467
 
865
 
1468
;¤¥à¥¢® á ®¡ê¥ªâ ¬¨ ¢ ¯®«ì§®¢ â¥«ì᪮¬ ä ©«¥
866
;¤¥à¥¢® á ®¡ê¥ªâ ¬¨ ¢ ¯®«ì§®¢ â¥«ì᪮¬ ä ©«¥