280,12 → 280,12 |
xor ebx,ebx ; ebx - x,y,z coord in real_points list |
.next_c: ; max/min/center x,y,z |
mov edi,[points_ptr] ; in real_point list minimum two points |
mov dx,[points_count_var] |
mov edx,[points_count_var] |
fld dword[edi+ebx] |
fst .max |
fstp .min |
add edi,12 |
dec dx |
dec edx |
.next_coord: ; next coord from real_points list |
fld dword [edi+ebx] ; real_points -> x,y,z |
fcom .max ; max_x,y,z |
305,7 → 305,7 |
.end_coords: |
add edi,12 |
; cmp dword[edi],-1 ; cmp with end mark |
dec dx |
dec edx |
jnz .next_coord |
; ok after this we found max_coord and min_coord |
fld .max ; find center point |
326,7 → 326,7 |
@@: |
ffree st |
mov edi,[points_ptr] |
mov dx,[points_count_var] ; substraction all coords - center point |
mov edx,[points_count_var] ; substraction all coords - center point |
@@: |
fld dword[edi+ebx] |
fsub .center |
334,7 → 334,7 |
add edi,12 |
; cmp dword[edi],-1 |
; jne @b |
dec dx |
dec edx |
jnz @b |
|
add ebx,4 ; ebx - x,y,z cooficientes in list real_points |
343,7 → 343,7 |
|
fld .maxxx |
mov edi,[points_ptr] ; create all coords in <-1.0,1.0> |
movzx ecx,[points_count_var] |
mov ecx,[points_count_var] |
@@: |
fld dword[edi] |
fdiv .maxxx |
405,78 → 405,78 |
;init triangles list |
mov edi,[triangles_ptr] |
|
xor si,si |
xor ax,ax |
mov bx,.N+1 |
mov cx,(.N*2)+2 ;-- |
mov dx,(.N*3)+3 ;--- |
xor esi,esi |
xor eax,eax |
mov ebx,.N+1 |
mov ecx,(.N*2)+2 ;-- |
mov edx,(.N*3)+3 ;--- |
mov [triangles_count_var],0 |
.again_tri: |
stosw ; main wave |
mov word[edi],bx |
inc ax |
add edi,2 |
stosw |
stosw |
mov word[edi],bx |
inc bx |
mov word[edi+2],bx |
stosd ; main wave |
mov dword[edi],ebx |
inc eax |
add edi,4 |
stosd |
stosd |
mov dword[edi],ebx |
inc ebx |
mov dword[edi+4],ebx |
|
|
add edi,4 |
add edi,8 |
|
mov word[edi],cx ;---- ; n2+2 ; xor ax,ax |
inc cx ; n2+3 ; mov bx,.N+1 |
mov word[edi+2],dx ; ; mov cx,(.N*2)+2 ;-- |
mov word[edi+4],cx ; n3+3 ; mov dx,(.N*3)+3 ;--- |
mov word[edi+6],dx ; n3+3 ; |
inc dx ; ; |
mov word[edi+8],dx ; n2+3 ; |
mov word[edi+10],cx ; n3+4 |
add edi,12 ;---- |
mov dword[edi],ecx ;---- ; n2+2 ; xor ax,ax |
inc ecx ; n2+3 ; mov bx,.N+1 |
mov dword[edi+4],edx ; ; mov cx,(.N*2)+2 ;-- |
mov dword[edi+8],ecx ; n3+3 ; mov dx,(.N*3)+3 ;--- |
mov dword[edi+12],edx ; n3+3 ; |
inc edx ; ; |
mov dword[edi+16],edx ; n2+3 ; |
mov dword[edi+20],ecx ; n3+4 |
add edi,24 ;---- |
|
dec ax ; border of wave |
dec bx |
dec cx |
dec dx |
dec eax ; border of wave |
dec ebx |
dec ecx |
dec edx |
|
stosw ; first border |
inc ax |
stosw |
mov word[edi],dx |
add edi,2 |
stosd ; first border |
inc eax |
stosd |
mov dword[edi],edx |
add edi,4 |
|
mov word[edi],dx |
add edi,2 |
stosw |
inc dx |
mov word[edi],dx |
mov dword[edi],edx |
add edi,4 |
stosd |
inc edx |
mov dword[edi],edx |
|
mov word[edi+2],bx ; second border |
mov word[edi+4],cx |
inc bx |
mov word[edi+6],bx |
mov dword[edi+4],ebx ; second border |
mov dword[edi+8],ecx |
inc ebx |
mov dword[edi+12],ebx |
|
mov word[edi+8],bx |
mov word[edi+10],cx |
inc cx |
mov word[edi+12],cx |
add edi,14 |
mov dword[edi+16],ebx |
mov dword[edi+20],ecx |
inc ecx |
mov dword[edi+24],ecx |
add edi,28 |
|
add [triangles_count_var],8 ;10 |
inc si |
cmp si,.N |
inc esi |
cmp esi,.N |
jne .again_tri |
|
add ax,((.N+1)*3)+1 |
add bx,((.N+1)*3)+1 |
add cx,((.N+1)*3)+1 |
add dx,((.N+1)*3)+1 |
xor si,si |
cmp ax,(.N*13)+13 ;;;(.N*23)+23 ; ax,(.N*13)+13 |
add eax,((.N+1)*3)+1 |
add ebx,((.N+1)*3)+1 |
add ecx,((.N+1)*3)+1 |
add edx,((.N+1)*3)+1 |
xor esi,esi |
cmp eax,(.N*13)+13 ;;;(.N*23)+23 ; ax,(.N*13)+13 |
jl .again_tri |
|
mov dword[edi],-1 ; <--- end mark not always in use |
; mov dword[edi],-1 ; <--- end mark not always in use |
|
; init real points list |
mov .x,-(.N/2) |
824,11 → 824,8 |
; mov ecx,(SIZE_X*(SIZE_Y-3))*3/8 |
.blr: |
@@: |
push ecx |
mov ecx,edi |
sub ecx,ebx |
movq mm0,[edi+ebx] |
movq mm1,[ecx] |
movq mm1,[edi-ebx] |
movq mm2,[edi-3] |
movq mm3,[edi+3] |
|
841,7 → 838,7 |
movq [edi],mm0 |
add edi,8 |
add esi,8 |
pop ecx |
|
loop .blr |
|
xor eax,eax |
995,7 → 992,7 |
mov edi,[points_ptr] ; one real point - triple float |
mov esi,[points_normals_ptr] ; one 3dvector - triple float dword x,y,z |
fninit |
movzx ecx,[points_count_var] |
mov ecx,[points_count_var] |
|
cmp ah,11 |
je @f |
1044,7 → 1041,7 |
mov edi,[points_ptr] ; one real point - triple float |
mov esi,[points_normals_ptr] ; one 3dvector - triple float dword x,y,z |
fninit ; exchange both points and normal vactors coords/coofics |
movzx ecx,[points_count_var] |
mov ecx,[points_count_var] |
|
cmp [xchg_flag],1 |
je @f |