Rev 8232 | Rev 8719 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8232 | Rev 8666 | ||
---|---|---|---|
1 | do_sinus: |
1 | do_sinus: |
2 | .x equ [ebp-8] |
2 | .x equ [ebp-8] |
3 | .y equ [ebp-12] |
3 | .y equ [ebp-12] |
4 | .new_y equ [ebp-16] |
4 | .new_y equ [ebp-16] |
5 | .temp equ [ebp-20] |
5 | .temp equ [ebp-20] |
6 | push ebp |
6 | push ebp |
7 | mov ebp,esp |
7 | mov ebp,esp |
8 | sub esp,64 |
8 | sub esp,64 |
9 | mov dword .x,0 |
9 | mov dword .x,0 |
10 | mov dword .y,0 |
10 | mov dword .y,0 |
11 | mov esi,[screen_ptr] |
11 | mov esi,[screen_ptr] |
12 | mov edi,[Zbuffer_ptr] |
12 | mov edi,[Zbuffer_ptr] |
13 | push edi |
13 | push edi |
14 | ; clear Zbuffer temporally used as image buffer |
14 | ; clear Zbuffer temporally used as image buffer |
15 | movzx ecx,word[size_x_var] |
15 | movzx ecx,word[size_x_var] |
16 | movzx eax,word[size_y_var] |
16 | movzx eax,word[size_y_var] |
17 | imul ecx,eax ;SIZE_X*SIZE_Y |
17 | imul ecx,eax ;SIZE_X*SIZE_Y |
18 | xor eax,eax |
18 | xor eax,eax |
19 | cld |
19 | cld |
20 | rep stosd |
20 | rep stosd |
21 | pop edi |
21 | pop edi |
22 | ; movzx eax,[sinus_flag] |
- | |
23 | ; mov edx,10 |
- | |
24 | ; mul edx |
- | |
25 | ; mov [sin_amplitude],eax |
- | |
26 | ; mov [sin_frq],eax |
- | |
27 | fninit |
22 | fninit |
28 | ;if Ext = SSE2 |
- | |
29 | ; movups xmm1,[const0123] ; xmm1 - init values |
- | |
30 | ; mov eax,0x000000ff |
- | |
31 | ; movd xmm2,eax |
- | |
32 | ; shufps xmm2,xmm2,0 ; xmm2 - mask value |
- | |
33 | ; mov eax,4 |
- | |
34 | ; movd xmm3,eax |
- | |
35 | ; shufps xmm3,xmm3,0 |
- | |
36 | .again: |
23 | .again: |
37 | if 0 |
- | |
38 | fild dword .x |
- | |
39 | fidiv [sin_frq] |
- | |
40 | fsin |
- | |
41 | fimul [sin_amplitude] |
- | |
42 | fiadd dword .y |
- | |
43 | fistp dword .new_y |
- | |
44 | else |
- | |
45 | fild dword .x |
24 | fild dword .x |
46 | fmul [sin_frq] |
25 | fmul [sin_frq] |
47 | fistp dword .temp |
26 | fistp dword .temp |
48 | mov eax, .temp |
27 | mov eax, .temp |
49 | ; mov bx, [angle_x] |
- | |
50 | ; add bx, [angle_y] |
- | |
51 | ; movzx ebx,bx |
- | |
52 | ; shr ebx,1 ; change phase |
- | |
53 | ; add eax,ebx |
- | |
54 | - | ||
55 | 28 | ||
56 | and eax, 0x000000ff |
29 | and eax, 0x000000ff |
57 | - | ||
58 | ; cdq |
- | |
59 | ; mul [sin_frq] |
- | |
60 | ; and eax,0x000000ff |
- | |
61 | ; and ax,0x00ff |
- | |
62 | ; cwde |
30 | |
63 | 31 | ||
64 | fld dword [sin_tab+eax*4] |
32 | fld dword [sin_tab+eax*4] |
65 | fimul dword [sin_amplitude] |
33 | fimul dword [sin_amplitude] |
66 | fiadd dword .y |
34 | fiadd dword .y |
67 | fistp dword .new_y |
35 | fistp dword .new_y |
68 | end if |
36 | |
69 | mov eax,.new_y |
37 | mov eax,.new_y |
70 | or eax,eax |
38 | or eax,eax |
71 | jl .skip |
39 | jl .skip |
72 | movzx ebx,word[size_y_var] |
40 | movzx ebx,word[size_y_var] |
73 | cmp eax,ebx ;SIZE_Y |
41 | cmp eax,ebx ;SIZE_Y |
74 | jg .skip |
42 | jg .skip |
75 | movzx edx,word[size_x_var] |
43 | movzx edx,word[size_x_var] |
76 | mul edx |
44 | mul edx |
77 | ; shl eax,9 |
45 | ; shl eax,9 |
78 | add eax,dword .x |
46 | add eax,dword .x |
79 | 47 | ||
80 | lea ebx,[eax*3] |
48 | lea ebx,[eax*3] |
81 | cmp [dr_flag],12 ; 32 bit col cause |
49 | cmp [dr_flag],12 ; 32 bit col cause |
82 | jl @f |
50 | jl @f |
83 | add ebx,eax |
51 | add ebx,eax |
84 | @@: |
52 | @@: |
85 | mov eax,[esi] |
53 | mov eax,[esi] |
86 | mov [edi+ebx],eax |
54 | mov [edi+ebx],eax |
87 | .skip: |
55 | .skip: |
88 | add esi,3 |
56 | add esi,3 |
89 | cmp [dr_flag],12 |
57 | cmp [dr_flag],12 |
90 | jl @f |
58 | jl @f |
91 | inc esi |
59 | inc esi |
92 | @@: |
60 | @@: |
93 | inc dword .x |
61 | inc dword .x |
94 | movzx edx,word[size_x_var] |
62 | movzx edx,word[size_x_var] |
95 | cmp dword .x,edx ;SIZE_X |
63 | cmp dword .x,edx ;SIZE_X |
96 | jl .again |
64 | jl .again |
97 | mov dword .x,0 |
65 | mov dword .x,0 |
98 | inc dword .y |
66 | inc dword .y |
99 | movzx edx,word[size_y_var] |
67 | movzx edx,word[size_y_var] |
100 | cmp dword .y,edx ;SIZE_Y |
68 | cmp dword .y,edx ;SIZE_Y |
101 | jl .again |
69 | jl .again |
102 | 70 | ||
103 | ; copy from temporary buffer -> Zbuffer to screen |
71 | ; copy from temporary buffer -> Zbuffer to screen |
104 | mov esi,[Zbuffer_ptr] |
72 | mov esi,[Zbuffer_ptr] |
105 | mov edi,[screen_ptr] |
73 | mov edi,[screen_ptr] |
106 | movzx ecx,word[size_x_var] |
74 | movzx ecx,word[size_x_var] |
107 | movzx eax,word[size_y_var] |
75 | movzx eax,word[size_y_var] |
108 | imul ecx,eax |
76 | imul ecx,eax |
109 | cmp [dr_flag],12 |
77 | cmp [dr_flag],12 |
110 | jge @f |
78 | jge @f |
111 | lea ecx,[ecx*3] |
79 | lea ecx,[ecx*3] |
112 | shr ecx,2 |
80 | shr ecx,2 |
113 | ; mov ecx,SIZE_X*SIZE_Y*3/4 |
81 | ; mov ecx,SIZE_X*SIZE_Y*3/4 |
114 | @@: |
82 | @@: |
115 | cld |
83 | cld |
116 | rep movsd |
84 | rep movsd |
117 | 85 | ||
118 | 86 | ||
119 | mov esp,ebp |
87 | mov esp,ebp |
120 | pop ebp |
88 | pop ebp |
121 | ret |
89 | ret |
122 | 90 | ||
123 | 91 | ||
124 | draw_dots: |
92 | draw_dots: |
125 | mov esi,[points_translated_ptr] |
93 | mov esi,[points_translated_ptr] |
126 | mov ecx,[points_count_var] |
94 | mov ecx,[points_count_var] |
127 | .drw: |
95 | .drw: |
128 | @@: |
96 | @@: |
129 | lodsd |
97 | lodsd |
130 | add esi,2 ; skip z |
98 | add esi,2 ; skip z |
131 | movzx ebx,ax |
99 | movzx ebx,ax |
132 | shr eax,16 ; bx = x , ax = y |
100 | shr eax,16 ; bx = x , ax = y |
133 | or ax,ax |
101 | or ax,ax |
134 | jl @f |
102 | jl @f |
135 | or bx,bx |
103 | or bx,bx |
136 | jl @f |
104 | jl @f |
137 | cmp ax,[size_y_var] ;SIZE_Y |
105 | cmp ax,[size_y_var] ;SIZE_Y |
138 | jge @f |
106 | jge @f |
139 | cmp bx,[size_x_var] ;SIZE_X |
107 | cmp bx,[size_x_var] ;SIZE_X |
140 | jge @f |
108 | jge @f |
141 | movzx edx,word[size_x_var] ;SIZE_X ; SIZE_X not only power of 2 -> 256,512,... |
109 | movzx edx,word[size_x_var] ;SIZE_X ; SIZE_X not only power of 2 -> 256,512,... |
142 | mul edx |
110 | mul edx |
143 | add eax,ebx |
111 | add eax,ebx |
144 | mov edi,[screen_ptr] |
112 | mov edi,[screen_ptr] |
145 | lea eax,[eax*3] |
113 | lea eax,[eax*3] |
146 | add edi,eax |
114 | add edi,eax |
147 | xor eax,eax |
115 | xor eax,eax |
148 | not eax |
116 | not eax |
149 | stosd |
117 | stosd |
150 | @@: |
118 | @@: |
151 | loop .drw |
119 | loop .drw |
152 | 120 | ||
153 | ret |
121 | ret |
154 | 122 | ||
155 | do_emboss: ; sse2 version only |
123 | do_emboss: ; sse2 version only |
156 | if Ext >= SSE2 |
124 | if Ext >= SSE2 |
157 | movzx ecx,[bumps_deep_flag] |
125 | movzx ecx,[bumps_deep_flag] |
158 | inc ecx |
126 | inc ecx |
159 | call blur_screen ;blur n times |
127 | call blur_screen ;blur n times |
160 | 128 | ||
161 | mov eax,[size_y_var] ;load both x, y |
129 | mov eax,[size_y_var] ;load both x, y |
162 | mov ebx,eax |
130 | mov ebx,eax |
163 | shr ebx,16 |
131 | shr ebx,16 |
164 | cwde |
132 | cwde |
165 | mul ebx |
133 | mul ebx |
166 | mov ecx,eax |
134 | mov ecx,eax |
167 | sub ecx,ebx |
135 | sub ecx,ebx |
168 | sub ecx,ebx |
136 | sub ecx,ebx |
169 | mov esi,[screen_ptr] |
137 | mov esi,[screen_ptr] |
170 | mov edi,[Zbuffer_ptr] |
138 | mov edi,[Zbuffer_ptr] |
171 | cmp [dr_flag],12 |
139 | cmp [dr_flag],12 |
172 | jge @f |
140 | jge @f |
173 | lea ebx,[ebx*3] |
141 | lea ebx,[ebx*3] |
174 | jmp .f |
142 | jmp .f |
175 | @@: |
143 | @@: |
176 | shl ebx,2 |
144 | shl ebx,2 |
177 | .f: |
145 | .f: |
178 | mov edx,esi |
146 | mov edx,esi |
179 | add esi,ebx |
147 | add esi,ebx |
180 | lea ebx,[ebx+esi] |
148 | lea ebx,[ebx+esi] |
181 | pxor xmm0,xmm0 |
149 | pxor xmm0,xmm0 |
182 | push eax |
150 | push eax |
183 | .emb: |
151 | .emb: |
184 | cmp [dr_flag],12 |
152 | cmp [dr_flag],12 |
185 | jge @f |
153 | jge @f |
186 | movlps xmm1,[esi+3] |
154 | movlps xmm1,[esi+3] |
187 | movhps xmm1,[esi+6] |
155 | movhps xmm1,[esi+6] |
188 | movlps xmm2,[esi-3] |
156 | movlps xmm2,[esi-3] |
189 | movhps xmm2,[esi] |
157 | movhps xmm2,[esi] |
190 | movlps xmm3,[ebx] |
158 | movlps xmm3,[ebx] |
191 | movhps xmm3,[ebx+3] |
159 | movhps xmm3,[ebx+3] |
192 | movlps xmm4,[edx] |
160 | movlps xmm4,[edx] |
193 | movhps xmm4,[edx+3] |
161 | movhps xmm4,[edx+3] |
194 | jmp .ff |
162 | jmp .ff |
195 | @@: |
163 | @@: |
196 | movlps xmm1,[esi+4] |
164 | movlps xmm1,[esi+4] |
197 | movhps xmm1,[esi+8] |
165 | movhps xmm1,[esi+8] |
198 | movlps xmm2,[esi-4] |
166 | movlps xmm2,[esi-4] |
199 | movhps xmm2,[esi] |
167 | movhps xmm2,[esi] |
200 | movlps xmm3,[ebx] |
168 | movlps xmm3,[ebx] |
201 | movhps xmm3,[ebx+4] |
169 | movhps xmm3,[ebx+4] |
202 | movlps xmm4,[edx] |
170 | movlps xmm4,[edx] |
203 | movhps xmm4,[edx+4] |
171 | movhps xmm4,[edx+4] |
204 | .ff: |
172 | .ff: |
205 | punpcklbw xmm1,xmm0 |
173 | punpcklbw xmm1,xmm0 |
206 | punpcklbw xmm2,xmm0 |
174 | punpcklbw xmm2,xmm0 |
207 | punpcklbw xmm3,xmm0 |
175 | punpcklbw xmm3,xmm0 |
208 | punpcklbw xmm4,xmm0 |
176 | punpcklbw xmm4,xmm0 |
209 | psubsw xmm1,xmm2 |
177 | psubsw xmm1,xmm2 |
210 | paddw xmm1,[emboss_bias] |
178 | paddw xmm1,[emboss_bias] |
211 | psubsw xmm3,xmm4 |
179 | psubsw xmm3,xmm4 |
212 | paddw xmm3,[emboss_bias] |
180 | paddw xmm3,[emboss_bias] |
213 | pmulhw xmm1,xmm3 |
181 | pmulhw xmm1,xmm3 |
214 | movaps xmm7,xmm1 |
182 | movaps xmm7,xmm1 |
215 | movaps xmm6,xmm1 |
183 | movaps xmm6,xmm1 |
216 | psrlq xmm7,2*8 |
184 | psrlq xmm7,2*8 |
217 | psrlq xmm6,4*8 |
185 | psrlq xmm6,4*8 |
218 | pmaxsw xmm1,xmm7 |
186 | pmaxsw xmm1,xmm7 |
219 | pmaxsw xmm1,xmm6 |
187 | pmaxsw xmm1,xmm6 |
220 | 188 | ||
221 | if 0 |
189 | if 0 |
222 | movaps xmm7,xmm3 |
190 | movaps xmm7,xmm3 |
223 | movaps xmm6,xmm3 |
191 | movaps xmm6,xmm3 |
224 | psrlq xmm7,2*8 |
192 | psrlq xmm7,2*8 |
225 | psrlq xmm6,4*8 |
193 | psrlq xmm6,4*8 |
226 | pmaxsw xmm3,xmm7 |
194 | pmaxsw xmm3,xmm7 |
227 | pmaxsw xmm3,xmm6 |
195 | pmaxsw xmm3,xmm6 |
228 | end if |
196 | end if |
229 | pmaxsw xmm1,xmm3 |
197 | pmaxsw xmm1,xmm3 |
230 | 198 | ||
231 | movd eax,xmm1 |
199 | movd eax,xmm1 |
232 | movzx eax,al |
200 | movzx eax,al |
233 | ; cmp [dr_flag],12 |
201 | ; cmp [dr_flag],12 |
234 | ; je @f |
202 | ; je @f |
235 | lea eax,[eax*3+envmap_cub] |
203 | lea eax,[eax*3+envmap_cub] |
236 | ; jmp .fff |
204 | ; jmp .fff |
237 | ;@@: |
205 | ;@@: |
238 | 206 | ||
239 | mov eax,[eax] |
207 | mov eax,[eax] |
240 | mov [edi],eax ;xmm1 |
208 | mov [edi],eax ;xmm1 |
241 | psrldq xmm1,8 |
209 | psrldq xmm1,8 |
242 | movd eax,xmm1 |
210 | movd eax,xmm1 |
243 | movzx eax,al |
211 | movzx eax,al |
244 | lea eax,[eax*3+envmap_cub] |
212 | lea eax,[eax*3+envmap_cub] |
245 | mov eax,[eax] |
213 | mov eax,[eax] |
246 | mov [edi+4],eax |
214 | mov [edi+4],eax |
247 | 215 | ||
248 | cmp [dr_flag],12 |
216 | cmp [dr_flag],12 |
249 | jl @f |
217 | jl @f |
250 | add esi,2 |
218 | add esi,2 |
251 | add ebx,2 |
219 | add ebx,2 |
252 | add edx,2 |
220 | add edx,2 |
253 | @@: |
221 | @@: |
254 | 222 | ||
255 | add edi,8 |
223 | add edi,8 |
256 | add esi,6 |
224 | add esi,6 |
257 | add ebx,6 |
225 | add ebx,6 |
258 | add edx,6 |
226 | add edx,6 |
259 | sub ecx,2 |
227 | sub ecx,2 |
260 | jnc .emb |
228 | jnc .emb |
261 | 229 | ||
262 | 230 | ||
263 | pop ecx ;,eax |
231 | pop ecx ;,eax |
264 | mov edi,[screen_ptr] |
232 | mov edi,[screen_ptr] |
265 | mov esi,[Zbuffer_ptr] |
233 | mov esi,[Zbuffer_ptr] |
266 | cmp [dr_flag],12 |
234 | cmp [dr_flag],12 |
267 | jge .e |
235 | jge .e |
268 | @@: |
236 | @@: |
269 | movsd |
237 | movsd |
270 | dec edi |
238 | dec edi |
271 | loop @b |
239 | loop @b |
272 | .e: |
240 | .e: |
273 | rep movsd |
241 | rep movsd |
274 | 242 | ||
275 | end if |
243 | end if |
276 | 244 | ||
277 | ret |
245 | ret |
278 | - | ||
279 | ;align 16 |
- | |
280 | ; emboss_bias: |
- | |
281 | ; dw 128, 128, 128, 128, 128, 128, 128, 128 |
- | |
282 | - | ||
283 | if 0 ; old emb proc |
- | |
284 | - | ||
285 | ; emboss - after drawing all, |
- | |
286 | ; transfer screen buffer into bump map |
- | |
287 | ; and draw two bump triangles |
- | |
288 | ; ************************************* |
- | |
289 | mov esi,screen |
- | |
290 | mov edi,bumpmap2 |
- | |
291 | mov ecx,TEXTURE_SIZE/3 |
- | |
292 | cld |
- | |
293 | if Ext=NON |
- | |
294 | xor eax,eax |
- | |
295 | xor bh,bh |
- | |
296 | xor dh,dh |
- | |
297 | @@: |
- | |
298 | lodsb |
- | |
299 | movzx bx,al |
- | |
300 | lodsb |
- | |
301 | movzx dx,al |
- | |
302 | lodsb |
- | |
303 | add ax,bx |
- | |
304 | add ax,dx |
- | |
305 | ; cwd |
- | |
306 | ; div [i3] |
- | |
307 | ;; push ax |
- | |
308 | ;; pop bx |
- | |
309 | ;; shr bx,3 |
- | |
310 | ;; shr ax,2 |
- | |
311 | ;; add ax,bx |
- | |
312 | - | ||
313 | lea eax,[eax*5] |
- | |
314 | shr ax,4 |
- | |
315 | - | ||
316 | stosb |
- | |
317 | loop @b |
- | |
318 | else |
- | |
319 | emms |
- | |
320 | pxor mm1,mm1 |
- | |
321 | mov ebx,0x0000ffff |
- | |
322 | @@: |
- | |
323 | movd mm0,[esi] |
- | |
324 | punpcklbw mm0,mm1 |
- | |
325 | movq mm2,mm0 |
- | |
326 | psrlq mm2,16 |
- | |
327 | movq mm3,mm0 |
- | |
328 | psrlq mm3,32 |
- | |
329 | paddw mm0,mm2 |
- | |
330 | paddw mm0,mm3 |
- | |
331 | - | ||
332 | - | ||
333 | movd eax,mm0 |
- | |
334 | and eax,ebx |
- | |
335 | lea eax,[eax*5] |
- | |
336 | shr ax,4 |
- | |
337 | stosb |
- | |
338 | add esi,3 |
- | |
339 | loop @b |
- | |
340 | - | ||
341 | end if |
- | |
342 | push ebp |
- | |
343 | - | ||
344 | push dword 0 ; env coords |
- | |
345 | push word 0 |
- | |
346 | push word SIZE_X |
- | |
347 | push word SIZE_Y |
- | |
348 | push dword 0 |
- | |
349 | push dword 0 ; bump coords |
- | |
350 | push word SIZE_X |
- | |
351 | push word SIZE_Y |
- | |
352 | push word 0 |
- | |
353 | mov eax,SIZE_Y |
- | |
354 | mov ebx,SIZE_X*65536+0 |
- | |
355 | xor ecx,ecx |
- | |
356 | mov edx,bumpmap2 |
- | |
357 | mov esi,envmap |
- | |
358 | mov edi,screen |
- | |
359 | call bump_triangle |
- | |
360 | - | ||
361 | push dword SIZE_X shl 16 + SIZE_Y ; env coords |
- | |
362 | push word 0 |
- | |
363 | push word SIZE_X |
- | |
364 | push word SIZE_Y |
- | |
365 | push word 0 |
- | |
366 | push dword SIZE_X shl 16 + SIZE_Y ; bump coords |
- | |
367 | push word 0 |
- | |
368 | push word SIZE_X |
- | |
369 | push word SIZE_Y |
- | |
370 | push word 0 |
- | |
371 | mov eax,SIZE_Y |
- | |
372 | mov ebx,SIZE_X * 65536+0 |
- | |
373 | mov ecx,SIZE_X shl 16 + SIZE_Y |
- | |
374 | mov edx,bumpmap2 |
- | |
375 | mov esi,envmap |
- | |
376 | mov edi,screen |
- | |
377 | call bump_triangle |
- | |
378 | - | ||
379 | pop ebp |
- | |
380 | ret |
246 | |
381 | end if |
247 | |
382 | ;********************************EMBOSS DONE******************************* |
248 | ;********************************EMBOSS DONE******************************* |
383 | 249 | ||
384 | 250 | ||
385 | generate_object2: ; torus |
251 | generate_object2: ; torus |
386 | ;in ax - figure number 2=torus, 3=loop, 4=loop |
252 | ;in ax - figure number 2=torus, 3=loop, 4=loop |
387 | ;locals |
253 | ;locals |
388 | ; counter dw ? |
254 | ; counter dw ? |
389 | ; sin dd ? |
255 | ; sin dd ? |
390 | ; cos dd ? |
256 | ; cos dd ? |
391 | ;endl |
257 | ;endl |
392 | .counter equ word[ebp-2] |
258 | .counter equ word[ebp-2] |
393 | .sin equ dword[ebp-6] |
259 | .sin equ dword[ebp-6] |
394 | .cos equ dword[ebp-10] |
260 | .cos equ dword[ebp-10] |
395 | .sin2 equ dword[ebp-14] |
261 | .sin2 equ dword[ebp-14] |
396 | .cos2 equ dword[ebp-18] |
262 | .cos2 equ dword[ebp-18] |
397 | .piD180m3 equ dword[ebp-22] |
263 | .piD180m3 equ dword[ebp-22] |
398 | .cD2 equ word[ebp-24] |
264 | .cD2 equ word[ebp-24] |
399 | push ebp |
265 | push ebp |
400 | mov ebp,esp |
266 | mov ebp,esp |
401 | sub esp,24 |
267 | sub esp,24 |
402 | 268 | ||
403 | push ax |
269 | push ax |
404 | 270 | ||
405 | fninit |
271 | fninit |
406 | mov edi,[points_ptr] |
272 | mov edi,[points_ptr] |
407 | xor eax,eax |
273 | xor eax,eax |
408 | ; init seed -> 4 3d points |
274 | ; init seed -> 4 3d points |
409 | mov dword[edi],-1.0 ; x |
275 | mov dword[edi],-1.0 ; x |
410 | add edi,4 |
276 | add edi,4 |
411 | stosd ; y |
277 | stosd ; y |
412 | stosd ; z |
278 | stosd ; z |
413 | mov dword[edi],-0.9 ; x1 |
279 | mov dword[edi],-0.9 ; x1 |
414 | mov dword[edi+4],0.1 ; y1 |
280 | mov dword[edi+4],0.1 ; y1 |
415 | add edi,8 |
281 | add edi,8 |
416 | stosd ; z1 |
282 | stosd ; z1 |
417 | mov dword[edi],-0.8 |
283 | mov dword[edi],-0.8 |
418 | add edi,4 |
284 | add edi,4 |
419 | stosd |
285 | stosd |
420 | stosd |
286 | stosd |
421 | mov dword[edi],-0.9 ; x3 |
287 | mov dword[edi],-0.9 ; x3 |
422 | mov dword[edi+4],-0.1 ; y3 |
288 | mov dword[edi+4],-0.1 ; y3 |
423 | add edi,8 |
289 | add edi,8 |
424 | stosd ; z3 |
290 | stosd ; z3 |
425 | mov [points_count_var],4 |
291 | mov [points_count_var],4 |
426 | 292 | ||
427 | fld [piD180] |
293 | fld [piD180] |
428 | fidiv [i3] |
294 | fidiv [i3] |
429 | fstp .piD180m3 |
295 | fstp .piD180m3 |
430 | mov .cD2,5 |
296 | mov .cD2,5 |
431 | 297 | ||
432 | pop ax |
298 | pop ax |
433 | mov ecx,1 |
299 | mov ecx,1 |
434 | mov edx,9 |
300 | mov edx,9 |
435 | .next: ; calc angle and rotate seed 4 points |
301 | .next: ; calc angle and rotate seed 4 points |
436 | mov .counter,cx |
302 | mov .counter,cx |
437 | mov ebx,[points_ptr] |
303 | mov ebx,[points_ptr] |
438 | fld .piD180m3 |
304 | fld .piD180m3 |
439 | fimul .counter |
305 | fimul .counter |
440 | fld st |
306 | fld st |
441 | fsincos |
307 | fsincos |
442 | fstp .sin |
308 | fstp .sin |
443 | fstp .cos |
309 | fstp .cos |
444 | fadd st,st0 |
310 | fadd st,st0 |
445 | fsincos |
311 | fsincos |
446 | fstp .sin2 |
312 | fstp .sin2 |
447 | fstp .cos2 |
313 | fstp .cos2 |
448 | 314 | ||
449 | .rotor: ; next 4 |
315 | .rotor: ; next 4 |
450 | ; rotary y |
316 | ; rotary y |
451 | fld dword[ebx] ; x |
317 | fld dword[ebx] ; x |
452 | fld .sin |
318 | fld .sin |
453 | fmul dword[ebx+8] ; z * sinbeta |
319 | fmul dword[ebx+8] ; z * sinbeta |
454 | fchs |
320 | fchs |
455 | fld .cos |
321 | fld .cos |
456 | fmul dword[ebx] ; x * cosbeta |
322 | fmul dword[ebx] ; x * cosbeta |
457 | faddp |
323 | faddp |
458 | fstp dword[edi] ; new x |
324 | fstp dword[edi] ; new x |
459 | fmul .sin ; old x * sinbeta |
325 | fmul .sin ; old x * sinbeta |
460 | fld .cos |
326 | fld .cos |
461 | fmul dword[ebx+8] ; z * cosbeta |
327 | fmul dword[ebx+8] ; z * cosbeta |
462 | faddp |
328 | faddp |
463 | dec dx |
329 | dec dx |
464 | or dx,dx |
330 | or dx,dx |
465 | jnz @f |
331 | jnz @f |
466 | ; mov .counter,dx |
332 | ; mov .counter,dx |
467 | fld st |
333 | fld st |
468 | fidiv [i3] |
334 | fidiv [i3] |
469 | faddp |
335 | faddp |
470 | @@: |
336 | @@: |
471 | fstp dword[edi+8] ; new z |
337 | fstp dword[edi+8] ; new z |
472 | fld dword[ebx+4] |
338 | fld dword[ebx+4] |
473 | or dx,dx |
339 | or dx,dx |
474 | jnz @f |
340 | jnz @f |
475 | ; fld1 |
341 | ; fld1 |
476 | ; faddp |
342 | ; faddp |
477 | ; fld st |
343 | ; fld st |
478 | fadd st,st0 |
344 | fadd st,st0 |
479 | fadd st,st0 |
345 | fadd st,st0 |
480 | ; fxch |
346 | ; fxch |
481 | ; fimul [i3] |
347 | ; fimul [i3] |
482 | ; fsin |
348 | ; fsin |
483 | ; faddp |
349 | ; faddp |
484 | mov dx,9 |
350 | mov dx,9 |
485 | @@: |
351 | @@: |
486 | fstp dword[edi+4] |
352 | fstp dword[edi+4] |
487 | ; rotary x |
353 | ; rotary x |
488 | cmp al,3 |
354 | cmp al,3 |
489 | jl .end_rot |
355 | jl .end_rot |
490 | fld dword[edi+4] ;y |
356 | fld dword[edi+4] ;y |
491 | fld .sin2 |
357 | fld .sin2 |
492 | fmul dword[edi+8] ;z |
358 | fmul dword[edi+8] ;z |
493 | fld .cos2 |
359 | fld .cos2 |
494 | fmul dword[edi+4] ;y |
360 | fmul dword[edi+4] ;y |
495 | faddp |
361 | faddp |
496 | fstp dword[edi+4] ; new y |
362 | fstp dword[edi+4] ; new y |
497 | fmul .sin2 ; sinbeta * old y |
363 | fmul .sin2 ; sinbeta * old y |
498 | fchs |
364 | fchs |
499 | fld .cos2 |
365 | fld .cos2 |
500 | fmul dword[edi+8] |
366 | fmul dword[edi+8] |
501 | faddp |
367 | faddp |
502 | fstp dword[edi+8] |
368 | fstp dword[edi+8] |
503 | ; rotary z |
369 | ; rotary z |
504 | cmp al,4 |
370 | cmp al,4 |
505 | jl .end_rot |
371 | jl .end_rot |
506 | fld dword[edi] ;x |
372 | fld dword[edi] ;x |
507 | fld .sin |
373 | fld .sin |
508 | fmul dword[edi+4] ;y |
374 | fmul dword[edi+4] ;y |
509 | fld .cos |
375 | fld .cos |
510 | fmul dword[edi] ;x |
376 | fmul dword[edi] ;x |
511 | faddp |
377 | faddp |
512 | fstp dword[edi] ;new x |
378 | fstp dword[edi] ;new x |
513 | fmul .sin ; sinbeta * old x |
379 | fmul .sin ; sinbeta * old x |
514 | fchs |
380 | fchs |
515 | fld .cos |
381 | fld .cos |
516 | fmul dword[edi+4] ; cosbeta * y |
382 | fmul dword[edi+4] ; cosbeta * y |
517 | faddp |
383 | faddp |
518 | fstp dword[edi+4] ; new y |
384 | fstp dword[edi+4] ; new y |
519 | 385 | ||
520 | 386 | ||
521 | 387 | ||
522 | .end_rot: |
388 | .end_rot: |
523 | 389 | ||
524 | add edi,12 |
390 | add edi,12 |
525 | add ebx,12 |
391 | add ebx,12 |
526 | mov esi,[points_ptr] |
392 | mov esi,[points_ptr] |
527 | add esi,12*4 |
393 | add esi,12*4 |
528 | cmp ebx,esi |
394 | cmp ebx,esi |
529 | jl .rotor |
395 | jl .rotor |
530 | 396 | ||
531 | add [points_count_var],4 |
397 | add [points_count_var],4 |
532 | add cx,18 |
398 | add cx,18 |
533 | cmp cx,(18*21*3)+1 |
399 | cmp cx,(18*21*3)+1 |
534 | jle .next |
400 | jle .next |
535 | 401 | ||
536 | mov edi,[triangles_ptr] |
402 | mov edi,[triangles_ptr] |
537 | mov eax,4 |
403 | mov eax,4 |
538 | mov ebx,4+4 |
404 | mov ebx,4+4 |
539 | mov [triangles_count_var],160*3 ;164*3 ;140 |
405 | mov [triangles_count_var],160*3 ;164*3 ;140 |
540 | 406 | ||
541 | mov ecx,80*3 ;68 |
407 | mov ecx,80*3 ;68 |
542 | @@: |
408 | @@: |
543 | stosd ;---- |
409 | stosd ;---- |
544 | mov [edi],ebx ; | |
410 | mov [edi],ebx ; | |
545 | add edi,4 ; | |
411 | add edi,4 ; | |
546 | inc eax ; | |
412 | inc eax ; | |
547 | stosd ; |repeat 4 times |
413 | stosd ; |repeat 4 times |
548 | 414 | ||
549 | mov [edi],ebx ; | |
415 | mov [edi],ebx ; | |
550 | inc ebx |
416 | inc ebx |
551 | add edi,4 |
417 | add edi,4 |
552 | stosd ; | |
418 | stosd ; | |
553 | mov [edi],ebx ; | |
419 | mov [edi],ebx ; | |
554 | add edi,4 ;---- |
420 | add edi,4 ;---- |
555 | loop @b |
421 | loop @b |
556 | 422 | ||
557 | 423 | ||
558 | mov dword[edi],-1 ; < - end mark |
424 | mov dword[edi],-1 ; < - end mark |
559 | mov [culling_flag],0 |
425 | mov [culling_flag],0 |
560 | 426 | ||
561 | mov esp,ebp |
427 | mov esp,ebp |
562 | pop ebp |
428 | pop ebp |
563 | 429 | ||
564 | ret |
430 | ret |
565 | generate_object3: ; heart |
431 | generate_object3: ; heart |
566 | ;locals |
432 | ;locals |
567 | ; counter dw ? |
433 | ; counter dw ? |
568 | ; sin dd ? |
434 | ; sin dd ? |
569 | ; cos dd ? |
435 | ; cos dd ? |
570 | ;endl |
436 | ;endl |
571 | .counter equ word[ebp-2] |
437 | .counter equ word[ebp-2] |
572 | .sin equ dword[ebp-6] |
438 | .sin equ dword[ebp-6] |
573 | .cos equ dword[ebp-10] |
439 | .cos equ dword[ebp-10] |
574 | .sin2 equ dword[ebp-14] |
440 | .sin2 equ dword[ebp-14] |
575 | .cos2 equ dword[ebp-18] |
441 | .cos2 equ dword[ebp-18] |
576 | .piD180m3 equ dword[ebp-22] |
442 | .piD180m3 equ dword[ebp-22] |
577 | .cD2 equ word[ebp-24] |
443 | .cD2 equ word[ebp-24] |
578 | push ebp |
444 | push ebp |
579 | mov ebp,esp |
445 | mov ebp,esp |
580 | sub esp,24 |
446 | sub esp,24 |
581 | 447 | ||
582 | fninit |
448 | fninit |
583 | mov edi,[points_ptr] |
449 | mov edi,[points_ptr] |
584 | xor eax,eax |
450 | xor eax,eax |
585 | ; init seed -> eight 3d points |
451 | ; init seed -> eight 3d points |
586 | mov dword[edi],2.0 |
452 | mov dword[edi],2.0 |
587 | add edi,4 |
453 | add edi,4 |
588 | stosd |
454 | stosd |
589 | stosd |
455 | stosd |
590 | 456 | ||
591 | mov dword[edi],2.0 |
457 | mov dword[edi],2.0 |
592 | mov dword[edi+4],-0.5 |
458 | mov dword[edi+4],-0.5 |
593 | add edi,8 |
459 | add edi,8 |
594 | stosd |
460 | stosd |
595 | 461 | ||
596 | mov dword[edi],1.5 |
462 | mov dword[edi],1.5 |
597 | mov dword[edi+4],-1.5 |
463 | mov dword[edi+4],-1.5 |
598 | add edi,8 |
464 | add edi,8 |
599 | stosd |
465 | stosd |
600 | mov dword[edi],1.0 |
466 | mov dword[edi],1.0 |
601 | mov dword[edi+4],-2.0 |
467 | mov dword[edi+4],-2.0 |
602 | add edi,8 |
468 | add edi,8 |
603 | stosd |
469 | stosd |
604 | 470 | ||
605 | stosd |
471 | stosd |
606 | mov dword[edi],-2.5 |
472 | mov dword[edi],-2.5 |
607 | add edi,4 |
473 | add edi,4 |
608 | stosd |
474 | stosd |
609 | 475 | ||
610 | mov [points_count_var],5 |
476 | mov [points_count_var],5 |
611 | 477 | ||
612 | mov ecx,1 |
478 | mov ecx,1 |
613 | .next: ; calc angle and rotate seed 4 points |
479 | .next: ; calc angle and rotate seed 4 points |
614 | mov .counter,cx |
480 | mov .counter,cx |
615 | mov ebx,[points_ptr] |
481 | mov ebx,[points_ptr] |
616 | fld [piD180] |
482 | fld [piD180] |
617 | fimul .counter |
483 | fimul .counter |
618 | fsincos |
484 | fsincos |
619 | fstp .sin |
485 | fstp .sin |
620 | fstp .cos |
486 | fstp .cos |
621 | 487 | ||
622 | .rotor: ; next 4 |
488 | .rotor: ; next 4 |
623 | ; rotary y |
489 | ; rotary y |
624 | fld dword[ebx] ; x |
490 | fld dword[ebx] ; x |
625 | fld .sin |
491 | fld .sin |
626 | fmul dword[ebx+8] ; z * sinbeta |
492 | fmul dword[ebx+8] ; z * sinbeta |
627 | fchs |
493 | fchs |
628 | fld .cos |
494 | fld .cos |
629 | fmul dword[ebx] ; x * cosbeta |
495 | fmul dword[ebx] ; x * cosbeta |
630 | faddp |
496 | faddp |
631 | fidiv [i3] |
497 | fidiv [i3] |
632 | fstp dword[edi] ; new x |
498 | fstp dword[edi] ; new x |
633 | fmul .sin ; old x * sinbeta |
499 | fmul .sin ; old x * sinbeta |
634 | fld .cos |
500 | fld .cos |
635 | fmul dword[ebx+8] ; z * cosbeta |
501 | fmul dword[ebx+8] ; z * cosbeta |
636 | faddp |
502 | faddp |
637 | fstp dword[edi+8] ; new z |
503 | fstp dword[edi+8] ; new z |
638 | 504 | ||
639 | fld dword[ebx+4] ;y |
505 | fld dword[ebx+4] ;y |
640 | fstp dword[edi+4] |
506 | fstp dword[edi+4] |
641 | 507 | ||
642 | 508 | ||
643 | .end_rot: |
509 | .end_rot: |
644 | 510 | ||
645 | add edi,12 |
511 | add edi,12 |
646 | add ebx,12 |
512 | add ebx,12 |
647 | mov esi,[points_ptr] |
513 | mov esi,[points_ptr] |
648 | add esi,12*5 |
514 | add esi,12*5 |
649 | cmp ebx,esi ;real_points + (12*5) |
515 | cmp ebx,esi ;real_points + (12*5) |
650 | jl .rotor |
516 | jl .rotor |
651 | 517 | ||
652 | add [points_count_var],5 |
518 | add [points_count_var],5 |
653 | add cx,18 |
519 | add cx,18 |
654 | cmp cx,(18*21)+1 |
520 | cmp cx,(18*21)+1 |
655 | jle .next |
521 | jle .next |
656 | ;last points |
522 | ;last points |
657 | 523 | ||
658 | xor eax,eax |
524 | xor eax,eax |
659 | 525 | ||
660 | mov dword[edi],0.22 |
526 | mov dword[edi],0.22 |
661 | mov dword[edi+4],0.77 |
527 | mov dword[edi+4],0.77 |
662 | mov dword[edi+8],1.25 |
528 | mov dword[edi+8],1.25 |
663 | add edi,12 |
529 | add edi,12 |
664 | 530 | ||
665 | mov dword[edi],0.22 |
531 | mov dword[edi],0.22 |
666 | mov dword[edi+4],0.77 |
532 | mov dword[edi+4],0.77 |
667 | mov dword[edi+8],-1.25 |
533 | mov dword[edi+8],-1.25 |
668 | add edi,12 |
534 | add edi,12 |
669 | stosd |
535 | stosd |
670 | 536 | ||
671 | add [points_count_var],2 |
537 | add [points_count_var],2 |
672 | 538 | ||
673 | ; init triangles list |
539 | ; init triangles list |
674 | 540 | ||
675 | mov edi,[triangles_ptr] |
541 | mov edi,[triangles_ptr] |
676 | mov eax,5 |
542 | mov eax,5 |
677 | mov ebx,5+5 |
543 | mov ebx,5+5 |
678 | mov [triangles_count_var],200 ;204 |
544 | mov [triangles_count_var],200 ;204 |
679 | 545 | ||
680 | mov ecx,100 |
546 | mov ecx,100 |
681 | @@: |
547 | @@: |
682 | stosd ;---- |
548 | stosd ;---- |
683 | mov [edi],ebx ; | |
549 | mov [edi],ebx ; | |
684 | add edi,4 ; | |
550 | add edi,4 ; | |
685 | inc eax ; | |
551 | inc eax ; | |
686 | stosd ; |repeat |
552 | stosd ; |repeat |
687 | 553 | ||
688 | mov [edi],ebx ; | |
554 | mov [edi],ebx ; | |
689 | inc ebx |
555 | inc ebx |
690 | add edi,4 |
556 | add edi,4 |
691 | stosd ; | |
557 | stosd ; | |
692 | mov [edi],ebx ; | |
558 | mov [edi],ebx ; | |
693 | add edi,4 ;---- |
559 | add edi,4 ;---- |
694 | loop @b |
560 | loop @b |
695 | 561 | ||
696 | mov eax,5 |
562 | mov eax,5 |
697 | mov ebx,[points_count_var] |
563 | mov ebx,[points_count_var] |
698 | sub ebx,2 |
564 | sub ebx,2 |
699 | mov dl,2 |
565 | mov dl,2 |
700 | .nx: |
566 | .nx: |
701 | mov ecx,5 |
567 | mov ecx,5 |
702 | add [triangles_count_var],ecx |
568 | add [triangles_count_var],ecx |
703 | @@: |
569 | @@: |
704 | stosd |
570 | stosd |
705 | add eax,5 |
571 | add eax,5 |
706 | stosd |
572 | stosd |
707 | mov dword[edi],ebx |
573 | mov dword[edi],ebx |
708 | add edi,4 |
574 | add edi,4 |
709 | loop @b |
575 | loop @b |
710 | 576 | ||
711 | cmp dl,1 |
577 | cmp dl,1 |
712 | je @f |
578 | je @f |
713 | 579 | ||
714 | inc ebx |
580 | inc ebx |
715 | jmp .lab |
581 | jmp .lab |
716 | @@: |
582 | @@: |
717 | dec ebx |
583 | dec ebx |
718 | .lab: |
584 | .lab: |
719 | mov ecx,5 |
585 | mov ecx,5 |
720 | add [triangles_count_var],ecx |
586 | add [triangles_count_var],ecx |
721 | @@: |
587 | @@: |
722 | stosd |
588 | stosd |
723 | add eax,5 |
589 | add eax,5 |
724 | stosd |
590 | stosd |
725 | mov dword[edi],ebx |
591 | mov dword[edi],ebx |
726 | add edi,4 |
592 | add edi,4 |
727 | loop @b |
593 | loop @b |
728 | 594 | ||
729 | dec dl |
595 | dec dl |
730 | or dl,dl |
596 | or dl,dl |
731 | jnz .nx |
597 | jnz .nx |
732 | 598 | ||
733 | sub eax,25 |
599 | sub eax,25 |
734 | stosd |
600 | stosd |
735 | sub eax,50 |
601 | sub eax,50 |
736 | stosd |
602 | stosd |
737 | mov dword[edi],ebx |
603 | mov dword[edi],ebx |
738 | add edi,4 |
604 | add edi,4 |
739 | 605 | ||
740 | stosd |
606 | stosd |
741 | add eax,50 |
607 | add eax,50 |
742 | stosd |
608 | stosd |
743 | inc ebx |
609 | inc ebx |
744 | mov dword[edi],ebx |
610 | mov dword[edi],ebx |
745 | add edi,4 |
611 | add edi,4 |
746 | add [triangles_count_var],2 |
612 | add [triangles_count_var],2 |
747 | 613 | ||
748 | mov dword[edi],-1 ; < - end mark |
614 | mov dword[edi],-1 ; < - end mark |
749 | mov [culling_flag],0 |
615 | mov [culling_flag],0 |
750 | 616 | ||
751 | mov esp,ebp |
617 | mov esp,ebp |
752 | pop ebp |
618 | pop ebp |
753 | 619 | ||
754 | ret>> |
620 | ret>> |