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) |