Subversion Repositories Kolibri OS

Rev

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

Rev 6509 Rev 6510
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
 
30
 
31
offs_obj_poi_data equ 0 ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
31
offs_obj_poi_data equ 0 ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
32
offs_obj_poi_count equ 4 ;ª®««¨ç¥á⢮ ¢¥à設
32
offs_obj_poi_count equ 4 ;ª®««¨ç¥á⢮ ¢¥à設
33
offs_obj_tri_data equ 8 ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
33
offs_obj_tri_data equ 8 ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
34
offs_obj_tri_count equ 12 ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
34
offs_obj_tri_count equ 12 ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
35
offs_obj_normals_poi_data equ 16
35
offs_obj_normals_poi_data equ 16
36
offs_obj_normals_poi_count equ 20
36
offs_obj_normals_poi_count equ 20
37
offs_obj_normals_tri_data equ 24
37
offs_obj_normals_tri_data equ 24
38
offs_obj_normals_tri_count equ 28
38
offs_obj_normals_tri_count equ 28
39
offs_obj_x_max equ 32
39
offs_obj_x_max equ 32
40
offs_obj_x_min equ 36
40
offs_obj_x_min equ 36
41
offs_obj_x_centr equ 40
41
offs_obj_x_centr equ 40
42
offs_obj_x_scale equ 44
42
offs_obj_x_scale equ 44
43
offs_obj_y_max equ 48
43
offs_obj_y_max equ 48
44
offs_obj_y_min equ 52
44
offs_obj_y_min equ 52
45
offs_obj_y_centr equ 56
45
offs_obj_y_centr equ 56
46
offs_obj_y_scale equ 60
46
offs_obj_y_scale equ 60
47
offs_obj_z_max equ 64
47
offs_obj_z_max equ 64
48
offs_obj_z_min equ 68
48
offs_obj_z_min equ 68
49
offs_obj_z_centr equ 72
49
offs_obj_z_centr equ 72
50
offs_obj_z_scale equ 76
50
offs_obj_z_scale equ 76
51
offs_obj_mat1_data equ 80
51
offs_obj_mat1_data equ 80
52
 
52
 
53
struct material
53
struct material
54
	name dd ?
54
	name dd ?
55
	col_ambient dd ? ;梥⠬ â¥à¨ « 
55
	col_ambient dd ? ;梥⠬ â¥à¨ « 
56
	col_diffuse dd ?
56
	col_diffuse dd ?
57
	col_specular dd ?
57
	col_specular dd ?
58
ends
58
ends
59
 
59
 
60
offs_mat_name equ 0
60
offs_mat_name equ 0
61
offs_mat_col_ambient equ 4
61
offs_mat_col_ambient equ 4
62
offs_mat_col_diffuse equ 8
62
offs_mat_col_diffuse equ 8
63
offs_mat_col_specular equ 12
63
offs_mat_col_specular equ 12
64
 
64
 
65
bit_vertexes equ 0
65
bit_vertexes equ 0
66
bit_faces equ 1
66
bit_faces equ 1
67
bit_faces_fill equ 2
67
bit_faces_fill equ 2
68
bit_light equ 3
68
bit_light equ 3
69
bit_faces_mat equ 4
69
bit_faces_mat equ 4
70
 
70
 
71
ini_name db 'info3ds.ini',0
71
ini_name db 'info3ds.ini',0
72
ini_sec_w3d db 'Window 3d',0
72
ini_sec_w3d db 'Window 3d',0
73
key_dv  db 'draw_vertices',0
73
key_dv  db 'draw_vertices',0
74
key_df  db 'draw_faces',0
74
key_df  db 'draw_faces',0
75
key_dff db 'draw_faces_fill',0
75
key_dff db 'draw_faces_fill',0
76
key_dl  db 'draw_light',0
76
key_dl  db 'draw_light',0
77
key_ox  db 'col_ox',0
77
key_ox  db 'col_ox',0
78
key_oy  db 'col_oy',0
78
key_oy  db 'col_oy',0
79
key_oz  db 'col_oz',0
79
key_oz  db 'col_oz',0
80
key_bk  db 'col_bkgnd',0
80
key_bk  db 'col_bkgnd',0
81
key_vert db 'col_vertices',0
81
key_vert db 'col_vertices',0
82
key_face db 'col_faces',0
82
key_face db 'col_faces',0
83
key_select db 'col_select',0
83
key_select db 'col_select',0
84
 
84
 
85
 
85
 
86
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
86
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
87
 
87
 
88
align 4
88
align 4
89
proc hex_in_str, buf:dword,val:dword,zif:dword
89
proc hex_in_str, buf:dword,val:dword,zif:dword
90
pushad
90
pushad
91
	mov edi,dword[buf]
91
	mov edi,dword[buf]
92
	mov ecx,dword[zif]
92
	mov ecx,dword[zif]
93
	add edi,ecx
93
	add edi,ecx
94
	dec edi
94
	dec edi
95
	mov ebx,dword[val]
95
	mov ebx,dword[val]
96
 
96
 
97
	.cycle:
97
	.cycle:
98
		mov al,bl
98
		mov al,bl
99
		and al,0xf
99
		and al,0xf
100
		cmp al,10
100
		cmp al,10
101
		jl @f
101
		jl @f
102
			add al,'a'-'0'-10
102
			add al,'a'-'0'-10
103
		@@:
103
		@@:
104
		add al,'0'
104
		add al,'0'
105
		mov byte[edi],al
105
		mov byte[edi],al
106
		dec edi
106
		dec edi
107
		shr ebx,4
107
		shr ebx,4
108
	loop .cycle
108
	loop .cycle
109
popad
109
popad
110
	ret
110
	ret
111
endp
111
endp
112
 
112
 
113
;ãáâ ­®¢ª  ¢á¥å ®á­®¢­ëå ¯¥à¥¬¥­­ëå ¯® 㬮«ç ­¨î
113
;ãáâ ­®¢ª  ¢á¥å ®á­®¢­ëå ¯¥à¥¬¥­­ëå ¯® 㬮«ç ­¨î
114
align 4
114
align 4
115
proc obj_clear_param uses edi, o_data:dword
115
proc obj_clear_param uses edi, o_data:dword
116
	mov edi,[o_data]
116
	mov edi,[o_data]
117
	;®¡­ã«¥­¨¥ 㪠§ â¥«¥© ­  ¤ ­­ë¥ ®¡ê¥ªâ®¢
117
	;®¡­ã«¥­¨¥ 㪠§ â¥«¥© ­  ¤ ­­ë¥ ®¡ê¥ªâ®¢
118
	mov dword[edi+offs_obj_poi_data],0
118
	mov dword[edi+offs_obj_poi_data],0
119
	mov dword[edi+offs_obj_poi_count],0
119
	mov dword[edi+offs_obj_poi_count],0
120
	mov dword[edi+offs_obj_tri_data],0
120
	mov dword[edi+offs_obj_tri_data],0
121
	mov dword[edi+offs_obj_tri_count],0
121
	mov dword[edi+offs_obj_tri_count],0
122
	mov dword[edi+offs_obj_normals_tri_count],0
122
	mov dword[edi+offs_obj_normals_tri_count],0
123
	mov dword[edi+offs_obj_normals_poi_count],0
123
	mov dword[edi+offs_obj_normals_poi_count],0
124
	mov dword[edi+offs_obj_mat1_data],0
124
	mov dword[edi+offs_obj_mat1_data],0
125
	cmp dword[edi+offs_obj_normals_tri_data],0
125
	cmp dword[edi+offs_obj_normals_tri_data],0
126
	je @f
126
	je @f
127
		stdcall mem.Free,[edi+offs_obj_normals_tri_data]
127
		stdcall mem.Free,[edi+offs_obj_normals_tri_data]
128
		mov dword[edi+offs_obj_normals_tri_data],0
128
		mov dword[edi+offs_obj_normals_tri_data],0
129
	@@:
129
	@@:
130
	cmp dword[edi+offs_obj_normals_poi_data],0
130
	cmp dword[edi+offs_obj_normals_poi_data],0
131
	je @f
131
	je @f
132
		stdcall mem.Free,[edi+offs_obj_normals_poi_data]
132
		stdcall mem.Free,[edi+offs_obj_normals_poi_data]
133
		mov dword[edi+offs_obj_normals_poi_data],0
133
		mov dword[edi+offs_obj_normals_poi_data],0
134
	@@:
134
	@@:
135
	ret
135
	ret
136
endp
136
endp
137
 
137
 
138
;¯®¨áª ¤ ­­ëå
138
;¯®¨áª ¤ ­­ëå
139
;input:
139
;input:
140
;eax - ⥪ã騩 㧥«
140
;eax - ⥪ã騩 㧥«
141
;output:
141
;output:
142
;eax - áâàãªâãà  â¥ªã饣® 㧫  (¨«¨ 0 ¯à¨ ­¥ã¤ ç¥)
142
;eax - áâàãªâãà  â¥ªã饣® 㧫  (¨«¨ 0 ¯à¨ ­¥ã¤ ç¥)
143
align 4
143
align 4
144
proc found_block_data uses ebx ecx edx, tlist:dword
144
proc found_block_data uses ebx ecx edx, tlist:dword
145
	mov edx,[tlist]
145
	mov edx,[tlist]
146
	mov ecx,eax
146
	mov ecx,eax
147
	stdcall [tl_node_poi_get_info], edx,0
147
	stdcall [tl_node_poi_get_info], edx,0
148
	@@:
148
	@@:
149
		mov ebx,eax
149
		mov ebx,eax
150
		stdcall [tl_node_poi_get_data], edx,ebx
150
		stdcall [tl_node_poi_get_data], edx,ebx
151
		cmp eax,ecx
151
		cmp eax,ecx
152
		je @f ;¥á«¨ ¯®¯ «¨ ­  ¢ë¡à ­­ë© 㧥«
152
		je @f ;¥á«¨ ¯®¯ «¨ ­  ¢ë¡à ­­ë© 㧥«
153
		stdcall [tl_node_poi_get_next_info], edx,ebx
153
		stdcall [tl_node_poi_get_next_info], edx,ebx
154
		cmp eax,0
154
		cmp eax,0
155
		jne @b
155
		jne @b
156
		jmp .end
156
		jmp .end
157
	@@:
157
	@@:
158
		mov eax,ebx
158
		mov eax,ebx
159
	.end:
159
	.end:
160
	ret
160
	ret
161
endp
161
endp
162
 
162
 
163
;ãáâ ­®¢ª  à §¬¥à®¢ ®¡ê¥ªâ 
163
;ãáâ ­®¢ª  à §¬¥à®¢ ®¡ê¥ªâ 
164
align 4
164
align 4
165
proc obj_set_sizes uses eax ebx esi edi, o_data:dword
165
proc obj_set_sizes uses eax ebx esi edi, o_data:dword
166
	mov edi,[o_data]
166
	mov edi,[o_data]
167
	cmp dword[edi+offs_obj_poi_count],0
167
	cmp dword[edi+offs_obj_poi_count],0
168
	je .end
168
	je .end
169
		finit
169
		finit
170
		mov eax,[edi+offs_obj_poi_data]
170
		mov eax,[edi+offs_obj_poi_data]
171
		mov ebx,dword[eax]
171
		mov ebx,dword[eax]
172
		mov [edi+offs_obj_x_min],ebx
172
		mov [edi+offs_obj_x_min],ebx
173
		mov [edi+offs_obj_x_max],ebx
173
		mov [edi+offs_obj_x_max],ebx
174
		mov ebx,dword[eax+4]
174
		mov ebx,dword[eax+4]
175
		mov [edi+offs_obj_y_min],ebx
175
		mov [edi+offs_obj_y_min],ebx
176
		mov [edi+offs_obj_y_max],ebx
176
		mov [edi+offs_obj_y_max],ebx
177
		mov ebx,dword[eax+8]
177
		mov ebx,dword[eax+8]
178
		mov [edi+offs_obj_z_min],ebx
178
		mov [edi+offs_obj_z_min],ebx
179
		mov [edi+offs_obj_z_max],ebx
179
		mov [edi+offs_obj_z_max],ebx
180
 
180
 
181
	mov ebx,[edi+offs_obj_poi_data]
181
	mov ebx,[edi+offs_obj_poi_data]
182
	mov esi,[edi+offs_obj_poi_count]
182
	mov esi,[edi+offs_obj_poi_count]
183
align 4
183
align 4
184
	.cycle_0: ;à ¡®â  á ª®®à¤¨­ â®© x
184
	.cycle_0: ;à ¡®â  á ª®®à¤¨­ â®© x
185
		fld dword[ebx]
185
		fld dword[ebx]
186
		fld dword[edi+offs_obj_x_min]
186
		fld dword[edi+offs_obj_x_min]
187
		fcomp
187
		fcomp
188
		fstsw ax
188
		fstsw ax
189
		sahf
189
		sahf
190
		jb @f
190
		jb @f
191
			mov eax,[ebx]
191
			mov eax,[ebx]
192
			mov [edi+offs_obj_x_min],eax
192
			mov [edi+offs_obj_x_min],eax
193
			ffree st0
193
			ffree st0
194
			fincstp
194
			fincstp
195
			jmp .next_x
195
			jmp .next_x
196
		@@:
196
		@@:
197
		fld dword[edi+offs_obj_x_max]
197
		fld dword[edi+offs_obj_x_max]
198
		fcompp
198
		fcompp
199
		fstsw ax
199
		fstsw ax
200
		sahf
200
		sahf
201
		ja .next_x
201
		ja .next_x
202
			mov eax,[ebx]
202
			mov eax,[ebx]
203
			mov [edi+offs_obj_x_max],eax
203
			mov [edi+offs_obj_x_max],eax
204
		.next_x:
204
		.next_x:
205
 
205
 
206
		add ebx,12
206
		add ebx,12
207
		dec esi
207
		dec esi
208
		jnz .cycle_0
208
		jnz .cycle_0
209
 
209
 
210
		fld1
210
		fld1
211
		fld dword[edi+offs_obj_x_max]
211
		fld dword[edi+offs_obj_x_max]
212
		fsub dword[edi+offs_obj_x_min]
212
		fsub dword[edi+offs_obj_x_min]
213
		fst dword[edi+offs_obj_x_centr]
213
		fst dword[edi+offs_obj_x_centr]
214
		fdivp ;1/size.x
214
		fdivp ;1/size.x
215
		fstp dword[edi+offs_obj_x_scale]
215
		fstp dword[edi+offs_obj_x_scale]
216
 
216
 
217
		fld dword[edi+offs_obj_x_centr]
217
		fld dword[edi+offs_obj_x_centr]
218
		fld1
218
		fld1
219
		fld1
219
		fld1
220
		faddp
220
		faddp
221
		fdivp ;centr.x = size.x/2
221
		fdivp ;centr.x = size.x/2
222
		fadd dword[edi+offs_obj_x_min]
222
		fadd dword[edi+offs_obj_x_min]
223
		fchs
223
		fchs
224
		fstp dword[edi+offs_obj_x_centr]
224
		fstp dword[edi+offs_obj_x_centr]
225
 
225
 
226
	mov ebx,[edi+offs_obj_poi_data]
226
	mov ebx,[edi+offs_obj_poi_data]
227
	mov esi,[edi+offs_obj_poi_count]
227
	mov esi,[edi+offs_obj_poi_count]
228
align 4
228
align 4
229
	.cycle_1: ;à ¡®â  á ª®®à¤¨­ â®© y
229
	.cycle_1: ;à ¡®â  á ª®®à¤¨­ â®© y
230
		fld dword[ebx+4]
230
		fld dword[ebx+4]
231
		fld dword[edi+offs_obj_y_min]
231
		fld dword[edi+offs_obj_y_min]
232
		fcomp
232
		fcomp
233
		fstsw ax
233
		fstsw ax
234
		sahf
234
		sahf
235
		jb @f
235
		jb @f
236
			mov eax,[ebx+4]
236
			mov eax,[ebx+4]
237
			mov [edi+offs_obj_y_min],eax
237
			mov [edi+offs_obj_y_min],eax
238
			ffree st0
238
			ffree st0
239
			fincstp
239
			fincstp
240
			jmp .next_y
240
			jmp .next_y
241
		@@:
241
		@@:
242
		fld dword[edi+offs_obj_y_max]
242
		fld dword[edi+offs_obj_y_max]
243
		fcompp
243
		fcompp
244
		fstsw ax
244
		fstsw ax
245
		sahf
245
		sahf
246
		ja .next_y
246
		ja .next_y
247
			mov eax,[ebx+4]
247
			mov eax,[ebx+4]
248
			mov [edi+offs_obj_y_max],eax
248
			mov [edi+offs_obj_y_max],eax
249
		.next_y:
249
		.next_y:
250
 
250
 
251
		add ebx,12
251
		add ebx,12
252
		dec esi
252
		dec esi
253
		jnz .cycle_1
253
		jnz .cycle_1
254
 
254
 
255
		fld1
255
		fld1
256
		fld dword[edi+offs_obj_y_max]
256
		fld dword[edi+offs_obj_y_max]
257
		fsub dword[edi+offs_obj_y_min]
257
		fsub dword[edi+offs_obj_y_min]
258
		fst dword[edi+offs_obj_y_centr]
258
		fst dword[edi+offs_obj_y_centr]
259
		fdivp ;1/size.y
259
		fdivp ;1/size.y
260
		fstp dword[edi+offs_obj_y_scale]
260
		fstp dword[edi+offs_obj_y_scale]
261
 
261
 
262
		fld dword[edi+offs_obj_y_centr]
262
		fld dword[edi+offs_obj_y_centr]
263
		fld1
263
		fld1
264
		fld1
264
		fld1
265
		faddp
265
		faddp
266
		fdivp ;centr.y = size.y/2
266
		fdivp ;centr.y = size.y/2
267
		fadd dword[edi+offs_obj_y_min]
267
		fadd dword[edi+offs_obj_y_min]
268
		fchs
268
		fchs
269
		fstp dword[edi+offs_obj_y_centr]
269
		fstp dword[edi+offs_obj_y_centr]
270
 
270
 
271
	mov ebx,[edi+offs_obj_poi_data]
271
	mov ebx,[edi+offs_obj_poi_data]
272
	mov esi,[edi+offs_obj_poi_count]
272
	mov esi,[edi+offs_obj_poi_count]
273
align 4
273
align 4
274
	.cycle_2: ;à ¡®â  á ª®®à¤¨­ â®© z
274
	.cycle_2: ;à ¡®â  á ª®®à¤¨­ â®© z
275
		fld dword[ebx+8]
275
		fld dword[ebx+8]
276
		fld dword[edi+offs_obj_z_min]
276
		fld dword[edi+offs_obj_z_min]
277
		fcomp
277
		fcomp
278
		fstsw ax
278
		fstsw ax
279
		sahf
279
		sahf
280
		jb @f
280
		jb @f
281
			mov eax,[ebx+8]
281
			mov eax,[ebx+8]
282
			mov [edi+offs_obj_z_min],eax
282
			mov [edi+offs_obj_z_min],eax
283
			ffree st0
283
			ffree st0
284
			fincstp
284
			fincstp
285
			jmp .next_z
285
			jmp .next_z
286
		@@:
286
		@@:
287
		fld dword[edi+offs_obj_z_max]
287
		fld dword[edi+offs_obj_z_max]
288
		fcompp
288
		fcompp
289
		fstsw ax
289
		fstsw ax
290
		sahf
290
		sahf
291
		ja .next_z
291
		ja .next_z
292
			mov eax,[ebx+8]
292
			mov eax,[ebx+8]
293
			mov [edi+offs_obj_z_max],eax
293
			mov [edi+offs_obj_z_max],eax
294
		.next_z:
294
		.next_z:
295
 
295
 
296
		add ebx,12
296
		add ebx,12
297
		dec esi
297
		dec esi
298
		jnz .cycle_2
298
		jnz .cycle_2
299
 
299
 
300
		fld1
300
		fld1
301
		fld dword[edi+offs_obj_z_max]
301
		fld dword[edi+offs_obj_z_max]
302
		fsub dword[edi+offs_obj_z_min]
302
		fsub dword[edi+offs_obj_z_min]
303
		fst dword[edi+offs_obj_z_centr]
303
		fst dword[edi+offs_obj_z_centr]
304
		fdivp ;1/size.z
304
		fdivp ;1/size.z
305
		fstp dword[edi+offs_obj_z_scale]
305
		fstp dword[edi+offs_obj_z_scale]
306
 
306
 
307
		fld dword[edi+offs_obj_z_centr]
307
		fld dword[edi+offs_obj_z_centr]
308
		fld1
308
		fld1
309
		fld1
309
		fld1
310
		faddp
310
		faddp
311
		fdivp ;centr.z = size.z/2
311
		fdivp ;centr.z = size.z/2
312
		fadd dword[edi+offs_obj_z_min]
312
		fadd dword[edi+offs_obj_z_min]
313
		fchs
313
		fchs
314
		fstp dword[edi+offs_obj_z_centr]
314
		fstp dword[edi+offs_obj_z_centr]
315
 
315
 
316
		;­ å®¤¨¬ à ¤¨ãá ¤«ï áä¥àë
316
		;­ å®¤¨¬ à ¤¨ãá ¤«ï áä¥àë
317
		fld dword[edi+offs_obj_x_max]
317
		fld dword[edi+offs_obj_x_max]
318
		fsub dword[edi+offs_obj_x_min]
318
		fsub dword[edi+offs_obj_x_min]
319
		fld dword[edi+offs_obj_y_max]
319
		fld dword[edi+offs_obj_y_max]
320
		fsub dword[edi+offs_obj_y_min]
320
		fsub dword[edi+offs_obj_y_min]
321
		faddp
321
		faddp
322
		fild dword[rad_c]
322
		fild dword[rad_c]
323
		fdivp ;radius=(size.x+size.y)/rad_c
323
		fdivp ;radius=(size.x+size.y)/rad_c
324
		fstp dword[sph_radius]
324
		fstp dword[sph_radius]
325
 
325
 
326
	;¤¥« ¥¬ ®¤¨­ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ­¥ ­ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥­¨ï
326
	;¤¥« ¥¬ ®¤¨­ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ­¥ ­ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥­¨ï
327
	fld dword[edi+offs_obj_y_scale]
327
	fld dword[edi+offs_obj_y_scale]
328
	fdiv dword[ratio] ;¯à¨¢¥¤¥­¨¥ ¬ áèâ ¡  ¯® ®á¨ y ãç¨â뢠ï çâ® ¯® ¢ëá®â¥ íªà ­ ¬¥­ìè¥
328
	fdiv dword[ratio] ;¯à¨¢¥¤¥­¨¥ ¬ áèâ ¡  ¯® ®á¨ y ãç¨â뢠ï çâ® ¯® ¢ëá®â¥ íªà ­ ¬¥­ìè¥
329
	fcomp dword[edi+offs_obj_x_scale]
329
	fcomp dword[edi+offs_obj_x_scale]
330
	fstsw ax
330
	fstsw ax
331
	sahf
331
	sahf
332
	jb @f
332
	jb @f
333
		;ᦠ⨥ ¬ áèâ ¡  ¯® y
333
		;ᦠ⨥ ¬ áèâ ¡  ¯® y
334
		fld dword[edi+offs_obj_x_scale]
334
		fld dword[edi+offs_obj_x_scale]
335
		fmul dword[ratio]
335
		fmul dword[ratio]
336
		fstp dword[edi+offs_obj_y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x
336
		fstp dword[edi+offs_obj_y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x
337
		jmp .end
337
		jmp .end
338
	@@:
338
	@@:
339
		;ᦠ⨥ ¬ áèâ ¡  ¯® x >...<
339
		;ᦠ⨥ ¬ áèâ ¡  ¯® x >...<
340
		fld	dword[edi+offs_obj_x_scale]
340
		fld	dword[edi+offs_obj_x_scale]
341
		fdiv dword[ratio]
341
		fdiv dword[ratio]
342
		fstp dword[edi+offs_obj_x_scale]
342
		fstp dword[edi+offs_obj_x_scale]
343
	.end:
343
	.end:
344
	ret
344
	ret
345
endp
345
endp
-
 
346
 
346
 
347
;description:
347
;ãáâ ­®¢ª  ­®à¬ «¥© ¤«ï £à ­¥©
348
; ¢ëç¨á«¥­¨¥ ­®à¬ «¥© ¤«ï £à ­¥© ¯® 3-¬ ¢¥à設 ¬
348
align 4
349
align 4
349
proc obj_set_normals, o_data:dword
350
proc obj_set_normals, o_data:dword
350
locals
351
locals
351
	tbl1 rd 9 ;ebp-72
352
	tbl1 rd 9 ;ebp-72
352
	tbl2 rd 9 ;ebp-36
353
	tbl2 rd 9 ;ebp-36
353
endl
354
endl
354
pushad
355
pushad
355
	mov ecx,[o_data]
356
	mov ecx,[o_data]
356
	cmp dword[ecx+offs_obj_poi_count],0
357
	cmp dword[ecx+offs_obj_poi_count],0
357
	je .end
358
	je .end
358
		mov eax,[ecx+offs_obj_tri_count]
359
		mov eax,[ecx+offs_obj_tri_count]
359
		mov [ecx+offs_obj_normals_tri_count],eax ;­  ª ¦¤ë© âà¥ã£®«ì­¨ª 1 ­®à¬ «ì
360
		mov [ecx+offs_obj_normals_tri_count],eax ;­  ª ¦¤ë© âà¥ã£®«ì­¨ª 1 ­®à¬ «ì
360
		cmp eax,0
361
		cmp eax,0
361
		je .end
362
		je .end
362
		finit
363
		finit
363
		imul eax,12
364
		imul eax,12
364
		stdcall mem.Alloc, eax
365
		stdcall mem.Alloc, eax
365
		mov [ecx+offs_obj_normals_tri_data],eax
366
		mov [ecx+offs_obj_normals_tri_data],eax
366
 
367
 
367
		mov edx,[ecx+offs_obj_tri_data]
368
		mov edx,[ecx+offs_obj_tri_data]
368
		mov ebx,[ecx+offs_obj_tri_count]
369
		mov ebx,[ecx+offs_obj_tri_count]
369
		mov ecx,[ecx+offs_obj_poi_data]
370
		mov ecx,[ecx+offs_obj_poi_data]
370
align 4
371
align 4
371
		@@:
372
		@@:
372
			mov edi,ebp
373
			mov edi,ebp
373
			sub edi,36 ;tbl2
374
			sub edi,36 ;tbl2
374
			movzx esi,word[edx] ;1-ï ¢¥à設 
375
			movzx esi,word[edx] ;1-ï ¢¥à設 
375
			imul esi,12
376
			imul esi,12
376
			add esi,ecx
377
			add esi,ecx
377
			movsd
378
			movsd
378
			movsd
379
			movsd
379
			movsd
380
			movsd
380
			movzx esi,word[edx+2] ;2-ï ¢¥à設 
381
			movzx esi,word[edx+2] ;2-ï ¢¥à設 
381
			imul esi,12
382
			imul esi,12
382
			add esi,ecx
383
			add esi,ecx
383
			movsd
384
			movsd
384
			movsd
385
			movsd
385
			movsd
386
			movsd
386
			movzx esi,word[edx+4] ;3-ï ¢¥à設 
387
			movzx esi,word[edx+4] ;3-ï ¢¥à設 
387
			imul esi,12
388
			imul esi,12
388
			add esi,ecx
389
			add esi,ecx
389
			movsd
390
			movsd
390
			movsd
391
			movsd
391
			movsd
392
			movsd
392
 
393
 
393
			mov esi,ebp
394
			mov esi,ebp
394
			sub esi,72 ;tbl1
395
			sub esi,72 ;tbl1
395
			sub edi,36 ;tbl2
396
			sub edi,36 ;tbl2
396
			;v1 <-> v2
397
			;v1 <-> v2
397
			fld dword[edi+12]
398
			fld dword[edi+12]
398
			fsub dword[edi]
399
			fsub dword[edi]
399
			fstp dword[esi] ;(x1-x2)
400
			fstp dword[esi] ;(x2-x1)
400
			fld dword[edi+16]
401
			fld dword[edi+16]
401
			fsub dword[edi+4]
402
			fsub dword[edi+4]
402
			fstp dword[esi+4] ;(y1-y2)
403
			fstp dword[esi+4] ;(y2-y1)
403
			fld dword[edi+20]
404
			fld dword[edi+20]
404
			fsub dword[edi+8]
405
			fsub dword[edi+8]
405
			fstp dword[esi+8] ;(z1-z2)
406
			fstp dword[esi+8] ;(z2-z1)
406
			;v2 <-> v3
407
			;v2 <-> v3
407
			fld dword[edi+24]
408
			fld dword[edi+12]
408
			fsub dword[edi+12]
409
			fsub dword[edi+24]
409
			fstp dword[esi+12] ;(x2-x3)
410
			fstp dword[esi+12] ;(x2-x3)
410
			fld dword[edi+28]
411
			fld dword[edi+16]
411
			fsub dword[edi+16]
412
			fsub dword[edi+28]
412
			fstp dword[esi+16] ;(y2-y3)
413
			fstp dword[esi+16] ;(y2-y3)
413
			fld dword[edi+32]
414
			fld dword[edi+20]
414
			fsub dword[edi+20]
415
			fsub dword[edi+32]
415
			fstp dword[esi+20] ;(z2-z3)
416
			fstp dword[esi+20] ;(z2-z3)
416
			;v3 <-> v1
417
			;v3 <-> v1
417
			fld dword[edi]
418
			fld dword[edi+24]
418
			fsub dword[edi+24]
419
			fsub dword[edi]
419
			fstp dword[esi+24] ;(x3-x1)
420
			fstp dword[esi+24] ;(x3-x1)
420
			fld dword[edi+4]
421
			fld dword[edi+28]
421
			fsub dword[edi+28]
422
			fsub dword[edi+4]
422
			fstp dword[esi+28] ;(y3-y1)
423
			fstp dword[esi+28] ;(y3-y1)
423
			fld dword[edi+8]
424
			fld dword[edi+32]
424
			fsub dword[edi+32]
425
			fsub dword[edi+8]
425
			fstp dword[esi+32] ;(z3-z1)
426
			fstp dword[esi+32] ;(z3-z1)
426
 
427
 
427
			;a1,a2,a3
428
			;A = (y2-y1) * (z3-z1) - (z2-z1) * (y3-y1)
428
			fld dword[esi+4]
-
 
429
			fmul dword[esi+8]
-
 
430
			fstp dword[edi] ;a1=(y1-y2)*(z1-z2)
-
 
431
			fld dword[esi+16]
-
 
432
			fmul dword[esi+20]
-
 
433
			fstp dword[edi+4] ;a2=(y2-y3)*(z2-z3)
-
 
434
			fld dword[esi+28]
429
			fld dword[esi+4]
435
			fmul dword[esi+32]
430
			fmul dword[esi+32]
-
 
431
			fld dword[esi+8]
436
			fstp dword[edi+8] ;a3=(y3-y1)*(z3-z1)
432
			fmul dword[esi+28]
-
 
433
			fsubp
-
 
434
			fstp dword[eax] ;set normal.a
-
 
435
 
-
 
436
			;B = (z2-z1) * (x3-x1) - (x2-x1) * (z3-z1)
-
 
437
			fld dword[esi+8]
437
			;b1,b2,b3
438
			fmul dword[esi+24]
438
			fld dword[esi]
-
 
439
			fmul dword[esi+8]
-
 
440
			fstp dword[edi+12] ;b1=(x1-x2)*(z1-z2)
-
 
441
			fld dword[esi+12]
-
 
442
			fmul dword[esi+20]
-
 
443
			fstp dword[edi+16] ;b2=(x2-x3)*(z2-z3)
-
 
444
			fld dword[esi+24]
439
			fld dword[esi]
-
 
440
			fmul dword[esi+32]
445
			fmul dword[esi+32]
441
			fsubp
-
 
442
			fstp dword[eax+4] ;set normal.b
446
			fstp dword[edi+20] ;b3=(x3-x1)*(z3-z1)
443
 
447
			;c1,á2,á3
444
			;C = (x2-x1) * (y3-y1) - (y2-y1) * (x3-x1)
448
			fld dword[esi]
-
 
449
			fmul dword[esi+4]
-
 
450
			fstp dword[edi+24] ;c1=(x1-x2)*(y1-y2)
-
 
451
			fld dword[esi+12]
-
 
452
			fmul dword[esi+16]
-
 
453
			fstp dword[edi+28] ;c2=(x2-x3)*(y2-y3)
-
 
454
			fld dword[esi+24]
445
			fld dword[esi]
455
			fmul dword[esi+28]
-
 
456
			fstp dword[edi+32] ;c3=(x3-x1)*(y3-y1)
-
 
457
			
-
 
458
			fld dword[edi]
-
 
459
			fadd dword[edi+4]
-
 
460
			fadd dword[edi+8]
-
 
461
			fstp dword[eax] ;set normal.a
-
 
462
			fld dword[edi+12]
-
 
463
			fadd dword[edi+16]
-
 
464
			fadd dword[edi+20]
-
 
465
			fstp dword[eax+4] ;set normal.b
446
			fmul dword[esi+28]
466
			fld dword[edi+24]
447
			fld dword[esi+4]
467
			fadd dword[edi+28]
448
			fmul dword[esi+24]
468
			fadd dword[edi+32]
449
			fsubp
469
			fstp dword[eax+8] ;set normal.c
450
			fstp dword[eax+8] ;set normal.c
470
			
451
			
471
			add edx,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
452
			add edx,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
472
			add eax,12
453
			add eax,12
473
			dec ebx
454
			dec ebx
474
			jnz @b
455
			jnz @b
475
	.end:
456
	.end:
476
popad
457
popad
477
	ret
458
	ret
478
endp
459
endp
479
 
460
 
480
;­ áâனª  áâàãªâãàë 3d ®¡ê¥ªâ 
461
;­ áâனª  áâàãªâãàë 3d ®¡ê¥ªâ 
481
align 4
462
align 4
482
proc obj_init, o_data:dword
463
proc obj_init, o_data:dword
483
	pushad
464
	pushad
484
	mov edi,[o_data]
465
	mov edi,[o_data]
485
	stdcall obj_clear_param, edi
466
	stdcall obj_clear_param, edi
486
	stdcall [tl_node_get_data],tree1
467
	stdcall [tl_node_get_data],tree1
487
	xor edx,edx
468
	xor edx,edx
488
	cmp eax,0
469
	cmp eax,0
489
	je .no_points
470
	je .no_points
490
		mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
471
		mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
491
		add ebx,[open_file_data]
472
		add ebx,[open_file_data]
492
		xor ecx,ecx
473
		xor ecx,ecx
493
		cmp word[ebx],CHUNK_OBJBLOCK
474
		cmp word[ebx],CHUNK_OBJBLOCK
494
		jne @f
475
		jne @f
495
			mov ecx,ebx
476
			mov ecx,ebx
496
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
477
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
497
			push eax edi
478
			push eax edi
498
				mov edi,ebx
479
				mov edi,ebx
499
				add edi,6
480
				add edi,6
500
				cld
481
				cld
501
				xor al,al
482
				xor al,al
502
				repne scasb ;¯à®¯ã᪠¨¬¥­¨ ®¡ê¥ªâ 
483
				repne scasb ;¯à®¯ã᪠¨¬¥­¨ ®¡ê¥ªâ 
503
				mov ebx,edi
484
				mov ebx,edi
504
			pop edi eax
485
			pop edi eax
505
		@@:
486
		@@:
506
		cmp word[ebx],CHUNK_TRIMESH
487
		cmp word[ebx],CHUNK_TRIMESH
507
		jne @f
488
		jne @f
508
			mov ecx,ebx
489
			mov ecx,ebx
509
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
490
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
510
			add ebx,6
491
			add ebx,6
511
		@@:
492
		@@:
512
		cmp word[ebx],CHUNK_VERTLIST
493
		cmp word[ebx],CHUNK_VERTLIST
513
		jne .no_points
494
		jne .no_points
514
			mov esi,ebx
495
			mov esi,ebx
515
			movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª
496
			movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª
516
			add ebx,8
497
			add ebx,8
517
			mov [edi+offs_obj_poi_data],ebx
498
			mov [edi+offs_obj_poi_data],ebx
518
			mov [edi+offs_obj_poi_count],edx
499
			mov [edi+offs_obj_poi_count],edx
519
 
500
 
520
			.cycle_0: ;横« ¤«ï ¯®¨áª  âà¥ã£®«ì­¨ª®¢
501
			.cycle_0: ;横« ¤«ï ¯®¨áª  âà¥ã£®«ì­¨ª®¢
521
				add esi,dword[esi+2]
502
				add esi,dword[esi+2]
522
				cmp word[esi],CHUNK_FACELIST
503
				cmp word[esi],CHUNK_FACELIST
523
				je @f
504
				je @f
524
					cmp ecx,esi
505
					cmp ecx,esi
525
					jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
506
					jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
526
					jmp .end_points ;¥á«¨ ­¥ ­ è«¨ âà¥ã£®«ì­¨ª¨
507
					jmp .end_points ;¥á«¨ ­¥ ­ è«¨ âà¥ã£®«ì­¨ª¨
527
			@@:
508
			@@:
528
			;¥á«¨ ­ è«¨ âà¥ã£®«ì­¨ª¨
509
			;¥á«¨ ­ è«¨ âà¥ã£®«ì­¨ª¨
529
			movzx edx,word[esi+6]
510
			movzx edx,word[esi+6]
530
			mov [edi+offs_obj_tri_count],edx
511
			mov [edi+offs_obj_tri_count],edx
531
			add esi,8 ;2+4+2 (chunk+size+count)
512
			add esi,8 ;2+4+2 (chunk+size+count)
532
			mov [edi+offs_obj_tri_data],esi
513
			mov [edi+offs_obj_tri_data],esi
533
 
514
 
534
			;¯®¨áª ¬ â¥à¨ «®¢ £à ­¥©
515
			;¯®¨áª ¬ â¥à¨ «®¢ £à ­¥©
535
			shl edx,3
516
			shl edx,3
536
			add esi,edx
517
			add esi,edx
537
			cmp word[esi],CHUNK_FACEMAT
518
			cmp word[esi],CHUNK_FACEMAT
538
			jne .end_points
519
			jne .end_points
539
				mov [edi+offs_obj_mat1_data],esi
520
				mov [edi+offs_obj_mat1_data],esi
540
		.end_points:
521
		.end_points:
541
 
522
 
542
		stdcall obj_set_sizes, edi
523
		stdcall obj_set_sizes, edi
543
		stdcall obj_set_normals, edi
524
		stdcall obj_set_normals, edi
544
if version_edit eq 0
525
if version_edit eq 0
545
		stdcall draw_3d, edi
526
		stdcall draw_3d, edi
546
end if
527
end if
547
	.no_points:
528
	.no_points:
548
	popad
529
	popad
549
	ret
530
	ret
550
endp
531
endp
551
 
532
 
552
;­ áâனª  ¬ â¥à¨ « 
533
;­ áâனª  ¬ â¥à¨ « 
553
;input:
534
;input:
554
; m_data - 㪠§ â¥«ì ­  § ¯®«­ï¥¬ãî áâàãªâãàã á ¬ â¥à¨ «®¬
535
; m_data - 㪠§ â¥«ì ­  § ¯®«­ï¥¬ãî áâàãªâãàã á ¬ â¥à¨ «®¬
555
; f_data - 㪠§ â¥«ì­  ­  ¡«®ª CHUNK_MATERIAL ¨§ ä ©«  3ds
536
; f_data - 㪠§ â¥«ì­  ­  ¡«®ª CHUNK_MATERIAL ¨§ ä ©«  3ds
556
align 4
537
align 4
557
proc mat_init, m_data:dword, f_data:dword
538
proc mat_init, m_data:dword, f_data:dword
558
	pushad
539
	pushad
559
	mov edi,[m_data]
540
	mov edi,[m_data]
560
 
541
 
561
	;... clear edi ...
542
	;... clear edi ...
562
	mov dword[edi+offs_mat_name],0
543
	mov dword[edi+offs_mat_name],0
563
	mov dword[edi+offs_mat_col_ambient],0
544
	mov dword[edi+offs_mat_col_ambient],0
564
	mov dword[edi+offs_mat_col_diffuse],0
545
	mov dword[edi+offs_mat_col_diffuse],0
565
	mov dword[edi+offs_mat_col_specular],0
546
	mov dword[edi+offs_mat_col_specular],0
566
 
547
 
567
	xor edx,edx
548
	xor edx,edx
568
	mov ebx,[f_data]
549
	mov ebx,[f_data]
569
	xor ecx,ecx
550
	xor ecx,ecx
570
	cmp word[ebx],CHUNK_MATERIAL
551
	cmp word[ebx],CHUNK_MATERIAL
571
	jne .no_material
552
	jne .no_material
572
		mov ecx,ebx
553
		mov ecx,ebx
573
		add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
554
		add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
574
		add ebx,6
555
		add ebx,6
575
	cmp word[ebx],CHUNK_MATNAME
556
	cmp word[ebx],CHUNK_MATNAME
576
	jne .no_material
557
	jne .no_material
577
		;*** (0) ***
558
		;*** (0) ***
578
		mov esi,ebx
559
		mov esi,ebx
579
		add ebx,6
560
		add ebx,6
580
		mov [edi+offs_mat_name],ebx
561
		mov [edi+offs_mat_name],ebx
581
		sub ebx,6
562
		sub ebx,6
582
		;*** (1) ***
563
		;*** (1) ***
583
		.cycle_0: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
564
		.cycle_0: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
584
			add esi,dword[esi+2]
565
			add esi,dword[esi+2]
585
			cmp word[esi],0xa010
566
			cmp word[esi],0xa010
586
			je @f
567
			je @f
587
				cmp ecx,esi
568
				cmp ecx,esi
588
				jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
569
				jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
589
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
570
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
590
		@@:
571
		@@:
591
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
572
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
592
		add esi,6
573
		add esi,6
593
		cmp word[esi],0x0011
574
		cmp word[esi],0x0011
594
		jne .end_material
575
		jne .end_material
595
			add esi,6
576
			add esi,6
596
			mov dl,byte[esi]
577
			mov dl,byte[esi]
597
			mov [edi+offs_mat_col_ambient+2],dl
578
			mov [edi+offs_mat_col_ambient+2],dl
598
			mov dx,word[esi+1]
579
			mov dx,word[esi+1]
599
			ror dx,8
580
			ror dx,8
600
			mov [edi+offs_mat_col_ambient],dx
581
			mov [edi+offs_mat_col_ambient],dx
601
		;*** (2) ***
582
		;*** (2) ***
602
		mov esi,ebx
583
		mov esi,ebx
603
		.cycle_1: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
584
		.cycle_1: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
604
			add esi,dword[esi+2]
585
			add esi,dword[esi+2]
605
			cmp word[esi],0xa020
586
			cmp word[esi],0xa020
606
			je @f
587
			je @f
607
				cmp ecx,esi
588
				cmp ecx,esi
608
				jg .cycle_1 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
589
				jg .cycle_1 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
609
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
590
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
610
		@@:
591
		@@:
611
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
592
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
612
		add esi,6
593
		add esi,6
613
		cmp word[esi],0x0011
594
		cmp word[esi],0x0011
614
		jne .end_material
595
		jne .end_material
615
			add esi,6
596
			add esi,6
616
			mov dl,byte[esi]
597
			mov dl,byte[esi]
617
			mov [edi+offs_mat_col_diffuse+2],dl
598
			mov [edi+offs_mat_col_diffuse+2],dl
618
			mov dx,word[esi+1]
599
			mov dx,word[esi+1]
619
			ror dx,8
600
			ror dx,8
620
			mov [edi+offs_mat_col_diffuse],dx
601
			mov [edi+offs_mat_col_diffuse],dx
621
		;*** (3) ***
602
		;*** (3) ***
622
		mov esi,ebx
603
		mov esi,ebx
623
		.cycle_2: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
604
		.cycle_2: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
624
			add esi,dword[esi+2]
605
			add esi,dword[esi+2]
625
			cmp word[esi],0xa030
606
			cmp word[esi],0xa030
626
			je @f
607
			je @f
627
				cmp ecx,esi
608
				cmp ecx,esi
628
				jg .cycle_2 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
609
				jg .cycle_2 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
629
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
610
				jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
630
		@@:
611
		@@:
631
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
612
		;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
632
		add esi,6
613
		add esi,6
633
		cmp word[esi],0x0011
614
		cmp word[esi],0x0011
634
		jne .end_material
615
		jne .end_material
635
			add esi,6
616
			add esi,6
636
			mov dl,byte[esi]
617
			mov dl,byte[esi]
637
			mov [edi+offs_mat_col_specular+2],dl
618
			mov [edi+offs_mat_col_specular+2],dl
638
			mov dx,word[esi+1]
619
			mov dx,word[esi+1]
639
			ror dx,8
620
			ror dx,8
640
			mov [edi+offs_mat_col_specular],dx
621
			mov [edi+offs_mat_col_specular],dx
641
 
622
 
642
		.end_material:
623
		.end_material:
643
	.no_material:
624
	.no_material:
644
	popad
625
	popad
645
	ret
626
	ret
646
endp
627
endp
647
 
628
 
648
align 4
629
align 4
649
proc buf_draw_beg uses eax, buf:dword
630
proc buf_draw_beg uses eax, buf:dword
650
	mov eax,[buf]
631
	mov eax,[buf]
651
	stdcall [buf2d_clear], eax, [eax+16] ;ç¨á⨬ ¡ãä¥à
632
	stdcall [buf2d_clear], eax, [eax+16] ;ç¨á⨬ ¡ãä¥à
652
	stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff
633
	stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff
653
	stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff
634
	stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff
654
	cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦­  ®è¨¡ª  ä ©« 
635
	cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦­  ®è¨¡ª  ä ©« 
655
	jne @f
636
	jne @f
656
		stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000
637
		stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000
657
	@@:
638
	@@:
658
	ret
639
	ret
659
endp
640
endp
660
 
641
 
661
;à¨á®¢ ­¨¥ ¬ â¥à¨ « 
642
;à¨á®¢ ­¨¥ ¬ â¥à¨ « 
662
align 4
643
align 4
663
proc draw_material uses edi, m_data:dword
644
proc draw_material uses edi, m_data:dword
664
	mov edi,[m_data]
645
	mov edi,[m_data]
665
	stdcall buf_draw_beg, buf_ogl
646
	stdcall buf_draw_beg, buf_ogl
666
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff
647
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff
667
 
648
 
668
	stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+offs_mat_name],15,45,0 ;¨¬ï ¬ â¥à¨ « 
649
	stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+offs_mat_name],15,45,0 ;¨¬ï ¬ â¥à¨ « 
669
	stdcall draw_color, [edi+offs_mat_col_ambient], txt_a010,2,55 ;®ªà㦠î騩 梥â
650
	stdcall draw_color, [edi+offs_mat_col_ambient], txt_a010,2,55 ;®ªà㦠î騩 梥â
670
	stdcall draw_color, [edi+offs_mat_col_diffuse], txt_a020,2,75 ;¤¨äã§­ë© æ¢¥â
651
	stdcall draw_color, [edi+offs_mat_col_diffuse], txt_a020,2,75 ;¤¨äã§­ë© æ¢¥â
671
	stdcall draw_color, [edi+offs_mat_col_specular],txt_a030,2,95 ;§¥àª «ì­ë© 梥â
652
	stdcall draw_color, [edi+offs_mat_col_specular],txt_a030,2,95 ;§¥àª «ì­ë© 梥â
672
 
653
 
673
	stdcall [buf2d_draw], buf_ogl
654
	stdcall [buf2d_draw], buf_ogl
674
	ret
655
	ret
675
endp
656
endp
676
 
657
 
677
align 4
658
align 4
678
proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword
659
proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword
679
	mov eax,[c_x]
660
	mov eax,[c_x]
680
	mov ebx,[c_y]
661
	mov ebx,[c_y]
681
	; ¯àאַ㣮«ì­¨ª
662
	; ¯àאַ㣮«ì­¨ª
682
	inc ebx
663
	inc ebx
683
	stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color]
664
	stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color]
684
	dec ebx
665
	dec ebx
685
	stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0
666
	stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0
686
	; ¯®¤¯¨á¨
667
	; ¯®¤¯¨á¨
687
	add eax,33
668
	add eax,33
688
	stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0
669
	stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0
689
	add ebx,10
670
	add ebx,10
690
	stdcall hex_in_str, buffer,[color],6
671
	stdcall hex_in_str, buffer,[color],6
691
	mov byte[buffer+6],0
672
	mov byte[buffer+6],0
692
	stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0
673
	stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0
693
	ret
674
	ret
694
endp
675
endp
695
 
676
 
696
;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
677
;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
697
align 4
678
align 4
698
proc draw_3d uses eax ebx ecx edi, o_data:dword
679
proc draw_3d uses eax ebx ecx edi, o_data:dword
699
	mov edi,[o_data]
680
	mov edi,[o_data]
700
if 0 ;debug
681
if 0 ;debug
701
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
682
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
702
	mov eax,[edi+offs_obj_poi_data]
683
	mov eax,[edi+offs_obj_poi_data]
703
	stdcall convert_int_to_str, txt_select_vert.count,16
684
	stdcall convert_int_to_str, txt_select_vert.count,16
704
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
685
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
705
	stdcall [kosglSwapBuffers]
686
	stdcall [kosglSwapBuffers]
706
	jmp .end_f
687
	jmp .end_f
707
end if
688
end if
708
	cmp dword[edi+offs_obj_poi_count],2
689
	cmp dword[edi+offs_obj_poi_count],2
709
	jl .end_f
690
	jl .end_f
710
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
691
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
711
	stdcall [glPushMatrix]
692
	stdcall [glPushMatrix]
712
	bt dword[draw_mode],bit_light
693
	bt dword[draw_mode],bit_light
713
	jnc @f
694
	jnc @f
714
		call SetLight
695
		call SetLight
715
		jmp .end_l
696
		jmp .end_l
716
	@@:
697
	@@:
717
		stdcall [glDisable],GL_LIGHTING
698
		stdcall [glDisable],GL_LIGHTING
718
	.end_l:
699
	.end_l:
719
	stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
700
	stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
720
	stdcall [glScalef], [edi+offs_obj_x_scale],[edi+offs_obj_y_scale],[edi+offs_obj_z_scale]
701
	stdcall [glScalef], [edi+offs_obj_x_scale],[edi+offs_obj_y_scale],[edi+offs_obj_z_scale]
721
	stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
702
	stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
722
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
703
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
723
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
704
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
724
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
705
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
725
	stdcall [glTranslatef], [edi+offs_obj_x_centr],[edi+offs_obj_y_centr],[edi+offs_obj_z_centr]
706
	stdcall [glTranslatef], [edi+offs_obj_x_centr],[edi+offs_obj_y_centr],[edi+offs_obj_z_centr]
726
 
707
 
727
if version_edit eq 0
708
if version_edit eq 0
728
	;à¨á®¢ ­¨¥ £à ­¥© á ¨á¯®«ì§®¢ ­¨¥¬ 梥⮢ ¬ â¥à¨ «®¢
709
	;à¨á®¢ ­¨¥ £à ­¥© á ¨á¯®«ì§®¢ ­¨¥¬ 梥⮢ ¬ â¥à¨ «®¢
729
	bt dword[draw_mode],bit_faces_mat
710
	bt dword[draw_mode],bit_faces_mat
730
	jnc @f
711
	jnc @f
731
		mov eax,[edi+offs_obj_mat1_data]
712
		mov eax,[edi+offs_obj_mat1_data]
732
		.b_found:
713
		.b_found:
733
		cmp eax,0
714
		cmp eax,0
734
		je .end_triangles
715
		je .end_triangles
735
			mov ebx,eax
716
			mov ebx,eax
736
			stdcall get_mat_color, eax
717
			stdcall get_mat_color, eax
737
			stdcall draw_3d_faces_color, edi,ebx,eax
718
			stdcall draw_3d_faces_color, edi,ebx,eax
738
			stdcall found_mat_faces, ebx
719
			stdcall found_mat_faces, ebx
739
		jmp .b_found
720
		jmp .b_found
740
	@@:
721
	@@:
741
end if
722
end if
742
 
723
 
743
	;à¨á®¢ ­¨¥ â®ç¥ª
724
	;à¨á®¢ ­¨¥ â®ç¥ª
744
	bt dword[draw_mode],bit_vertexes
725
	bt dword[draw_mode],bit_vertexes
745
	jnc .end_points
726
	jnc .end_points
746
		stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert]
727
		stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert]
747
		stdcall [glBegin],GL_POINTS
728
		stdcall [glBegin],GL_POINTS
748
		mov eax,[edi+offs_obj_poi_data]
729
		mov eax,[edi+offs_obj_poi_data]
749
		mov ebx,[edi+offs_obj_poi_count]
730
		mov ebx,[edi+offs_obj_poi_count]
750
		@@:
731
		@@:
751
			stdcall [glVertex3f], [eax],[eax+4],[eax+8]
732
			stdcall [glVertex3f], [eax],[eax+4],[eax+8]
752
			add eax,12
733
			add eax,12
753
			dec ebx
734
			dec ebx
754
			jnz @b
735
			jnz @b
755
		stdcall [glEnd]
736
		stdcall [glEnd]
756
	.end_points:
737
	.end_points:
757
 
738
 
758
if version_edit eq 1
739
if version_edit eq 1
759
	;à¨á®¢ ­¨¥  ªâ¨¢­®© â®çª¨
740
	;à¨á®¢ ­¨¥  ªâ¨¢­®© â®çª¨
760
	stdcall [tl_node_get_data],tree3
741
	stdcall [tl_node_get_data],tree3
761
	cmp eax,0
742
	cmp eax,0
762
	je @f
743
	je @f
763
		;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
744
		;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
764
		mov eax,[eax]
745
		mov eax,[eax]
765
 
746
 
766
		stdcall [glBegin],GL_LINES
747
		stdcall [glBegin],GL_LINES
767
		stdcall [glColor3ub], [color_ox+2],[color_ox+1],[color_ox]
748
		stdcall [glColor3ub], [color_ox+2],[color_ox+1],[color_ox]
768
		stdcall [glVertex3f], [edi+offs_obj_x_min],[eax+4],[eax+8]
749
		stdcall [glVertex3f], [edi+offs_obj_x_min],[eax+4],[eax+8]
769
		stdcall [glVertex3f], [edi+offs_obj_x_max],[eax+4],[eax+8]
750
		stdcall [glVertex3f], [edi+offs_obj_x_max],[eax+4],[eax+8]
770
		stdcall [glColor3ub], [color_oy+2],[color_oy+1],[color_oy]
751
		stdcall [glColor3ub], [color_oy+2],[color_oy+1],[color_oy]
771
		stdcall [glVertex3f], [eax],[edi+offs_obj_y_min],[eax+8]
752
		stdcall [glVertex3f], [eax],[edi+offs_obj_y_min],[eax+8]
772
		stdcall [glVertex3f], [eax],[edi+offs_obj_y_max],[eax+8]
753
		stdcall [glVertex3f], [eax],[edi+offs_obj_y_max],[eax+8]
773
		stdcall [glColor3ub], [color_oz+2],[color_oz+1],[color_oz]
754
		stdcall [glColor3ub], [color_oz+2],[color_oz+1],[color_oz]
774
		stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_min]
755
		stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_min]
775
		stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_max]
756
		stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_max]
776
		stdcall [glEnd]
757
		stdcall [glEnd]
777
 
758
 
778
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
759
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
779
		stdcall [glPushMatrix]
760
		stdcall [glPushMatrix]
780
			stdcall [glTranslatef], [eax],[eax+4],[eax+8]
761
			stdcall [glTranslatef], [eax],[eax+4],[eax+8]
781
			stdcall [gluSphere], [qObj], [sph_radius], 8,8
762
			stdcall [gluSphere], [qObj], [sph_radius], 8,8
782
		stdcall [glPopMatrix]
763
		stdcall [glPopMatrix]
783
	@@:
764
	@@:
784
 
765
 
785
	;à¨á®¢ ­¨¥ ¢ë¤¥«¥­­ëå â®ç¥ª
766
	;à¨á®¢ ­¨¥ ¢ë¤¥«¥­­ëå â®ç¥ª
786
	cmp dword[obj_poi_sel_c],0
767
	cmp dword[obj_poi_sel_c],0
787
	je .end_select
768
	je .end_select
788
		mov ecx,dword[obj_poi_sel_c]
769
		mov ecx,dword[obj_poi_sel_c]
789
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
770
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
790
		stdcall dword[tl_node_poi_get_info], tree3,0
771
		stdcall dword[tl_node_poi_get_info], tree3,0
791
		@@:
772
		@@:
792
			cmp eax,0
773
			cmp eax,0
793
			je .end_select
774
			je .end_select
794
			mov ebx,eax
775
			mov ebx,eax
795
			cmp word[ebx],ID_ICON_POINT_SEL
776
			cmp word[ebx],ID_ICON_POINT_SEL
796
			jne .next_sel
777
			jne .next_sel
797
			stdcall [tl_node_poi_get_data], tree3,ebx
778
			stdcall [tl_node_poi_get_data], tree3,ebx
798
			mov eax,[eax]
779
			mov eax,[eax]
799
			stdcall [glPushMatrix]
780
			stdcall [glPushMatrix]
800
				stdcall [glTranslatef], [eax],[eax+4],[eax+8]
781
				stdcall [glTranslatef], [eax],[eax+4],[eax+8]
801
				stdcall [gluSphere], [qObj], [sph_radius], 4,4
782
				stdcall [gluSphere], [qObj], [sph_radius], 4,4
802
			stdcall [glPopMatrix]
783
			stdcall [glPopMatrix]
803
			dec ecx
784
			dec ecx
804
			jz .end_select
785
			jz .end_select
805
			.next_sel:
786
			.next_sel:
806
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
787
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
807
			jmp @b
788
			jmp @b
808
    .end_select:
789
    .end_select:
809
end if
790
end if
810
 
791
 
811
	;à¨á®¢ ­¨¥ £à ­¥©
792
	;à¨á®¢ ­¨¥ £à ­¥©
812
	bt dword[draw_mode],bit_faces
793
	bt dword[draw_mode],bit_faces
813
	jnc .end_triangles
794
	jnc .end_triangles
814
	cmp dword[edi+offs_obj_tri_count],0
795
	cmp dword[edi+offs_obj_tri_count],0
815
	je .end_triangles
796
	je .end_triangles
816
	cmp dword[edi+offs_obj_poi_count],0
797
	cmp dword[edi+offs_obj_poi_count],0
817
	je .end_triangles
798
	je .end_triangles
818
		bt dword[draw_mode],bit_faces_fill
799
		bt dword[draw_mode],bit_faces_fill
819
		jc @f
800
		jc @f
820
			push GL_LINE
801
			push GL_LINE
821
			jmp .end_0
802
			jmp .end_0
822
		@@:
803
		@@:
823
			push GL_FILL
804
			push GL_FILL
824
		.end_0:
805
		.end_0:
825
		stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥
806
		stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥
826
		stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face]
807
		stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face]
827
		stdcall [glBegin],GL_TRIANGLES
808
		stdcall [glBegin],GL_TRIANGLES
828
		mov eax,[edi+offs_obj_tri_data]
809
		mov eax,[edi+offs_obj_tri_data]
829
		mov ecx,[edi+offs_obj_tri_count]
810
		mov ecx,[edi+offs_obj_tri_count]
830
		mov edx,[edi+offs_obj_normals_tri_data]
811
		mov edx,[edi+offs_obj_normals_tri_data]
831
		@@:
812
		@@:
832
			;
813
			;
833
			bt dword[draw_mode],bit_light
814
			bt dword[draw_mode],bit_light
834
			jnc .norm
815
			jnc .norm
835
				;[obj_normals_tri_count]
-
 
836
				stdcall [glNormal3fv], edx
816
				stdcall [glNormal3fv], edx
837
				add edx,12
817
				add edx,12
838
			.norm:
818
			.norm:
839
			;
819
			;
840
			movzx ebx,word[eax] ;1-ï ¢¥à設 
820
			movzx ebx,word[eax] ;1-ï ¢¥à設 
841
			imul ebx,12
821
			imul ebx,12
842
			add ebx,[edi+offs_obj_poi_data]
822
			add ebx,[edi+offs_obj_poi_data]
843
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
823
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
844
			movzx ebx,word[eax+2] ;2-ï ¢¥à設 
824
			movzx ebx,word[eax+2] ;2-ï ¢¥à設 
845
			imul ebx,12
825
			imul ebx,12
846
			add ebx,[edi+offs_obj_poi_data]
826
			add ebx,[edi+offs_obj_poi_data]
847
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
827
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
848
			movzx ebx,word[eax+4] ;3-ï ¢¥à設 
828
			movzx ebx,word[eax+4] ;3-ï ¢¥à設 
849
			imul ebx,12
829
			imul ebx,12
850
			add ebx,[edi+offs_obj_poi_data]
830
			add ebx,[edi+offs_obj_poi_data]
851
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
831
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
852
			add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
832
			add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
853
			dec ecx
833
			dec ecx
854
			jnz @b
834
			jnz @b
855
		stdcall [glEnd]
835
		stdcall [glEnd]
856
	.end_triangles:
836
	.end_triangles:
857
 
837
 
858
	stdcall [glPopMatrix]
838
	stdcall [glPopMatrix]
859
if version_edit eq 1
839
if version_edit eq 1
860
	cmp dword[obj_poi_sel_c],0
840
	cmp dword[obj_poi_sel_c],0
861
	je @f
841
	je @f
862
		stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
842
		stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
863
	@@:
843
	@@:
864
end if
844
end if
865
	stdcall [kosglSwapBuffers]
845
	stdcall [kosglSwapBuffers]
866
	.end_f:
846
	.end_f:
867
	ret
847
	ret
868
endp
848
endp
869
 
849
 
870
align 4
850
align 4
871
SetLight:
851
SetLight:
872
	stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
852
	stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
873
	stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
853
	stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
874
 
854
 
875
	stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
855
	stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
876
	stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
856
	stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
877
 
857
 
878
	stdcall [glEnable], GL_COLOR_MATERIAL
858
	stdcall [glEnable], GL_COLOR_MATERIAL
879
	stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
859
	stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
880
	stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
860
	stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
881
	stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
861
	stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
882
	stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
862
	stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
883
 
863
 
884
	stdcall [glEnable],GL_LIGHTING
864
	stdcall [glEnable],GL_LIGHTING
885
	stdcall [glEnable],GL_LIGHT0
865
	stdcall [glEnable],GL_LIGHT0
886
	ret
866
	ret
887
 
867
 
888
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ¢¥à設
868
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ¢¥à設
889
align 4
869
align 4
890
mnu_vertexes_on:
870
mnu_vertexes_on:
891
	or dword[draw_mode], 1 shl bit_vertexes
871
	or dword[draw_mode], 1 shl bit_vertexes
892
	and dword[draw_mode], not ((1 shl bit_faces)+(1 shl bit_faces_mat)) ;¢ëª«îç ¥¬ ०¨¬ë à¨á®¢ ­¨ï, ª®â®àë¥ ¬®£ãâ ¬¥è âì
872
	and dword[draw_mode], not ((1 shl bit_faces)+(1 shl bit_faces_mat)) ;¢ëª«îç ¥¬ ०¨¬ë à¨á®¢ ­¨ï, ª®â®àë¥ ¬®£ãâ ¬¥è âì
893
	call update_obj
873
	call update_obj
894
	ret
874
	ret
895
 
875
 
896
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ª àª á­ëå £à ­¥©
876
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ª àª á­ëå £à ­¥©
897
align 4
877
align 4
898
mnu_edges_on:
878
mnu_edges_on:
899
	or dword[draw_mode], 1 shl bit_faces
879
	or dword[draw_mode], 1 shl bit_faces
900
	and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill)+(1 shl bit_faces_mat))
880
	and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill)+(1 shl bit_faces_mat))
901
	call update_obj
881
	call update_obj
902
	ret
882
	ret
903
 
883
 
904
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ᯫ®è­ëå £à ­¥©
884
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ᯫ®è­ëå £à ­¥©
905
align 4
885
align 4
906
mnu_faces_on:
886
mnu_faces_on:
907
	or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill)
887
	or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill)
908
	and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_mat))
888
	and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_mat))
909
	call update_obj
889
	call update_obj
910
	ret
890
	ret
911
 
891
 
912
;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥­¨¥
892
;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥­¨¥
913
align 4
893
align 4
914
mnu_light_on_off:
894
mnu_light_on_off:
915
	xor dword[draw_mode], 1 shl bit_light
895
	xor dword[draw_mode], 1 shl bit_light
916
	call update_obj
896
	call update_obj
917
	ret
897
	ret
918
 
898
 
919
align 4
899
align 4
920
mnu_reset_settings:
900
mnu_reset_settings:
921
	mov dword[angle_x],0.0
901
	mov dword[angle_x],0.0
922
	mov dword[angle_y],0.0
902
	mov dword[angle_y],0.0
923
	mov dword[angle_z],0.0
903
	mov dword[angle_z],0.0
924
	m2m dword[draw_mode],dword[def_dr_mode]
904
	m2m dword[draw_mode],dword[def_dr_mode]
925
	call update_obj
905
	call update_obj
926
	ret
906
	ret
927
 
907
 
928
if version_edit eq 1
908
if version_edit eq 1
929
 
909
 
930
align 4
910
align 4
931
update_obj:
911
update_obj:
932
	stdcall draw_3d, o3d
912
	stdcall draw_3d, o3d
933
	ret
913
	ret
934
 
914
 
935
else
915
else
936
 
916
 
937
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ᯫ®è­ëå £à ­¥©
917
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ᯫ®è­ëå £à ­¥©
938
align 4
918
align 4
939
mnu_faces_mat:
919
mnu_faces_mat:
940
	or dword[draw_mode], (1 shl bit_faces_mat)
920
	or dword[draw_mode], (1 shl bit_faces_mat)
941
	call update_obj
921
	call update_obj
942
	ret
922
	ret
943
 
923
 
944
align 4
924
align 4
945
update_obj:
925
update_obj:
946
push eax ebx
926
push eax ebx
947
	stdcall [tl_node_get_data],tree1
927
	stdcall [tl_node_get_data],tree1
948
	cmp eax,0
928
	cmp eax,0
949
	je @f
929
	je @f
950
		mov ebx,dword[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
930
		mov ebx,dword[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
951
		add ebx,dword[open_file_data] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ ¯ ¬ïâ¨
931
		add ebx,dword[open_file_data] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ ¯ ¬ïâ¨
952
		cmp word[ebx],CHUNK_OBJBLOCK
932
		cmp word[ebx],CHUNK_OBJBLOCK
953
		jne @f
933
		jne @f
954
			add eax,list_offs_obj3d
934
			add eax,list_offs_obj3d
955
			stdcall draw_3d,eax
935
			stdcall draw_3d,eax
956
	@@:
936
	@@:
957
pop ebx eax
937
pop ebx eax
958
	ret
938
	ret
959
 
939
 
960
;input:
940
;input:
961
; p_mat - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¯à¥¤ë¤ã饣® ¬ â¥à¨ « 
941
; p_mat - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¯à¥¤ë¤ã饣® ¬ â¥à¨ « 
962
align 4
942
align 4
963
proc found_mat_faces uses ebx, p_mat:dword
943
proc found_mat_faces uses ebx, p_mat:dword
964
	mov eax,[p_mat]
944
	mov eax,[p_mat]
965
	add eax,[eax+2]
945
	add eax,[eax+2]
966
	cmp word[eax],CHUNK_FACEMAT
946
	cmp word[eax],CHUNK_FACEMAT
967
	je @f
947
	je @f
968
		xor eax,eax
948
		xor eax,eax
969
	@@:
949
	@@:
970
	ret
950
	ret
971
endp
951
endp
972
 
952
 
973
align 4
953
align 4
974
proc get_mat_color uses ebx ecx edx edi esi, p_mat:dword
954
proc get_mat_color uses ebx ecx edx edi esi, p_mat:dword
975
	stdcall [tl_node_poi_get_info], tree1,0
955
	stdcall [tl_node_poi_get_info], tree1,0
976
	mov ecx,eax
956
	mov ecx,eax
977
	.cycle_0:
957
	.cycle_0:
978
		cmp ecx,0
958
		cmp ecx,0
979
		je .cycle_0_end
959
		je .cycle_0_end
980
			stdcall [tl_node_poi_get_data], tree1,ecx
960
			stdcall [tl_node_poi_get_data], tree1,ecx
981
			mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
961
			mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
982
			add ebx,[open_file_data]
962
			add ebx,[open_file_data]
983
			cmp word[ebx],CHUNK_MATERIAL
963
			cmp word[ebx],CHUNK_MATERIAL
984
			jne .end_add_p3
964
			jne .end_add_p3
985
			add eax,list_offs_obj3d
965
			add eax,list_offs_obj3d
986
			mov esi,[eax+offs_mat_name]
966
			mov esi,[eax+offs_mat_name]
987
			cmp esi,0
967
			cmp esi,0
988
			jne @f
968
			jne @f
989
				;init material
969
				;init material
990
				stdcall mat_init,eax,ebx
970
				stdcall mat_init,eax,ebx
991
				mov esi,[eax+offs_mat_name]
971
				mov esi,[eax+offs_mat_name]
992
			@@:
972
			@@:
993
			mov edi,[p_mat]
973
			mov edi,[p_mat]
994
			mov eax,5
974
			mov eax,5
995
			add edi,eax
975
			add edi,eax
996
align 4
976
align 4
997
			@@:
977
			@@:
998
				cmp al,0
978
				cmp al,0
999
				je .found
979
				je .found
1000
				lodsb
980
				lodsb
1001
				inc edi
981
				inc edi
1002
				cmp byte[edi],al
982
				cmp byte[edi],al
1003
				je @b
983
				je @b
1004
		.end_add_p3:
984
		.end_add_p3:
1005
		stdcall [tl_node_poi_get_next_info], tree1,ecx
985
		stdcall [tl_node_poi_get_next_info], tree1,ecx
1006
		mov ecx,eax ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã
986
		mov ecx,eax ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã
1007
		jmp .cycle_0
987
		jmp .cycle_0
1008
	.cycle_0_end:
988
	.cycle_0_end:
1009
 
989
 
1010
	.no_found:
990
	.no_found:
1011
		xor eax,eax
991
		xor eax,eax
1012
		jmp .end_f
992
		jmp .end_f
1013
	.found:
993
	.found:
1014
		stdcall [tl_node_poi_get_data], tree1,ecx
994
		stdcall [tl_node_poi_get_data], tree1,ecx
1015
		add eax,list_offs_obj3d
995
		add eax,list_offs_obj3d
1016
		mov eax,[eax+offs_mat_col_diffuse]
996
		mov eax,[eax+offs_mat_col_diffuse]
1017
	.end_f:
997
	.end_f:
1018
	ret
998
	ret
1019
endp
999
endp
1020
 
1000
 
1021
align 4
1001
align 4
1022
proc draw_3d_faces_color o_data:dword, p_mat:dword, color:dword
1002
proc draw_3d_faces_color o_data:dword, p_mat:dword, color:dword
1023
pushad
1003
pushad
1024
	stdcall [glPolygonMode], GL_FRONT_AND_BACK,GL_FILL
1004
	stdcall [glPolygonMode], GL_FRONT_AND_BACK,GL_FILL
1025
	stdcall [glColor3ub],[color+2],[color+1],[color]
1005
	stdcall [glColor3ub],[color+2],[color+1],[color]
1026
	stdcall [glBegin],GL_TRIANGLES
1006
	stdcall [glBegin],GL_TRIANGLES
1027
	mov edi,[o_data]
1007
	mov edi,[o_data]
1028
	mov esi,[p_mat]
1008
	mov esi,[p_mat]
1029
	add esi,6
1009
	add esi,6
1030
	@@:
1010
	@@:
1031
		lodsb
1011
		lodsb
1032
		cmp al,0
1012
		cmp al,0
1033
		jne @b
1013
		jne @b
1034
	movzx ecx,word[esi] ;ecx - ç¨á«® £à ­¥© á ¤ ­­ë¬ ¬ â¥à¨ «®¬
1014
	movzx ecx,word[esi] ;ecx - ç¨á«® £à ­¥© á ¤ ­­ë¬ ¬ â¥à¨ «®¬
1035
	mov edx,[edi+offs_obj_poi_data]
1015
	mov edx,[edi+offs_obj_poi_data]
1036
align 4
1016
align 4
1037
	@@:
1017
	@@:
1038
		add esi,2
1018
		add esi,2
1039
		;word[esi] - ­®¬¥à âà¥ã£®«ì­¨ª 
1019
		;word[esi] - ­®¬¥à âà¥ã£®«ì­¨ª 
1040
		movzx ebx,word[esi]
1020
		movzx ebx,word[esi]
-
 
1021
		;­®à¬ «¨ ¤«ï ®á¢¥é¥­¨ï
-
 
1022
		bt dword[draw_mode],bit_light
-
 
1023
		jnc .norm
-
 
1024
			mov eax,ebx
-
 
1025
			imul eax,12
-
 
1026
			add eax,[edi+offs_obj_normals_tri_data]
-
 
1027
			stdcall [glNormal3fv], eax
-
 
1028
		.norm:
-
 
1029
 
1041
		shl ebx,3
1030
		shl ebx,3
1042
		add ebx,[edi+offs_obj_tri_data]
1031
		add ebx,[edi+offs_obj_tri_data]
1043
	
1032
	
1044
		movzx eax,word[ebx] ;1-ï ¢¥à設 
1033
		movzx eax,word[ebx] ;1-ï ¢¥à設 
1045
		imul eax,12 ;float(x,y,z)
1034
		imul eax,12 ;float(x,y,z)
1046
		add eax,edx
1035
		add eax,edx
1047
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1036
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1048
 
1037
 
1049
		movzx eax,word[ebx+2] ;2-ï ¢¥à設 
1038
		movzx eax,word[ebx+2] ;2-ï ¢¥à設 
1050
		imul eax,12 ;float(x,y,z)
1039
		imul eax,12 ;float(x,y,z)
1051
		add eax,edx
1040
		add eax,edx
1052
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1041
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1053
 
1042
 
1054
		movzx eax,word[ebx+4] ;3-ï ¢¥à設 
1043
		movzx eax,word[ebx+4] ;3-ï ¢¥à設 
1055
		imul eax,12 ;float(x,y,z)
1044
		imul eax,12 ;float(x,y,z)
1056
		add eax,edx
1045
		add eax,edx
1057
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1046
		stdcall [glVertex3f], [eax],[eax+4],[eax+8]
1058
		
1047
		
1059
		dec ecx
1048
		dec ecx
1060
		jnz @b
1049
		jnz @b
1061
	stdcall [glEnd]
1050
	stdcall [glEnd]
1062
 
1051
 
1063
.end_f:
1052
.end_f:
1064
popad
1053
popad
1065
	ret
1054
	ret
1066
endp
1055
endp
1067
 
1056
 
1068
end if
1057
end if
1069
 
1058
 
1070
align 4
1059
align 4
1071
draw_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ®¡ê¥ªâ 
1060
draw_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ®¡ê¥ªâ 
1072
def_dr_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ¯® 㬮«ç ­¨î
1061
def_dr_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ¯® 㬮«ç ­¨î
1073
delt_size dd 3.0 ;¨§¬¥­¥­¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë
1062
delt_size dd 3.0 ;¨§¬¥­¥­¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë
1074
mouse_drag dd 0 ;०¨¬ ¯®¢®à®â  áæ¥­ë ®â ¯¥à¥¬¥é¥­¨¨ ªãàá®à  ¬ëè¨
1063
mouse_drag dd 0 ;०¨¬ ¯®¢®à®â  áæ¥­ë ®â ¯¥à¥¬¥é¥­¨¨ ªãàá®à  ¬ëè¨
1075
mouse_x dd 0
1064
mouse_x dd 0
1076
mouse_y dd 0
1065
mouse_y dd 0
1077
sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥­¨ï  ªâ¨¢­®© â®çª¨
1066
sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥­¨ï  ªâ¨¢­®© â®çª¨
1078
>
1067
>