Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 8665 → Rev 8666

/programs/demos/3DS/README.TXT
File deleted
/programs/demos/3DS/GRD_TEX.INC
File deleted
/programs/demos/3DS/DATA.INC
File deleted
/programs/demos/3DS/3STENCIL.INC
File deleted
/programs/demos/3DS/TEX_CAT.INC
File deleted
/programs/demos/3DS/Tupfile.lua
File deleted
/programs/demos/3DS/History.txt
File deleted
\ No newline at end of file
/programs/demos/3DS/GRD_CAT.INC
File deleted
/programs/demos/3DS/GRD_LINE.INC
File deleted
/programs/demos/3DS/3R_PHG.INC
File deleted
/programs/demos/3DS/3GLASS.INC
File deleted
/programs/demos/3DS/3DMATH.INC
File deleted
/programs/demos/3DS/TWO_TEX.INC
File deleted
/programs/demos/3DS/VIEW3DS.ASM
File deleted
/programs/demos/3DS/FLAT_CAT.INC
File deleted
/programs/demos/3DS/A_PROCS.INC
File deleted
/programs/demos/3DS/B_PROCS.INC
File deleted
\ No newline at end of file
/programs/demos/3DS/BUMP_CAT.INC
File deleted
/programs/demos/3DS/ASC.INC
File deleted
\ No newline at end of file
/programs/demos/3DS/BUMP_TEX.INC
File deleted
/programs/demos/3DS/build.bat
File deleted
\ No newline at end of file
/programs/demos/3DS/3ds_objects/iron.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/teapot.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/knot.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/ZS_Mouth.3DS
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/opacity2.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/face.3DS
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/second-A.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/ZS_Sword.3DS
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/sink.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/UV_Cyl.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/hrt.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/surf32.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/torus0.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/fighter.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/House.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/cube.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/knight.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/shield1.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/cone.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/ZS_Pos3.3DS
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/3ds_objects/03.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/demos/3DS/asc_objects/AR2.ASC
File deleted
/programs/demos/3DS/asc_objects/box.asc
File deleted
/programs/demos/3DS/asc_objects/PALLERO.ASC
File deleted
/programs/demos/3DS/asc_objects/ARCEE.ASC
File deleted
/programs/demos/3DS/asc_objects/2TORUS.ASC
File deleted
/programs/demos/3DS/asc_objects/3TORUS.ASC
File deleted
/programs/demos/3DS/asc_objects/TOORUS.ASC
File deleted
/programs/demos/view3ds/3dmath.inc
0,0 → 1,592
x3d equ 0
y3d equ 2
z3d equ 4
vec_x equ 0
vec_y equ 4
vec_z equ 8
; 3d point - triple integer word coordinate
; vector - triple float dword coordinate
;----------------------in: --------------------------------
;------------------------ esi - pointer to 1st 3d point ---
;------------------------ edi - pointer to 2nd 3d point ---
;------------------------ ebx - pointer to result vector --
;---------------------- out : none ------------------------
reverse_mx_3x3:
; esi - source matrix
; edi - desired reversed matrix
 
push ebp
mov ebp,esp
sub esp,4
.det equ ebp-4
 
fninit
fld dword[esi]
fmul dword[esi+16]
fmul dword[esi+32]
fld dword[esi+12]
fmul dword[esi+28]
fmul dword[esi+8]
faddp
fld dword[esi+24]
fmul dword[esi+4]
fmul dword[esi+20]
faddp
fld dword[esi]
fmul dword[esi+28]
fmul dword[esi+20]
fchs
faddp
fld dword[esi+24]
fmul dword[esi+16]
fmul dword[esi+8]
fchs
faddp
fld dword[esi+12]
fmul dword[esi+4]
fmul dword[esi+32]
fchs
faddp
fstp dword[.det]
cmp dword[.det],0
jne @f
int3
@@:
; fld1
; fdiv dword[.det]
; fstp dword[.det]
 
fld dword[esi+16]
fmul dword[esi+32]
fld dword[esi+20]
fmul dword[esi+28]
fchs
faddp
fdiv dword[.det]
fstp dword[edi]
 
fld dword[esi+8]
fmul dword[esi+28]
fld dword[esi+4]
fmul dword[esi+32]
fchs
faddp
fdiv dword[.det]
fstp dword[edi+4]
 
fld dword[esi+4]
fmul dword[esi+20]
fld dword[esi+8]
fmul dword[esi+16]
fchs
faddp
fdiv dword[.det]
fstp dword[edi+8]
 
fld dword[esi+20]
fmul dword[esi+24]
fld dword[esi+12]
fmul dword[esi+32]
fchs
faddp
fdiv dword[.det]
fstp dword[edi+12]
 
fld dword[esi]
fmul dword[esi+32]
fld dword[esi+8]
fmul dword[esi+24]
fchs
faddp
fdiv dword[.det]
fstp dword[edi+16]
 
fld dword[esi+8]
fmul dword[esi+12]
fld dword[esi]
fmul dword[esi+20]
fchs
faddp
fdiv dword[.det]
fstp dword[edi+20]
 
fld dword[esi+12]
fmul dword[esi+28]
fld dword[esi+16]
fmul dword[esi+24]
fchs
faddp
fdiv dword[.det]
fstp dword[edi+24]
 
fld dword[esi+4]
fmul dword[esi+24]
fld dword[esi]
fmul dword[esi+28]
fchs
faddp
fdiv dword[.det]
fstp dword[edi+28]
 
fld dword[esi]
fmul dword[esi+16]
fld dword[esi+4]
fmul dword[esi+12]
fchs
faddp
fdiv dword[.det]
fstp dword[edi+32]
 
 
mov esp,ebp
pop ebp
ret
 
make_vector_r:
if Ext < SSE2
fninit
fld dword[edi] ;edi+x3d
fsub dword[esi] ;esi+x3d
fstp dword[ebx+vec_x]
 
fld dword[edi+4]
fsub dword[esi+4]
fstp dword[ebx+vec_y]
 
fld dword[edi+8]
fsub dword[esi+8]
fstp dword[ebx+vec_z]
else
movups xmm0,[esi]
movups xmm1,[edi]
subps xmm1,xmm0
movlps [ebx],xmm1
movhlps xmm1,xmm1
movss [ebx+8],xmm1
end if
 
ret
;---------------------- in: -------------------------------
;--------------------------- esi - pointer to 1st vector --
;--------------------------- edi - pointer to 2nd vector --
;--------------------------- ebx - pointer to result vector
;---------------------- out : none
cross_product:
fninit
fld dword [esi+vec_y]
fmul dword [edi+vec_z]
fld dword [esi+vec_z]
fmul dword [edi+vec_y]
fsubp ;st1 ,st
fstp dword [ebx+vec_x]
 
fld dword [esi+vec_z]
fmul dword [edi+vec_x]
fld dword [esi+vec_x]
fmul dword [edi+vec_z]
fsubp ;st1 ,st
fstp dword [ebx+vec_y]
 
fld dword [esi+vec_x]
fmul dword [edi+vec_y]
fld dword [esi+vec_y]
fmul dword [edi+vec_x]
fsubp ;st1 ,st
fstp dword [ebx+vec_z]
ret
;----------------------- in: ------------------------------
;---------------------------- edi - pointer to vector -----
;----------------------- out : none
normalize_vector:
if Ext = SSE2 | Ext = SSE | Ext = SSE3
movups xmm0,[edi]
andps xmm0,[zero_hgst_dd]
movups xmm1,xmm0
mulps xmm0,xmm0
movhlps xmm2,xmm0
addps xmm0,xmm2
movaps xmm2,xmm0
shufps xmm2,xmm2,11100001b
addps xmm0,xmm2
shufps xmm0,xmm0,0
rsqrtps xmm0,xmm0
mulps xmm0,xmm1
movlps [edi],xmm0
movhlps xmm0,xmm0
movss [edi+8],xmm0
end if
if 0 ; Ext >= SSE3
movups xmm0,[edi]
andps xmm0,[zero_hgst_dd]
movups xmm1,xmm0
mulps xmm0,xmm0
haddps xmm0,xmm0
haddps xmm0,xmm0
rsqrtps xmm0,xmm0
mulps xmm0,xmm1
movlps [edi],xmm0
movhlps xmm0,xmm0
movss [edi+8],xmm0
end if
if Ext < SSE
 
fninit
fld dword [edi+vec_x]
fmul st, st
fld dword [edi+vec_y]
fmul st, st
fld dword [edi+vec_z]
fmul st, st
faddp st1, st
faddp st1, st
fsqrt
 
ftst
fstsw ax
sahf
jnz @f
 
fst dword [edi+vec_x]
fst dword [edi+vec_y]
fstp dword [edi+vec_z]
ret
@@:
fld st
fld st
fdivr dword [edi+vec_x]
fstp dword [edi+vec_x]
fdivr dword [edi+vec_y]
fstp dword [edi+vec_y]
fdivr dword [edi+vec_z]
fstp dword [edi+vec_z]
end if
ret
;------------------in: -------------------------
;------------------ esi - pointer to 1st vector
;------------------ edi - pointer to 2nd vector
;------------------out: ------------------------
;------------------ st0 - dot-product
dot_product:
fninit
;if Ext >=SSE3
; movups xmm0,[esi]
; movups xmm1,[edi]
; andps xmm0,[zero_hgst_dd]
; mulps xmm0,xmm1
; haddps xmm0,xmm0
; haddps xmm0,xmm0
; movss [esp-4],xmm0
; fld dword[esp-4]
;else
fld dword [esi+vec_x]
fmul dword [edi+vec_x]
fld dword [esi+vec_y]
fmul dword [edi+vec_y]
fld dword [esi+vec_z]
fmul dword [edi+vec_z]
faddp
faddp
;end if
ret
 
; DOS version Coded by Mikolaj Felix aka Majuma
; mfelix@polbox.com
; www.majuma.xt.pl
; into FASM translation by Macgub
init_sincos_tab:
.counter equ dword [ebp-4] ; cur angle
 
push ebp
mov ebp,esp
 
xor eax,eax
push eax ; init .counter
mov edi,cos_tab
mov esi,sin_tab
mov ecx,256
fninit
 
fld .counter
@@:
fld st
fsincos
fstp dword [edi]
fstp dword [esi]
; fadd [piD180]
fadd [piD128]
add esi,4
add edi,4
loop @b
ffree st
 
mov esp,ebp
pop ebp
ret
;------
; esi - offset (pointer) to angles, edi offset to 3x3 matrix
make_rotation_matrix:
.sinx equ dword[ebp-4]
.cosx equ dword[ebp-8]
.siny equ dword[ebp-12]
.cosy equ dword[ebp-16]
.sinz equ dword[ebp-20]
.cosz equ dword[ebp-24]
push ebp
mov ebp,esp
sub esp,24
 
movzx ebx,word[esi]
shl ebx,2
mov eax,dword[sin_tab+ebx]
mov .sinx,eax
mov edx,dword[cos_tab+ebx]
mov .cosx,edx
 
movzx ebx,word[esi+2]
shl ebx,2
mov eax,dword[sin_tab+ebx]
mov .siny,eax
mov edx,dword[cos_tab+ebx]
mov .cosy,edx
 
movzx ebx,word[esi+4]
shl ebx,2
mov eax,dword[sin_tab+ebx]
mov .sinz,eax
mov edx,dword[cos_tab+ebx]
mov .cosz,edx
 
fninit
fld .cosy
fmul .cosz
fstp dword[edi]
 
fld .sinx
fmul .siny
fmul .cosz
fld .cosx
fmul .sinz
fchs
faddp
fstp dword[edi+12]
 
fld .cosx
fmul .siny
fmul .cosz
fld .sinx
fmul .sinz
faddp
fstp dword[edi+24]
 
fld .cosy
fmul .sinz
fstp dword[edi+4]
 
fld .sinx
fmul .siny
fmul .sinz
fld .cosx
fmul .cosz
faddp
fstp dword[edi+16]
 
fld .cosx
fmul .siny
fmul .sinz
fld .sinx
fchs
fmul .cosz
faddp
fstp dword[edi+28]
 
fld .siny
fchs
fstp dword[edi+8]
 
fld .cosy
fmul .sinx
fstp dword[edi+20]
 
fld .cosx
fmul .cosy
fstp dword[edi+32]
 
mov esp,ebp
pop ebp
ret
;---------------------
; in: esi - ptr to points(normals], each point(normal) coeficient as dword
; edi - ptr to rotated points(normals)
; ebx - ptr to 3x3 (9 dwords, 36 bytes) rotation matrix
; ecx - number of points(normals)
rotary:
if Ext<SSE
fninit
.again:
 
fld dword[esi]
fmul dword[ebx]
fld dword[esi+4]
fmul dword[ebx+12]
faddp
fld dword[esi+8]
fmul dword[ebx+24]
faddp
fstp dword[edi]
 
 
fld dword[esi+4]
fmul dword[ebx+16]
fld dword[esi]
fmul dword[ebx+4]
faddp
fld dword[esi+8]
fmul dword[ebx+28]
faddp
fstp dword[edi+4]
 
 
fld dword[esi+8]
fmul dword[ebx+32]
fld dword[esi]
fmul dword[ebx+8]
fld dword[esi+4]
fmul dword[ebx+20]
faddp
faddp
fstp dword[edi+8]
 
 
add esi,12
add edi,12
loop .again
mov [edi],dword -1
else
; Copyright (C) 1999-2001 Brian Paul
; Copyright (C) Maciej Guba
;---------------------
; in: esi - ptr to points(normals], each point(normal) coeficient as dword
; edi - ptr to rotated points(normals)
; ebx - ptr to 3x3 (9 dwords, 36 bytes) rotation matrix
; ecx - number of points(normals)
;align 32
movups xmm4,[ebx]
; lddqu xmm4,[ebx] ; I tried sse3 :D
movups xmm5,[ebx+12]
movups xmm6,[ebx+24]
;align 32
.again:
movss xmm0,dword[esi]
shufps xmm0,xmm0,0
mulps xmm0,xmm4
 
movss xmm1,dword[esi+4]
shufps xmm1,xmm1,0
mulps xmm1,xmm5
 
movss xmm2,dword[esi+8]
shufps xmm2,xmm2,0
mulps xmm2,xmm6
 
addps xmm0,xmm1
addps xmm0,xmm2
 
movups [edi],xmm0
 
add esi,12
add edi,12
dec ecx
jne .again
mov [edi],dword -1
end if
ret
;----------------------------------------------
; esi - pointer to 3x3 matrix
add_scale_to_matrix:
fninit
fld [rsscale]
fld dword[esi] ;-----
fmul st,st1
fstp dword[esi]
fld dword[esi+12] ; x scale
fmul st,st1
fstp dword[esi+12]
fld dword[esi+24]
fmul st,st1
fstp dword[esi+24] ;------
 
fld dword[esi+4] ;-----
fmul st,st1
fstp dword[esi+4]
fld dword[esi+16] ; y scale
fmul st,st1
fstp dword[esi+16]
fld dword[esi+28]
fmul st,st1
fstp dword[esi+28] ;------
 
 
fld dword[esi+8] ;-----
fmul st,st1
fstp dword[esi+8]
fld dword[esi+20] ; z scale
fmul st,st1
fstp dword[esi+20]
fld dword[esi+32]
fmulp st1,st
fstp dword[esi+32] ;------
 
ret
 
;in esi - offset to 3d points (point as 3 dwords float)
; edi - offset to 2d points ( as 3 words integer)
; ecx - number of points
translate_points: ; just convert into integer; z coord still needed
fninit
.again:
if 0
fld dword[esi+8]
; fmul [rsscale]
fist word[edi+4]
 
fisub [zobs]
fchs
 
fld dword[esi]
; fmul [rsscale]
fisub [xobs]
fimul [zobs]
fdiv st0,st1
 
fiadd [xobs]
fiadd [vect_x]
fistp word[edi]
 
fld dword[esi+4]
; fmul [rsscale]
fisub [yobs]
fimul [zobs]
fdivrp ; st0,st1
 
fiadd [yobs]
fiadd [vect_y]
fistp word[edi+2]
end if
; movups xmm0,[esi]
; cvtps2dq xmm0,xmm0
; packsdw xmm0,xmm0
; movq [edi]
fld dword[esi]
fiadd [vect_x]
fistp word[edi]
fld dword[esi+4]
fiadd [vect_y]
fistp word[edi+2]
fld dword[esi+8]
fistp word[edi+4]
add esi,12
add edi,6
dec ecx
jnz .again
 
ret
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/03.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/House.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/UV_Cyl.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/ZS_Mouth.3DS
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/ZS_Pos3.3DS
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/ZS_Sword.3DS
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/cone.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/cube.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/face.3DS
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/fighter.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/hrt.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/iron.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/knight.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/knot.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/opacity2.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/second-A.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/shield1.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/sink.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/surf32.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/teapot.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3ds_objects/torus0.3ds
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/demos/view3ds/3glass.inc
0,0 → 1,543
; Glass like rendering triangle by Maciej Guba.
; http://macgub.hekko.pl, macgub3@wp.pl
 
ROUND2 equ 10
glass_tri:
;----procedure render glass like triangle with z coord --
;----interpolation ( Catmull alghoritm )-----------------
;----I normalize normal vector in every pixel -----------
;------------------in - eax - x1 shl 16 + y1 ------------
;---------------------- ebx - x2 shl 16 + y2 ------------
;---------------------- ecx - x3 shl 16 + y3 ------------
;---------------------- edx - ptr to stencil_buff -------
;---------------------- esi - pointer to Z-buffer filled-
;---------------------- with dd float variables--------
;---------------------- edi - pointer to screen buffer---
;---------------------- xmm0 - 1st normal vector --------
;---------------------- xmm1 - 2cond normal vector ------
;---------------------- xmm2 - 3rd normal vector --------
;---------------------- xmm3 - normalized light vector --
;---------------------- xmm4 - lo -> hi z1, z2, z3 coords
;---------------------- as dwords floats ---------------
;---------------------- xmm5 - lo -> hi y_min, y_max, ---
;---------------------- x_min, x_max as dword integers -
;---------------------- stack - no parameters -----------
;--------------------------------------------------------
;----------------- procedure don't save registers !! ----
 
 
 
 
push ebp
mov ebp,esp
sub esp,512
sub ebp,16
and ebp,0xfffffff0
 
.1_nv equ [ebp-16]
.2_nv equ [ebp-32]
.3_nv equ [ebp-48]
.l_v equ [ebp-64]
.z3 equ [ebp-72]
.z2 equ [ebp-76]
.z1 equ [ebp-80]
.x1 equ [ebp-82]
.y1 equ [ebp-84]
.x2 equ [ebp-86]
.y2 equ [ebp-88]
.x3 equ [ebp-90]
.y3 equ [ebp-92]
.Zbuf equ [ebp-96]
.x_max equ [ebp-100]
.x_min equ [ebp-104]
.y_max equ [ebp-108]
.y_min equ [ebp-112]
.screen equ [ebp-116]
.dx12 equ [ebp-120]
.dx13 equ [ebp-124]
.dx23 equ [ebp-128]
.dn12 equ [ebp-144]
.dn13 equ [ebp-160]
.dn23 equ [ebp-176]
.dz12 equ [ebp-180]
.dz13 equ [ebp-184]
.dz23 equ [ebp-188]
 
.cnv1 equ [ebp-208] ; cur normal vectors
.cnv2 equ [ebp-224]
.cz2 equ [ebp-228]
.cz1 equ [ebp-232]
.stencil_buff equ [ebp-236]
 
 
 
 
.sort3: ; sort triangle coordinates...
cmp ax,bx
jle .sort1
xchg eax,ebx
shufps xmm4,xmm4,11100001b
movaps xmm6,xmm0
movaps xmm0,xmm1
movaps xmm1,xmm6
 
 
.sort1:
cmp bx,cx
jle .sort2
xchg ebx,ecx
shufps xmm4,xmm4,11011000b
movaps xmm6,xmm1
movaps xmm1,xmm2
movaps xmm2,xmm6
 
jmp .sort3
 
.sort2:
 
movaps .z1,xmm4
mov .y1,eax
mov .y2,ebx
mov .y3,ecx
mov .stencil_buff, edx
 
movdqa .y_min,xmm5
if 1 ; check if at last only fragment
packssdw xmm5,xmm5 ; of triangle is in visable area
pshuflw xmm5,xmm5,11011000b
movdqu xmm7,.y3
movdqa xmm6,xmm5
pshufd xmm5,xmm5,0 ; xmm5 lo-hi -> broadcasted y_min, x_min
pshufd xmm6,xmm6,01010101b ;xmm6 -> brd y_max x_max
movdqa xmm4,xmm7
pcmpgtw xmm7,xmm5
pcmpgtw xmm4,xmm6
pxor xmm7,xmm4
pmovmskb eax,xmm7
and eax,0x00aaaaaa
or eax,eax
jz .rpt_loop2_end
end if
movaps .1_nv,xmm0
movaps .2_nv,xmm1
movaps .3_nv,xmm2
movaps .l_v,xmm3
; mov .Zbuf,esi
mov .screen,edi
 
 
 
mov bx,.y2 ; calc deltas
sub bx,.y1
jnz .rpt_dx12_make
 
xorps xmm7,xmm7
mov dword .dx12,0
mov dword .dz12,0
movaps .dn12,xmm7
jmp .rpt_dx12_done
 
.rpt_dx12_make:
mov ax,.x2
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx12,eax
 
cvtsi2ss xmm6,ebx
movss xmm5,.z2
subss xmm5,.z1
divss xmm5,xmm6
movss .dz12,xmm5
 
movaps xmm0,.2_nv
subps xmm0,.1_nv
shufps xmm6,xmm6,0
divps xmm0,xmm6
movaps .dn12,xmm0
 
 
.rpt_dx12_done:
 
mov bx,.y3 ; calc deltas
sub bx,.y1
jnz .rpt_dx13_make
 
xorps xmm7,xmm7
mov dword .dx13,0
mov dword .dz13,0
movaps .dn13,xmm7
jmp .rpt_dx13_done
 
.rpt_dx13_make:
mov ax,.x3
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx13,eax
 
cvtsi2ss xmm6,ebx
movss xmm5,.z3
subss xmm5,.z1
divss xmm5,xmm6
movss .dz13,xmm5
 
movaps xmm0,.3_nv
subps xmm0,.1_nv
shufps xmm6,xmm6,0
divps xmm0,xmm6
movaps .dn13,xmm0
 
.rpt_dx13_done:
 
mov bx,.y3 ; calc deltas
sub bx,.y2
jnz .rpt_dx23_make
 
xorps xmm7,xmm7
mov dword .dx23,0
mov dword .dz23,0
movaps .dn23,xmm7
jmp .rpt_dx23_done
 
.rpt_dx23_make:
mov ax,.x3
sub ax,.x2
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx23,eax
 
cvtsi2ss xmm6,ebx
movss xmm5,.z3
subss xmm5,.z2
divss xmm5,xmm6
movss .dz23,xmm5
 
movaps xmm0,.3_nv
subps xmm0,.2_nv
shufps xmm6,xmm6,0
divps xmm0,xmm6
movaps .dn23,xmm0
 
.rpt_dx23_done:
 
 
movsx eax,word .x1
shl eax,ROUND2
mov ebx,eax
mov edx,.z1
mov .cz1,edx
mov .cz2,edx
movaps xmm0,.1_nv
movaps .cnv1,xmm0
movaps .cnv2,xmm0
 
 
movsx ecx,word .y1
cmp cx,.y2
 
jge .rpt_loop1_end
 
.rpt_loop1:
pushad
 
movaps xmm2,.y_min
movaps xmm0,.cnv1
movaps xmm1,.cnv2
movlps xmm3,.cz1
movaps xmm4,.l_v
sar ebx,ROUND2
sar eax,ROUND2
mov edx,.stencil_buff
mov edi,.screen
; mov esi,.Zbuf
 
call glass_line
 
popad
movaps xmm0,.cnv1
movaps xmm1,.cnv2
movss xmm2,.cz1
movss xmm3,.cz2
addps xmm0,.dn13
addps xmm1,.dn12
addss xmm2,.dz13
addss xmm3,.dz12
add eax,.dx13
add ebx,.dx12
 
movaps .cnv1,xmm0
movaps .cnv2,xmm1
movss .cz1,xmm2
movss .cz2,xmm3
 
add ecx,1
cmp cx,.y2
jl .rpt_loop1
 
 
 
 
 
.rpt_loop1_end:
movsx ecx,word .y2
cmp cx,.y3
jge .rpt_loop2_end
 
movsx ebx,word .x2 ; eax - cur x1
shl ebx,ROUND2 ; ebx - cur x2
push dword .z2
pop dword .cz2
movaps xmm0,.2_nv
movaps .cnv2,xmm0
 
 
.rpt_loop2:
pushad
 
movaps xmm2,.y_min
movaps xmm0,.cnv1
movaps xmm1,.cnv2
movlps xmm3,.cz1
movaps xmm4,.l_v
sar ebx,ROUND2
sar eax,ROUND2
mov edx,.stencil_buff
mov edi,.screen
; mov esi,.Zbuf
 
call glass_line
 
popad
movaps xmm0,.cnv1
movaps xmm1,.cnv2
movss xmm2,.cz1
movss xmm3,.cz2
addps xmm0,.dn13
addps xmm1,.dn23
addss xmm2,.dz13
addss xmm3,.dz23
add eax,.dx13
add ebx,.dx23
 
movaps .cnv1,xmm0
movaps .cnv2,xmm1
movss .cz1,xmm2
movss .cz2,xmm3
 
add ecx,1
cmp cx,.y3
jl .rpt_loop2
 
.rpt_loop2_end:
 
add esp,512
pop ebp
 
ret
align 16
glass_line:
; in:
; xmm0 - normal vector 1
; xmm1 - normal vect 2
; xmm3 - lo -> hi z1, z2 coords as dwords floats
; xmm2 - lo -> hi y_min, y_max, x_min, x_max
; as dword integers
; xmm4 - normalized light vector
; eax - x1
; ebx - x2
; ecx - y
; edx - stencil buff ptr
; edi - screen buffer
; esi - z buffer ===> not needed in glass rendering
 
push ebp
mov ebp,esp
sub esp,256
sub ebp,16
and ebp,0xfffffff0
 
.n1 equ [ebp-16]
.n2 equ [ebp-32]
.lv equ [ebp-48]
.lx1 equ [ebp-52]
.lx2 equ [ebp-56]
.z2 equ [ebp-60]
.z1 equ [ebp-64]
.screen equ [ebp-68]
.zbuff equ [ebp-72]
.x_max equ [ebp-74]
.x_min equ [ebp-76]
.y_max equ [ebp-78]
.y_min equ [ebp-80]
.dn equ [ebp-96]
.dz equ [ebp-100]
.y equ [ebp-104]
.cnv equ [ebp-128]
.col_sum_b equ [ebp-136]
.col_sum_g equ [ebp-140]
.col_sum_r equ [ebp-144]
.cur_col equ [ebp-160]
.stencil_buf equ [ebp-164]
 
mov .y,ecx
packssdw xmm2,xmm2
movq .y_min,xmm2
cmp cx,.y_min
jl .end_rp_line
cmp cx,.y_max
jge .end_rp_line ;
 
cmp eax,ebx
je .end_rp_line
jl @f
xchg eax,ebx
movaps xmm7,xmm0
movaps xmm0,xmm1
movaps xmm1,xmm7
shufps xmm3,xmm3,11100001b
@@:
 
cmp ax,.x_max
jge .end_rp_line
cmp bx,.x_min
jle .end_rp_line
movaps .lv,xmm4
movaps .n1,xmm0
movaps .n2,xmm1
mov .lx1,eax
mov .lx2,ebx
mov .stencil_buf,edx
movlps .z1,xmm3
 
sub ebx,eax
cvtsi2ss xmm7,ebx
shufps xmm7,xmm7,0
subps xmm1,xmm0
divps xmm1,xmm7
movaps .dn,xmm1
psrldq xmm3,4
subss xmm3,.z1
divss xmm3,xmm7
movss .dz,xmm3
 
mov ebx,.lx1
cmp bx,.x_min ; clipping on function4
jge @f
movzx eax,word .x_min
sub eax,ebx
cvtsi2ss xmm7,eax
shufps xmm7,xmm7,0
mulss xmm3,xmm7
mulps xmm1,xmm7
addss xmm3,.z1
addps xmm1,.n1
movsx eax,word .x_min
movss .z1,xmm3
movaps .n1,xmm1
mov dword .lx1,eax
 
@@:
movzx eax,word .x_max
cmp .lx2,eax
jl @f
mov .lx2,eax
@@:
movzx eax,word[xres_var]
mul dword .y
 
add eax,.lx1
shl eax,2
add edi,eax
mov ebx,eax
add ebx,.stencil_buf
 
 
mov ecx,.lx2
sub ecx,.lx1
 
movaps xmm0,.n1
movss xmm2,.z1
align 16
.ddraw:
movaps xmm7,xmm0
mulps xmm7,xmm7 ; normalize
andps xmm7,[zero_hgst_dd]
haddps xmm7,xmm7
haddps xmm7,xmm7
rsqrtps xmm7,xmm7
mulps xmm7,xmm0
; maxps xmm7,[the_zero]
movaps .cnv,xmm7
 
mov edx,lights_aligned ; lights_aligned - global variable
xorps xmm1,xmm1 ; instead global can be used .lv - light vect.
.again_col:
movaps xmm3,.cnv
mulps xmm3,[edx]
haddps xmm3,xmm3
haddps xmm3,xmm3 ; xmm3 - dot pr
 
; cmp [bump_flag],1 ; on/off temporaly
; depend on bump button
; je @f
; stencil
movss xmm5,xmm2
movss xmm6,xmm2
addss xmm5,[aprox]
subss xmm6,[aprox]
cmpnltss xmm5,dword[ebx]
cmpnltss xmm6,dword[ebx]
xorps xmm5,xmm6
movd eax,xmm5
or eax,eax
jz .no_reflective
@@:
movaps xmm6,xmm3 ;xmm7
mulps xmm6,xmm6
mulps xmm6,xmm6
mulps xmm6,xmm6
mulps xmm6,xmm6
mulps xmm6,xmm6
mulps xmm6,[edx+48]
.no_reflective:
movaps xmm7,xmm3
mulps xmm7,[edx+16]
addps xmm7,xmm6
addps xmm7,[edx+32]
minps xmm7,[mask_255f] ; global
 
maxps xmm1,xmm7
add edx,64 ; size of one light in aligned list
cmp edx,lights_aligned_end
jl .again_col
cvtps2dq xmm1,xmm1
movd xmm6,[edi]
packssdw xmm1,xmm1
packuswb xmm1,xmm1
paddusb xmm1,xmm6
movd [edi],xmm1
 
 
.skip:
add edi,4
add ebx,4 ; stencil_buff
addps xmm0,.dn
addss xmm2,.dz
sub ecx,1
jnz .ddraw
 
.end_rp_line:
add esp,256
pop ebp
 
ret
/programs/demos/view3ds/3glass_tex.inc
0,0 → 1,762
; Bilinear filtering, real Phongs shading and glass like parallel.
; Thanks to authors of 3dica tutorial.
; Implemented in FASM by Maciej Guba.
; http://macgub.j.pl
 
ROUND2 equ 10
 
glass_tex_tri:
;----Procedure render Phongs shaded triangle with z coord
;----interpolation ( Catmull alghoritm ), each pixel is -
;----covered by texture using bilinear filtering.--------
;----I normalize normal vector in every pixel -----------
;------------------in - eax - x1 shl 16 + y1 ------------
;---------------------- ebx - x2 shl 16 + y2 ------------
;---------------------- ecx - x3 shl 16 + y3 ------------
;---------------------- esi - pointer to stencil buffer--
;---------------------- filled with dd float variables-
;---------------------- edi - pointer to screen buffer---
;---------------------- edx - pointer to texture---------
;---------------------- xmm0 - 1st normal vector --------
;---------------------- xmm1 - 2cond normal vector ------
;---------------------- xmm2 - 3rd normal vector --------
;---------------------- xmm3 - normalized light vector --
;---------------------- xmm4 - lo -> hi z1, z2, z3 coords
;---------------------- as dwords floats ---------------
;---------------------- xmm5 - lo -> hi y_min, y_max, ---
;---------------------- x_min, x_max as dword integers -
;---------------------- xmm6 - lo -> hi tx1, ty1, tx2, --
;---------------------- ty2, tx3, ty3 as word, xres as--
;---------------------- dword integers------------------
;---------------------- stack - no parameters -----------
;--------------------------------------------------------
;----------------- procedure don't save registers !! ----
 
 
 
 
push ebp
mov ebp,esp
sub esp,512
sub ebp,16
and ebp,0xfffffff0
 
.1_nv equ [ebp-16]
.2_nv equ [ebp-32]
.3_nv equ [ebp-48]
.l_v equ [ebp-64]
.z3 equ [ebp-72]
.z2 equ [ebp-76]
.z1 equ [ebp-80]
.x1 equ [ebp-82]
.y1 equ [ebp-84]
.x2 equ [ebp-86]
.y2 equ [ebp-88]
.x3 equ [ebp-90]
.y3 equ [ebp-92]
.Zbuf equ [ebp-96]
.x_max equ [ebp-100]
.x_min equ [ebp-104]
.y_max equ [ebp-108]
.y_min equ [ebp-112]
.screen equ [ebp-116]
.dx12 equ [ebp-120]
.dx13 equ [ebp-124]
.dx23 equ [ebp-128]
.dn12 equ [ebp-144]
.dn13 equ [ebp-160]
.dn23 equ [ebp-176]
 
.cnv1 equ [ebp-192] ; cur normal vectors
.cnv2 equ [ebp-208]
.x_res equ [ebp-212]
.ty3 equ [ebp-214]
.tx3 equ [ebp-216]
.ty2 equ [ebp-218]
.tx2 equ [ebp-220]
.ty1 equ [ebp-222]
.tx1 equ [ebp-224]
.dz12 equ [ebp-232]
.dty12 equ [ebp-236]
.dtx12 equ [ebp-240]
.dz13 equ [ebp-248]
.dty13 equ [ebp-252]
.dtx13 equ [ebp-256]
.dz23 equ [ebp-264]
.dty23 equ [ebp-268]
.dtx23 equ [ebp-272]
.cz1 equ [ebp-280]
.cty1 equ [ebp-284]
.ctx1 equ [ebp-288]
.cz2 equ [ebp-296]
.cty2 equ [ebp-300]
.ctx2 equ [ebp-304]
.tx_ptr equ [ebp-308]
 
 
emms
; movd .x_res,xmm7
.sort3: ; sort triangle coordinates...
cmp ax,bx
jle .sort1
xchg eax,ebx
shufps xmm4,xmm4,11100001b
shufps xmm6,xmm6,11100001b
movaps xmm7,xmm0
movaps xmm0,xmm1
movaps xmm1,xmm7
 
 
.sort1:
cmp bx,cx
jle .sort2
xchg ebx,ecx
shufps xmm4,xmm4,11011000b
shufps xmm6,xmm6,11011000b
movaps xmm7,xmm1
movaps xmm1,xmm2
movaps xmm2,xmm7
 
jmp .sort3
 
.sort2:
; movq .tx1,xmm6
; pshufd xmm6,xmm6,01001110b
; movd .tx3,xmm6
movaps .tx1,xmm6
movaps .z1,xmm4
mov .y1,eax
mov .y2,ebx
mov .y3,ecx
 
movdqa .y_min,xmm5
if 1 ; check if at last only fragment
packssdw xmm5,xmm5 ; of triangle is in visable area
pshuflw xmm5,xmm5,11011000b
movdqu xmm7,.y3
movdqa xmm6,xmm5
pshufd xmm5,xmm5,0 ; xmm5 lo-hi -> broadcasted y_min, x_min
pshufd xmm6,xmm6,01010101b ;xmm6 -> brd y_max x_max
movdqa xmm4,xmm7
pcmpgtw xmm7,xmm5
pcmpgtw xmm4,xmm6
pxor xmm7,xmm4
pmovmskb eax,xmm7
and eax,0x00aaaaaa
or eax,eax
jz .rpt_loop2_end
end if
movaps .1_nv,xmm0
movaps .2_nv,xmm1
movaps .3_nv,xmm2
movaps .l_v,xmm3
mov .Zbuf,esi
mov .screen,edi
mov .tx_ptr,edx
 
 
 
mov bx,.y2 ; calc deltas
sub bx,.y1
jnz .rpt_dx12_make
 
xorps xmm7,xmm7
mov dword .dx12,0
movaps .dtx12,xmm7
movaps .dn12,xmm7
jmp .rpt_dx12_done
 
.rpt_dx12_make:
mov ax,.x2
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx12,eax
 
cvtsi2ss xmm6,ebx
shufps xmm6,xmm6,0
movss xmm5,.z2
subss xmm5,.z1
divss xmm5,xmm6
movss .dz12,xmm5
 
movd xmm0,.tx1
movd xmm2,.tx2
pxor xmm1,xmm1
punpcklwd xmm0,xmm1
punpcklwd xmm2,xmm1
psubd xmm2,xmm0
; cvtdq2ps xmm0,xmm0
cvtdq2ps xmm2,xmm2
; movlps .ctx1,xmm0
; movlps .ctx2,xmm2
; subps xmm2,xmm0
divps xmm2,xmm6
movlps .dtx12,xmm2
 
movaps xmm0,.2_nv
subps xmm0,.1_nv
divps xmm0,xmm6
movaps .dn12,xmm0
 
 
.rpt_dx12_done:
 
mov bx,.y3 ; calc deltas
sub bx,.y1
jnz .rpt_dx13_make
 
xorps xmm7,xmm7
mov dword .dx13,0
movaps .dtx13,xmm7
movaps .dn13,xmm7
jmp .rpt_dx13_done
 
.rpt_dx13_make:
mov ax,.x3
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx13,eax
 
 
cvtsi2ss xmm6,ebx
shufps xmm6,xmm6,0
 
movss xmm5,.z3
subss xmm5,.z1
divss xmm5,xmm6
movss .dz13,xmm5
 
movd xmm0,.tx1
movd xmm2,.tx3
pxor xmm1,xmm1
punpcklwd xmm0,xmm1
punpcklwd xmm2,xmm1
psubd xmm2,xmm0
; cvtdq2ps xmm0,xmm0
cvtdq2ps xmm2,xmm2
; subps xmm2,xmm0
divps xmm2,xmm6
movlps .dtx13,xmm2
 
 
 
movaps xmm0,.3_nv
subps xmm0,.1_nv
divps xmm0,xmm6
movaps .dn13,xmm0
 
.rpt_dx13_done:
 
mov bx,.y3 ; calc deltas
sub bx,.y2
jnz .rpt_dx23_make
 
xorps xmm7,xmm7
mov dword .dx23,0
movaps .dtx23,xmm7
movaps .dn23,xmm7
jmp .rpt_dx23_done
 
.rpt_dx23_make:
mov ax,.x3
sub ax,.x2
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx23,eax
 
cvtsi2ss xmm6,ebx
shufps xmm6,xmm6,0
movss xmm5,.z3
subss xmm5,.z2
divss xmm5,xmm6
movss .dz23,xmm5
 
movd xmm0,.tx2
movd xmm2,.tx3
pxor xmm1,xmm1
punpcklwd xmm0,xmm1
punpcklwd xmm2,xmm1
psubd xmm2,xmm0
; cvtdq2ps xmm0,xmm0
cvtdq2ps xmm2,xmm2
; movlps .ctx1,xmm0
; movlps .ctx2,xmm2
; subps xmm2,xmm0
divps xmm2,xmm6
movlps .dtx23,xmm2
 
 
 
 
movaps xmm0,.3_nv
subps xmm0,.2_nv
divps xmm0,xmm6
movaps .dn23,xmm0
 
.rpt_dx23_done:
 
movsx eax,word .x1
shl eax,ROUND2
mov ebx,eax
mov edx,.z1
movd xmm1,.tx1
pxor xmm2,xmm2
punpcklwd xmm1,xmm2
cvtdq2ps xmm1,xmm1
 
mov .cz1,edx
mov .cz2,edx
movaps xmm0,.1_nv
movlps .ctx1,xmm1
movlps .ctx2,xmm1
movaps .cnv1,xmm0
movaps .cnv2,xmm0
 
; mov edx,.dx13
; cmp edx,.dx12
; jg .second_cause
 
movsx ecx,word .y1
cmp cx,.y2
 
jge .rpt_loop1_end
 
.rpt_loop1:
pushad
 
movaps xmm2,.y_min
movaps xmm0,.cnv1
movaps xmm1,.cnv2
; movlps xmm3,.cz1 ; cz1, cz2 both
movaps xmm3,.ctx1
movaps xmm5,.ctx2
movaps xmm4,.l_v
movd xmm6,.x_res
sar ebx,ROUND2
sar eax,ROUND2
mov edx,.tx_ptr
mov edi,.screen
 
mov esi,.Zbuf
 
call glass_tex_line
 
popad
movaps xmm0,.cnv1
movaps xmm1,.cnv2
; movss xmm2,.cz1
; movss xmm3,.cz2
movaps xmm2,.ctx1
movaps xmm3,.ctx2
addps xmm0,.dn13
addps xmm1,.dn12
addps xmm2,.dtx13
addps xmm3,.dtx12
add eax,.dx13
add ebx,.dx12
 
movaps .cnv1,xmm0
movaps .cnv2,xmm1
; movss .cz1,xmm2
; movss .cz2,xmm3
movaps .ctx1,xmm2
movaps .ctx2,xmm3
add ecx,1
cmp cx,.y2
jl .rpt_loop1
 
 
; jmp .rpt_loop2_end
 
 
.rpt_loop1_end:
movsx ecx,word .y2
cmp cx,.y3
jge .rpt_loop2_end
 
movsx ebx,word .x2 ; eax - cur x1
shl ebx,ROUND2 ; ebx - cur x2
push dword .z2
pop dword .cz2
movd xmm1,.tx2
pxor xmm2,xmm2
punpcklwd xmm1,xmm2
cvtdq2ps xmm1,xmm1
movlps .ctx2,xmm1
movaps xmm0,.2_nv
movaps .cnv2,xmm0
 
 
.rpt_loop2:
pushad
 
movaps xmm2,.y_min
movaps xmm0,.cnv1
movaps xmm1,.cnv2
movaps xmm3,.ctx1
movaps xmm5,.ctx2
movaps xmm4,.l_v
sar ebx,ROUND2
sar eax,ROUND2
mov edx,.tx_ptr
mov edi,.screen
mov esi,.Zbuf
movd xmm6,.x_res
call glass_tex_line
 
popad
movaps xmm0,.cnv1
movaps xmm1,.cnv2
; movss xmm2,.cz1
; movss xmm3,.cz2
movaps xmm2,.ctx1
movaps xmm3,.ctx2
addps xmm0,.dn13
addps xmm1,.dn23
; addss xmm2,.dz13
; addss xmm3,.dz23
addps xmm2,.dtx13
addps xmm3,.dtx23
 
add eax,.dx13
add ebx,.dx23
 
movaps .cnv1,xmm0
movaps .cnv2,xmm1
movaps .ctx1,xmm2
movaps .ctx2,xmm3
 
; movss .cz1,xmm2
; movss .cz2,xmm3
 
add ecx,1
cmp cx,.y3
jl .rpt_loop2
 
.second_cause: ;dx13 > dx12
 
.rpt_loop2_end:
 
add esp,512
pop ebp
 
ret
align 16
glass_tex_line:
; in:
; xmm0 - normal vector 1
; xmm1 - normal vect 2
; xmm3 - lo -> hi tx1, ty1, z1 coords as dwords float
; xmm5 - lo -> hi tx2, ty2, z2 coords as dwords float
; xmm2 - lo -> hi y_min, y_max, x_min, x_max
; as dword integers
; xmm4 - normalized light vector
; eax - x1
; ebx - x2
; ecx - y
; edi - screen buffer
; esi - stencil buffer filled with dd floats
; edx - texture pointer (handle)
; xmm6 - lowest dword x_res as integer
 
push ebp
mov ebp,esp
sub esp,350
sub ebp,16
and ebp,0xfffffff0
 
.n1 equ [ebp-16]
.n2 equ [ebp-32]
.lv equ [ebp-48]
.lx1 equ [ebp-52]
.lx2 equ [ebp-56]
; .z2 equ [ebp-60]
; .z1 equ [ebp-64]
.screen equ [ebp-68]
.zbuff equ [ebp-72]
.x_max equ [ebp-74]
.x_min equ [ebp-76]
.y_max equ [ebp-78]
.y_min equ [ebp-80]
.dn equ [ebp-96]
.x_res equ [ebp-100]
.y equ [ebp-104]
.cnv equ [ebp-128]
.z1 equ [ebp-136]
.ty1 equ [ebp-140]
.tx1 equ [ebp-144]
.z2 equ [ebp-152]
.ty2 equ [ebp-156]
.tx2 equ [ebp-160]
.cz equ [ebp-168]
.cty equ [ebp-172]
.ctx equ [ebp-176]
.dz equ [ebp-184]
.dty equ [ebp-188]
.dtx equ [ebp-192]
.yd equ [ebp-196]
.xd equ [ebp-200]
.yf equ [ebp-204]
.xf equ [ebp-208]
.w4 equ [ebp-212]
.w3 equ [ebp-216]
.w2 equ [ebp-220]
.w1 equ [ebp-224]
.p4 equ [ebp-228]
.p3 equ [ebp-232]
.p2 equ [ebp-236]
.p1 equ [ebp-240]
 
 
.tx_ptr equ [ebp-244]
 
; movaps xmm7,xmm3
; movaps xmm3,xmm5
; movaps xmm5,xmm7
 
 
mov .y,ecx
packssdw xmm2,xmm2
; movaps xmm7,xmm2
; movhps xmm2,[the_zero]
; pshuflw xmm2,xmm2,11111000b
; pshufd xmm2,xmm2,11111100b
; movlps xmm7,[the_zero]
; pshufhw xmm7,xmm7,11111111b
; movlps xmm7,[the_zero]
; psrldq xmm7,4
; por xmm2,xmm7
movq .y_min,xmm2
cmp cx,.y_min
jl .end_line
cmp cx,.y_max
jge .end_line ;
 
cmp eax,ebx
je .end_line
jl @f
xchg eax,ebx
movaps xmm7,xmm0
movaps xmm0,xmm1
movaps xmm1,xmm7
movaps xmm7,xmm3
movaps xmm3,xmm5
movaps xmm5,xmm7
@@:
 
cmp ax,.x_max
jge .end_line
cmp bx,.x_min
jle .end_line
movaps .lv,xmm4
movaps .n1,xmm0
movaps .n2,xmm1
mov .lx1,eax
mov .lx2,ebx
movaps .tx1,xmm3
movaps .tx2,xmm5
movd .x_res,xmm6
mov .tx_ptr,edx
sub ebx,eax
cvtsi2ss xmm7,ebx
shufps xmm7,xmm7,0
subps xmm1,xmm0
divps xmm1,xmm7
movaps .dn,xmm1
subps xmm5,xmm3
divps xmm5,xmm7
movaps .dtx,xmm5
 
 
 
mov ebx,.lx1
cmp bx,.x_min ; clipping on function4
jge @f
movzx eax,word .x_min
sub eax,ebx
cvtsi2ss xmm7,eax
shufps xmm7,xmm7,0
mulps xmm5,xmm7
mulps xmm1,xmm7
addps xmm5,.tx1
addps xmm1,.n1
movsx eax,word .x_min
movaps .tx1,xmm5
movaps .n1,xmm1
mov dword .lx1,eax
 
@@:
movzx eax,word .x_max
cmp .lx2,eax
jl @f
mov .lx2,eax
@@:
mov eax,.x_res
mul dword .y
add eax,.lx1
shl eax,2
add edi,eax
add esi,eax
 
mov ecx,.lx2
sub ecx,.lx1
; movaps xmm0,.n1
movaps xmm2,.tx1
; xorps xmm1,xmm1
align 16
.ddraw:
; movhlps xmm7,xmm2
; cmpnltss xmm7,dword[esi]
; movd eax,xmm7
; or eax,eax
; jnz .skip
xorps xmm5,xmm5
; movhlps xmm7,xmm2
; movss [esi],xmm7
movaps xmm7,.n1 ;xmm0
mulps xmm7,xmm7 ; normalize
haddps xmm7,xmm7
haddps xmm7,xmm7
rsqrtps xmm7,xmm7
mulps xmm7,.n1 ;xmm0
; andps xmm7,[abs_z_coof]
movaps .cnv,xmm7
 
movaps xmm6,xmm2
minps xmm6,[tex_m2] ; float TEX_X-2,TEX_Y-2
cvttps2dq xmm7,xmm6
cvtdq2ps xmm4,xmm7
subps xmm6,xmm4
movlps .xf,xmm6
; movaps xmm5,.lv
mov eax,lights_aligned ; global
align 16
.again_col:
movaps xmm0,[eax] ; calc multple lights
mulps xmm0,.cnv ;.lv ; last dword should be zeroed
haddps xmm0,xmm0
haddps xmm0,xmm0
; andps xmm0,[abs_val] ;calc absolute value
if 1
; stencil
movhlps xmm6,xmm2
movhlps xmm4,xmm2
addss xmm6,[aprox]
subss xmm4,[aprox]
cmpnltss xmm6,dword[esi]
cmpnltss xmm4,dword[esi]
xorps xmm6,xmm4
xorps xmm4,xmm4
movd ebx,xmm6
cmp ebx,-1
jne .no_reflective
end if
movaps xmm4,xmm0
mulps xmm4,xmm4
mulps xmm4,xmm4
mulps xmm4,xmm4
mulps xmm4,xmm4
mulps xmm4,[eax+48]
 
.no_reflective:
maxps xmm0,[the_zero]
; movaps xmm1,xmm0
mulps xmm0,[eax+16]
addps xmm4,xmm0
addps xmm4,[eax+32]
maxps xmm5,xmm4
add eax,64
cmp eax,lights_aligned_end
jnz .again_col
minps xmm5,[mask_255f]
 
; texture coords work
movd eax,xmm7
psrldq xmm7,4
movd ebx,xmm7
shl ebx,TEX_SHIFT
add eax,ebx
lea eax,[eax*3]
add eax,.tx_ptr
mov ebx,eax
add ebx,TEX_X*3
movd xmm7,[eax]
movd xmm6,[eax+3]
movd xmm4,[ebx]
movd xmm3,[ebx+3]
punpcklbw xmm7,xmm6 ;xmm7 r1 r2 g1 g2 b1 b2
punpcklbw xmm4,xmm3 ;xmm4 r3 r4 g3 g4 b3 b4
punpcklwd xmm7,xmm4 ;xmm7 r1 r2 r3 r4 g1 g2 g3 g4 ...
movdqa xmm6,xmm7
movdqa xmm4,xmm7
psrldq xmm6,4
psrldq xmm4,8
 
punpcklbw xmm7,[the_zero] ; broadcasted 0
punpcklbw xmm6,[the_zero]
punpcklbw xmm4,[the_zero]
punpcklwd xmm7,[the_zero]
punpcklwd xmm6,[the_zero]
punpcklwd xmm4,[the_zero]
 
 
; calc w .........
movlps xmm3,[the_one] ; broadcasted dword 1.0
cvtdq2ps xmm7,xmm7
subps xmm3,.xf
cvtdq2ps xmm6,xmm6
movhps xmm3,.xf
cvtdq2ps xmm4,xmm4
movaps xmm1,xmm3 ; 1-xf, 1-yf, xf, yf
shufps xmm3,xmm3,10001000b
shufps xmm1,xmm1,11110101b
mulps xmm3,xmm1
 
mulps xmm7,xmm3
mulps xmm6,xmm3
mulps xmm4,xmm3
haddps xmm7,xmm7 ; r
haddps xmm6,xmm6 ; g
haddps xmm4,xmm4 ; b
haddps xmm7,xmm7 ; r
haddps xmm6,xmm6 ; g
haddps xmm4,xmm4 ; b
movlhps xmm7,xmm6
shufps xmm7,xmm7,11101000b
movlhps xmm7,xmm4
 
mulps xmm5,xmm7
cvtps2dq xmm5,xmm5
psrld xmm5,8
movd xmm6,[edi]
packssdw xmm5,xmm5
packuswb xmm5,xmm5
paddusb xmm5,xmm6
movd [edi],xmm5
.skip:
add edi,4
add esi,4
; addps xmm0,.dn
movaps xmm0,.n1 ; cur normal
addps xmm0,.dn
addps xmm2,.dtx
movaps .n1,xmm0
sub ecx,1
jnz .ddraw
 
.end_line:
add esp,350
pop ebp
 
ret
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/3r_phg.inc
0,0 → 1,528
; Real Phong's shading implemented if flat assembler
; by Maciej Guba.
; http://macgub.vxm.pl
 
ROUND2 equ 10
real_phong_tri_z:
;----procedure render Phongs shaded triangle with z coord
;----interpolation ( Catmull alghoritm )-----------------
;----I normalize normal vector in every pixel -----------
;------------------in - eax - x1 shl 16 + y1 ------------
;---------------------- ebx - x2 shl 16 + y2 ------------
;---------------------- ecx - x3 shl 16 + y3 ------------
;---------------------- esi - pointer to Z-buffer filled-
;---------------------- with dd float variables--------
;---------------------- edi - pointer to screen buffer---
;---------------------- xmm0 - 1st normal vector --------
;---------------------- xmm1 - 2cond normal vector ------
;---------------------- xmm2 - 3rd normal vector --------
;---------------------- xmm3 - normalized light vector --
;---------------------- xmm4 - lo -> hi z1, z2, z3 coords
;---------------------- as dwords floats ---------------
;---------------------- xmm5 - lo -> hi y_min, y_max, ---
;---------------------- x_min, x_max as dword integers -
;---------------------- stack - no parameters -----------
;--------------------------------------------------------
;----------------- procedure don't save registers !! ----
 
 
 
 
push ebp
mov ebp,esp
sub esp,512
sub ebp,16
and ebp,0xfffffff0
 
.1_nv equ [ebp-16]
.2_nv equ [ebp-32]
.3_nv equ [ebp-48]
.l_v equ [ebp-64]
.z3 equ [ebp-72]
.z2 equ [ebp-76]
.z1 equ [ebp-80]
.x1 equ [ebp-82]
.y1 equ [ebp-84]
.x2 equ [ebp-86]
.y2 equ [ebp-88]
.x3 equ [ebp-90]
.y3 equ [ebp-92]
.Zbuf equ [ebp-96]
.x_max equ [ebp-100]
.x_min equ [ebp-104]
.y_max equ [ebp-108]
.y_min equ [ebp-112]
.screen equ [ebp-116]
.dx12 equ [ebp-120]
.dx13 equ [ebp-124]
.dx23 equ [ebp-128]
.dn12 equ [ebp-144]
.dn13 equ [ebp-160]
.dn23 equ [ebp-176]
.dz12 equ [ebp-180]
.dz13 equ [ebp-184]
.dz23 equ [ebp-188]
 
.cnv1 equ [ebp-208] ; cur normal vectors
.cnv2 equ [ebp-224]
.cz2 equ [ebp-228]
.cz1 equ [ebp-232]
 
 
 
 
 
.sort3: ; sort triangle coordinates...
cmp ax,bx
jle .sort1
xchg eax,ebx
shufps xmm4,xmm4,11100001b
movaps xmm6,xmm0
movaps xmm0,xmm1
movaps xmm1,xmm6
 
 
.sort1:
cmp bx,cx
jle .sort2
xchg ebx,ecx
shufps xmm4,xmm4,11011000b
movaps xmm6,xmm1
movaps xmm1,xmm2
movaps xmm2,xmm6
 
jmp .sort3
 
.sort2:
 
movaps .z1,xmm4
mov .y1,eax
mov .y2,ebx
mov .y3,ecx
 
movdqa .y_min,xmm5
if 1 ; check if at last only fragment
packssdw xmm5,xmm5 ; of triangle is in visable area
pshuflw xmm5,xmm5,11011000b
movdqu xmm7,.y3
movdqa xmm6,xmm5
pshufd xmm5,xmm5,0 ; xmm5 lo-hi -> broadcasted y_min, x_min
pshufd xmm6,xmm6,01010101b ;xmm6 -> brd y_max x_max
movdqa xmm4,xmm7
pcmpgtw xmm7,xmm5
pcmpgtw xmm4,xmm6
pxor xmm7,xmm4
pmovmskb eax,xmm7
and eax,0x00aaaaaa
or eax,eax
jz .rpt_loop2_end
end if
movaps .1_nv,xmm0
movaps .2_nv,xmm1
movaps .3_nv,xmm2
movaps .l_v,xmm3
mov .Zbuf,esi
mov .screen,edi
 
 
 
mov bx,.y2 ; calc deltas
sub bx,.y1
jnz .rpt_dx12_make
 
xorps xmm7,xmm7
mov dword .dx12,0
mov dword .dz12,0
movaps .dn12,xmm7
jmp .rpt_dx12_done
 
.rpt_dx12_make:
mov ax,.x2
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx12,eax
 
cvtsi2ss xmm6,ebx
movss xmm5,.z2
subss xmm5,.z1
divss xmm5,xmm6
movss .dz12,xmm5
 
movaps xmm0,.2_nv
subps xmm0,.1_nv
shufps xmm6,xmm6,0
divps xmm0,xmm6
movaps .dn12,xmm0
 
 
.rpt_dx12_done:
 
mov bx,.y3 ; calc deltas
sub bx,.y1
jnz .rpt_dx13_make
 
xorps xmm7,xmm7
mov dword .dx13,0
mov dword .dz13,0
movaps .dn13,xmm7
jmp .rpt_dx13_done
 
.rpt_dx13_make:
mov ax,.x3
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx13,eax
 
cvtsi2ss xmm6,ebx
movss xmm5,.z3
subss xmm5,.z1
divss xmm5,xmm6
movss .dz13,xmm5
 
movaps xmm0,.3_nv
subps xmm0,.1_nv
shufps xmm6,xmm6,0
divps xmm0,xmm6
movaps .dn13,xmm0
 
.rpt_dx13_done:
 
mov bx,.y3 ; calc deltas
sub bx,.y2
jnz .rpt_dx23_make
 
xorps xmm7,xmm7
mov dword .dx23,0
mov dword .dz23,0
movaps .dn23,xmm7
jmp .rpt_dx23_done
 
.rpt_dx23_make:
mov ax,.x3
sub ax,.x2
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx23,eax
 
cvtsi2ss xmm6,ebx
movss xmm5,.z3
subss xmm5,.z2
divss xmm5,xmm6
movss .dz23,xmm5
 
movaps xmm0,.3_nv
subps xmm0,.2_nv
shufps xmm6,xmm6,0
divps xmm0,xmm6
movaps .dn23,xmm0
 
.rpt_dx23_done:
 
 
movsx eax,word .x1
shl eax,ROUND2
mov ebx,eax
mov edx,.z1
mov .cz1,edx
mov .cz2,edx
movaps xmm0,.1_nv
movaps .cnv1,xmm0
movaps .cnv2,xmm0
 
 
movsx ecx,word .y1
cmp cx,.y2
 
jge .rpt_loop1_end
 
.rpt_loop1:
pushad
 
movaps xmm2,.y_min
movaps xmm0,.cnv1
movaps xmm1,.cnv2
movlps xmm3,.cz1
movaps xmm4,.l_v
sar ebx,ROUND2
sar eax,ROUND2
mov edi,.screen
mov esi,.Zbuf
 
call real_phong_line_z
 
popad
movaps xmm0,.cnv1
movaps xmm1,.cnv2
movss xmm2,.cz1
movss xmm3,.cz2
addps xmm0,.dn13
addps xmm1,.dn12
addss xmm2,.dz13
addss xmm3,.dz12
add eax,.dx13
add ebx,.dx12
 
movaps .cnv1,xmm0
movaps .cnv2,xmm1
movss .cz1,xmm2
movss .cz2,xmm3
 
add ecx,1
cmp cx,.y2
jl .rpt_loop1
 
 
 
 
 
.rpt_loop1_end:
movsx ecx,word .y2
cmp cx,.y3
jge .rpt_loop2_end
 
movsx ebx,word .x2 ; eax - cur x1
shl ebx,ROUND2 ; ebx - cur x2
push dword .z2
pop dword .cz2
movaps xmm0,.2_nv
movaps .cnv2,xmm0
 
 
.rpt_loop2:
pushad
 
movaps xmm2,.y_min
movaps xmm0,.cnv1
movaps xmm1,.cnv2
movlps xmm3,.cz1
movaps xmm4,.l_v
sar ebx,ROUND2
sar eax,ROUND2
mov edi,.screen
mov esi,.Zbuf
 
call real_phong_line_z
 
popad
movaps xmm0,.cnv1
movaps xmm1,.cnv2
movss xmm2,.cz1
movss xmm3,.cz2
addps xmm0,.dn13
addps xmm1,.dn23
addss xmm2,.dz13
addss xmm3,.dz23
add eax,.dx13
add ebx,.dx23
 
movaps .cnv1,xmm0
movaps .cnv2,xmm1
movss .cz1,xmm2
movss .cz2,xmm3
 
add ecx,1
cmp cx,.y3
jl .rpt_loop2
 
.rpt_loop2_end:
 
add esp,512
pop ebp
 
ret
align 16
real_phong_line_z:
; in:
; xmm0 - normal vector 1
; xmm1 - normal vect 2
; xmm3 - lo -> hi z1, z2 coords as dwords floats
; xmm2 - lo -> hi y_min, y_max, x_min, x_max
; as dword integers
; xmm4 - normalized light vector
; eax - x1
; ebx - x2
; ecx - y
; edi - screen buffer
; esi - z buffer filled with dd floats
 
push ebp
mov ebp,esp
sub esp,160
sub ebp,16
and ebp,0xfffffff0
 
.n1 equ [ebp-16]
.n2 equ [ebp-32]
.lv equ [ebp-48]
.lx1 equ [ebp-52]
.lx2 equ [ebp-56]
.z2 equ [ebp-60]
.z1 equ [ebp-64]
.screen equ [ebp-68]
.zbuff equ [ebp-72]
.x_max equ [ebp-74]
.x_min equ [ebp-76]
.y_max equ [ebp-78]
.y_min equ [ebp-80]
.dn equ [ebp-96]
.dz equ [ebp-100]
.y equ [ebp-104]
.cnv equ [ebp-128]
 
mov .y,ecx
packssdw xmm2,xmm2
movq .y_min,xmm2
cmp cx,.y_min
jl .end_rp_line
cmp cx,.y_max
jge .end_rp_line ;
 
cmp eax,ebx
je .end_rp_line
jl @f
xchg eax,ebx
movaps xmm7,xmm0
movaps xmm0,xmm1
movaps xmm1,xmm7
shufps xmm3,xmm3,11100001b
@@:
 
cmp ax,.x_max
jge .end_rp_line
cmp bx,.x_min
jle .end_rp_line
movaps .lv,xmm4
movaps .n1,xmm0
movaps .n2,xmm1
mov .lx1,eax
mov .lx2,ebx
movlps .z1,xmm3
 
sub ebx,eax
cvtsi2ss xmm7,ebx
shufps xmm7,xmm7,0
subps xmm1,xmm0
divps xmm1,xmm7
movaps .dn,xmm1
psrldq xmm3,4
subss xmm3,.z1
divss xmm3,xmm7
movss .dz,xmm3
 
 
 
mov ebx,.lx1
cmp bx,.x_min ; clipping on function4
jge @f
movzx eax,word .x_min
sub eax,ebx
cvtsi2ss xmm7,eax
shufps xmm7,xmm7,0
mulss xmm3,xmm7
mulps xmm1,xmm7
addss xmm3,.z1
addps xmm1,.n1
movsx eax,word .x_min
movss .z1,xmm3
movaps .n1,xmm1
mov dword .lx1,eax
 
@@:
movzx eax,word .x_max
cmp .lx2,eax
jl @f
mov .lx2,eax
@@:
movzx eax,word[size_x_var]
mul dword .y
; mov edx,.x1
add eax,.lx1
shl eax,2
add edi,eax
add esi,eax
 
mov ecx,.lx2
sub ecx,.lx1
movaps xmm0,.n1
movss xmm2,.z1
align 16
.ddraw:
movss xmm7,xmm2
cmpnltss xmm7,dword[esi]
movd eax,xmm7
or eax,eax
jnz .skip
movss [esi],xmm2
movaps xmm7,xmm0
mulps xmm7,xmm7 ; normalize
haddps xmm7,xmm7
haddps xmm7,xmm7
rsqrtps xmm7,xmm7
mulps xmm7,xmm0
movaps .cnv,xmm7
 
mov edx,lights_aligned ; lights - global variable
xorps xmm1,xmm1 ; instead global can be used .lv - light vect.
@@:
movaps xmm6,[edx+16]
movaps xmm5,[edx]
movaps xmm3,[edx+48]
andps xmm5,[zero_hgst_dd] ; global
 
mulps xmm5,.cnv ;.lv ; last dword should be zeroed
haddps xmm5,xmm5
haddps xmm5,xmm5
; mulps xmm5,[env_const2]
; maxps xmm5,[dot_min]
; minps xmm5,[dot_max]
movaps xmm7,xmm5
; mulps xmm7,[env_const2]
; mulps xmm7,[env_const2]
; maxps xmm7,[dot_min]
; minps xmm7,[dot_max]
 
mulps xmm7,xmm7
mulps xmm7,xmm7
mulps xmm5,xmm6
mulps xmm7,xmm7
mulps xmm7,xmm3
 
addps xmm5,xmm7
minps xmm5,[mask_255f] ; global
maxps xmm1,xmm5
; movq xmm3,[edx+20] ; minimal color
; punpcklwd xmm3,[minimum0]
; cvtdq2ps xmm3,xmm3
; maxps xmm1,xmm3
add edx,64
cmp edx,lights_aligned_end ; global
jnz @b
 
cvtps2dq xmm1,xmm1
packssdw xmm1,xmm1
packuswb xmm1,xmm1
movd [edi],xmm1
.skip:
add edi,4
add esi,4
addps xmm0,.dn
addss xmm2,.dz
sub ecx,1
jnz .ddraw
 
.end_rp_line:
add esp,160
pop ebp
 
ret
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/3stencil.inc
0,0 → 1,327
ROUND2 equ 10
 
stencil_tri:
; procedure calculate triangle in stencil buffer
; ----------------in - eax - x1 shl 16 + y1 ----------------------
; -------------------- ebx - x2 shl 16 + y2 ----------------------
; -------------------- ecx - x3 shl 16 + y3 ----------------------
; -------------------- esi - pointer to s-buffer -----------------
; -------------------- xmm0 - lo -> hi z1, z2, z3 as dword float
 
.x1 equ [ebp-2]
.y1 equ [ebp-4]
.x2 equ [ebp-6]
.y2 equ [ebp-8]
.x3 equ [ebp-10]
.y3 equ [ebp-12]
 
.dx12 equ dword[ebp-20]
.dx13 equ dword[ebp-24]
.dx23 equ dword[ebp-28]
.dz12 equ dword[ebp-32]
.dz13 equ dword[ebp-36]
.dz23 equ dword[ebp-40]
.zz2 equ [ebp-44]
.zz1 equ [ebp-48]
.z3 equ [ebp-56]
.z2 equ [ebp-60]
.z1 equ [ebp-64]
.s_buff equ [ebp-68]
 
push ebp
mov ebp,esp
sub esp,128
and ebp,0xfffffff0
.sort2:
cmp ax,bx
jle .sort1
xchg eax,ebx
shufps xmm0,xmm0,11100001b
.sort1:
cmp bx,cx
jle .sort3
xchg ebx,ecx
shufps xmm0,xmm0,11011000b
jmp .sort2
.sort3:
mov .y1,eax ; store triangle coordinates in user friendly variables
mov .y2,ebx
mov .y3,ecx
 
; mov edx,100.11
; movd xmm0,edx
; shufps xmm0,xmm0,11100000b
 
movaps .z1,xmm0
; mov dword .z1,edx
; mov .z2,edx
; mov .z3,edx
mov .s_buff,esi
 
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
and edx,ebx ; if *all* of them are negative a sign flag is raised
and edx,ecx
and edx,eax
test edx,80008000h ; Check both X&Y at once
jne .loop2_end
 
mov bx,.y2 ; calc delta 12
sub bx,.y1
jnz .dx12_make
mov .dx12,0
mov .dz12,0
jmp .dx12_done
.dx12_make:
mov ax,.x2
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx12,eax
 
movss xmm1,.z2
cvtsi2ss xmm2,ebx
subss xmm1,.z1
divss xmm1,xmm2
movss .dz12,xmm1
; mov .dz12, dword 0.11
 
.dx12_done:
mov bx,.y3 ; calc delta 13
sub bx,.y1
jnz .dx13_make
mov .dx13,0
mov .dz13,0
jmp .dx13_done
.dx13_make:
mov ax,.x3
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx13,eax
 
movss xmm1,.z3
cvtsi2ss xmm2,ebx
subss xmm1,.z1
divss xmm1,xmm2
movss .dz13,xmm1
; mov .dz13, dword 0.11
 
.dx13_done:
mov bx,.y3 ; calc delta 23
sub bx,.y2
jnz .dx23_make
mov .dx23,0
mov .dz23,0
jmp .dx23_done
.dx23_make:
mov ax,.x3
sub ax,.x2
cwde
movsx ebx,bx
shl eax,ROUND2
cdq
idiv ebx
mov .dx23,eax
 
movss xmm1,.z3
cvtsi2ss xmm2,ebx
subss xmm1,.z2
divss xmm1,xmm2
movss .dz23,xmm1
 
.dx23_done:
mov edx,.z1
 
mov .zz1,edx
mov .zz2,edx
movsx eax,word .x1
shl eax,ROUND2 ; eax - cur x1
mov ebx,eax ; ebx - cur x2
 
mov cx,.y1
cmp cx,.y2
jge .loop1_end
.loop1:
 
pushad
sar ebx,ROUND2
sar eax,ROUND2
; movq xmm0,.zz1
movlps xmm0,.zz1
; mov edx,0.11
; movd xmm0,edx
; shufps xmm0,xmm0,11100000b
mov esi,.s_buff
 
call stencil_line
 
popad
add eax,.dx13
add ebx,.dx12
 
movss xmm1,.zz1
movss xmm2,.zz2
addss xmm1,.dz13
addss xmm2,.dz12
movss .zz1,xmm1
movss .zz2,xmm2
 
add cx,1
cmp cx,.y2
jl .loop1
 
.loop1_end:
 
mov edx,.z2
mov .zz2,edx
movsx ebx,word .x2
shl ebx,ROUND2
 
mov cx,.y2
cmp cx,.y3
jge .loop2_end
.loop2:
pushad
 
sar ebx,ROUND2
sar eax,ROUND2
movlps xmm0,.zz1
mov esi,.s_buff
 
 
call stencil_line
 
popad
 
add eax,.dx13
add ebx,.dx23
 
movss xmm1,.zz1
movss xmm2,.zz2
addss xmm1,.dz13
addss xmm2,.dz23
movss .zz1,xmm1
movss .zz2,xmm2
 
 
add cx,1
cmp cx,.y3
jl .loop2
.loop2_end:
 
add esp,128
pop ebp
 
ret
 
stencil_line:
;----------------------------------------------------
;-------------in xmm0 - lo -> hi z1, z2
;--------------- eax - x1 ---------------------------
;--------------- ebx - x2 ---------------------------
;--------------- ecx - y-----------------------------
;--------------- esi - pointer to s-buffer
 
 
.dz equ [ebp-4]
.z2 equ [ebp-8]
.z1 equ [ebp-12]
.x2 equ [ebp-16]
.x1 equ [ebp-20]
.s_buf equ [ebp-24]
; cmp eax,ebx
; je @f
; int3
; @@:
push ebp
mov ebp,esp
sub esp,64
; cmp eax,0
; jg @f
;
; @@:
or cx,cx
jle .l_quit
 
cmp cx,[size_y_var]
jge .l_quit
 
movzx ecx,cx
mov .s_buf,esi
cmp eax,ebx
je .l_quit
jl .l_ok
 
xchg eax,ebx
shufps xmm0,xmm0,11100001b
.l_ok:
 
cmp ax,[size_x_var]
jge .l_quit
cmp bx,0
jle .l_quit
 
movlps .z1,xmm0
mov .x1,eax
mov .x2,ebx
 
sub ebx,eax
movss xmm0,.z2
cvtsi2ss xmm1,ebx
subss xmm0,.z1
divss xmm0,xmm1
movss .dz,xmm0
 
movzx edx,word[size_x_var]
cmp eax,1
jge @f
mov eax,.x1
neg eax
cvtsi2ss xmm2,eax
mulss xmm2,.dz
addss xmm2,.z1
movss .z1,xmm2
mov dword .x1,0
movzx edx,word[size_x_var]
sub edx,1
@@:
cmp .x2,edx
jl @f
mov .x2,edx
 
@@:
; mov eax,.x1
; cmp .x2,eax
; je .l_quit
movzx edx,word[size_x_var]
mov esi,.s_buf
mov eax,ecx ; y
mul edx
add eax,.x1
 
shl eax,2
add esi,eax
 
mov ecx,.x2
sub ecx,.x1
movss xmm2,.z1 ; cz
.ccalc:
; movss xmm1,xmm2
comiss xmm2,dword[esi]
jg @f
movss dword[esi],xmm2
@@:
add esi,4
addss xmm2,.dz
sub ecx,1
jnz .ccalc
.l_quit:
mov esp,ebp
pop ebp
ret
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/Tupfile.lua
0,0 → 1,2
if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("view3ds.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "view3ds")
/programs/demos/view3ds/a_procs.inc
0,0 → 1,623
do_sinus:
.x equ [ebp-8]
.y equ [ebp-12]
.new_y equ [ebp-16]
.temp equ [ebp-20]
push ebp
mov ebp,esp
sub esp,64
mov dword .x,0
mov dword .y,0
mov esi,[screen_ptr]
mov edi,[Zbuffer_ptr]
push edi
; clear Zbuffer temporally used as image buffer
movzx ecx,word[size_x_var]
movzx eax,word[size_y_var]
imul ecx,eax ;SIZE_X*SIZE_Y
xor eax,eax
cld
rep stosd
pop edi
fninit
.again:
fild dword .x
fmul [sin_frq]
fistp dword .temp
mov eax, .temp
 
and eax, 0x000000ff
 
 
fld dword [sin_tab+eax*4]
fimul dword [sin_amplitude]
fiadd dword .y
fistp dword .new_y
 
mov eax,.new_y
or eax,eax
jl .skip
movzx ebx,word[size_y_var]
cmp eax,ebx ;SIZE_Y
jg .skip
movzx edx,word[size_x_var]
mul edx
; shl eax,9
add eax,dword .x
 
lea ebx,[eax*3]
cmp [dr_flag],12 ; 32 bit col cause
jl @f
add ebx,eax
@@:
mov eax,[esi]
mov [edi+ebx],eax
.skip:
add esi,3
cmp [dr_flag],12
jl @f
inc esi
@@:
inc dword .x
movzx edx,word[size_x_var]
cmp dword .x,edx ;SIZE_X
jl .again
mov dword .x,0
inc dword .y
movzx edx,word[size_y_var]
cmp dword .y,edx ;SIZE_Y
jl .again
 
; copy from temporary buffer -> Zbuffer to screen
mov esi,[Zbuffer_ptr]
mov edi,[screen_ptr]
movzx ecx,word[size_x_var]
movzx eax,word[size_y_var]
imul ecx,eax
cmp [dr_flag],12
jge @f
lea ecx,[ecx*3]
shr ecx,2
; mov ecx,SIZE_X*SIZE_Y*3/4
@@:
cld
rep movsd
 
 
mov esp,ebp
pop ebp
ret
 
 
draw_dots:
mov esi,[points_translated_ptr]
mov ecx,[points_count_var]
.drw:
@@:
lodsd
add esi,2 ; skip z
movzx ebx,ax
shr eax,16 ; bx = x , ax = y
or ax,ax
jl @f
or bx,bx
jl @f
cmp ax,[size_y_var] ;SIZE_Y
jge @f
cmp bx,[size_x_var] ;SIZE_X
jge @f
movzx edx,word[size_x_var] ;SIZE_X ; SIZE_X not only power of 2 -> 256,512,...
mul edx
add eax,ebx
mov edi,[screen_ptr]
lea eax,[eax*3]
add edi,eax
xor eax,eax
not eax
stosd
@@:
loop .drw
 
ret
 
do_emboss: ; sse2 version only
if Ext >= SSE2
movzx ecx,[bumps_deep_flag]
inc ecx
call blur_screen ;blur n times
 
mov eax,[size_y_var] ;load both x, y
mov ebx,eax
shr ebx,16
cwde
mul ebx
mov ecx,eax
sub ecx,ebx
sub ecx,ebx
mov esi,[screen_ptr]
mov edi,[Zbuffer_ptr]
cmp [dr_flag],12
jge @f
lea ebx,[ebx*3]
jmp .f
@@:
shl ebx,2
.f:
mov edx,esi
add esi,ebx
lea ebx,[ebx+esi]
pxor xmm0,xmm0
push eax
.emb:
cmp [dr_flag],12
jge @f
movlps xmm1,[esi+3]
movhps xmm1,[esi+6]
movlps xmm2,[esi-3]
movhps xmm2,[esi]
movlps xmm3,[ebx]
movhps xmm3,[ebx+3]
movlps xmm4,[edx]
movhps xmm4,[edx+3]
jmp .ff
@@:
movlps xmm1,[esi+4]
movhps xmm1,[esi+8]
movlps xmm2,[esi-4]
movhps xmm2,[esi]
movlps xmm3,[ebx]
movhps xmm3,[ebx+4]
movlps xmm4,[edx]
movhps xmm4,[edx+4]
.ff:
punpcklbw xmm1,xmm0
punpcklbw xmm2,xmm0
punpcklbw xmm3,xmm0
punpcklbw xmm4,xmm0
psubsw xmm1,xmm2
paddw xmm1,[emboss_bias]
psubsw xmm3,xmm4
paddw xmm3,[emboss_bias]
pmulhw xmm1,xmm3
movaps xmm7,xmm1
movaps xmm6,xmm1
psrlq xmm7,2*8
psrlq xmm6,4*8
pmaxsw xmm1,xmm7
pmaxsw xmm1,xmm6
 
if 0
movaps xmm7,xmm3
movaps xmm6,xmm3
psrlq xmm7,2*8
psrlq xmm6,4*8
pmaxsw xmm3,xmm7
pmaxsw xmm3,xmm6
end if
pmaxsw xmm1,xmm3
 
movd eax,xmm1
movzx eax,al
; cmp [dr_flag],12
; je @f
lea eax,[eax*3+envmap_cub]
; jmp .fff
;@@:
 
mov eax,[eax]
mov [edi],eax ;xmm1
psrldq xmm1,8
movd eax,xmm1
movzx eax,al
lea eax,[eax*3+envmap_cub]
mov eax,[eax]
mov [edi+4],eax
 
cmp [dr_flag],12
jl @f
add esi,2
add ebx,2
add edx,2
@@:
 
add edi,8
add esi,6
add ebx,6
add edx,6
sub ecx,2
jnc .emb
 
 
pop ecx ;,eax
mov edi,[screen_ptr]
mov esi,[Zbuffer_ptr]
cmp [dr_flag],12
jge .e
@@:
movsd
dec edi
loop @b
.e:
rep movsd
 
end if
 
ret
 
 
;********************************EMBOSS DONE*******************************
 
 
generate_object2: ; torus
;in ax - figure number 2=torus, 3=loop, 4=loop
;locals
; counter dw ?
; sin dd ?
; cos dd ?
;endl
.counter equ word[ebp-2]
.sin equ dword[ebp-6]
.cos equ dword[ebp-10]
.sin2 equ dword[ebp-14]
.cos2 equ dword[ebp-18]
.piD180m3 equ dword[ebp-22]
.cD2 equ word[ebp-24]
push ebp
mov ebp,esp
sub esp,24
 
push ax
 
fninit
mov edi,[points_ptr]
xor eax,eax
; init seed -> 4 3d points
mov dword[edi],-1.0 ; x
add edi,4
stosd ; y
stosd ; z
mov dword[edi],-0.9 ; x1
mov dword[edi+4],0.1 ; y1
add edi,8
stosd ; z1
mov dword[edi],-0.8
add edi,4
stosd
stosd
mov dword[edi],-0.9 ; x3
mov dword[edi+4],-0.1 ; y3
add edi,8
stosd ; z3
mov [points_count_var],4
 
fld [piD180]
fidiv [i3]
fstp .piD180m3
mov .cD2,5
 
pop ax
mov ecx,1
mov edx,9
.next: ; calc angle and rotate seed 4 points
mov .counter,cx
mov ebx,[points_ptr]
fld .piD180m3
fimul .counter
fld st
fsincos
fstp .sin
fstp .cos
fadd st,st0
fsincos
fstp .sin2
fstp .cos2
 
.rotor: ; next 4
; rotary y
fld dword[ebx] ; x
fld .sin
fmul dword[ebx+8] ; z * sinbeta
fchs
fld .cos
fmul dword[ebx] ; x * cosbeta
faddp
fstp dword[edi] ; new x
fmul .sin ; old x * sinbeta
fld .cos
fmul dword[ebx+8] ; z * cosbeta
faddp
dec dx
or dx,dx
jnz @f
; mov .counter,dx
fld st
fidiv [i3]
faddp
@@:
fstp dword[edi+8] ; new z
fld dword[ebx+4]
or dx,dx
jnz @f
; fld1
; faddp
; fld st
fadd st,st0
fadd st,st0
; fxch
; fimul [i3]
; fsin
; faddp
mov dx,9
@@:
fstp dword[edi+4]
; rotary x
cmp al,3
jl .end_rot
fld dword[edi+4] ;y
fld .sin2
fmul dword[edi+8] ;z
fld .cos2
fmul dword[edi+4] ;y
faddp
fstp dword[edi+4] ; new y
fmul .sin2 ; sinbeta * old y
fchs
fld .cos2
fmul dword[edi+8]
faddp
fstp dword[edi+8]
; rotary z
cmp al,4
jl .end_rot
fld dword[edi] ;x
fld .sin
fmul dword[edi+4] ;y
fld .cos
fmul dword[edi] ;x
faddp
fstp dword[edi] ;new x
fmul .sin ; sinbeta * old x
fchs
fld .cos
fmul dword[edi+4] ; cosbeta * y
faddp
fstp dword[edi+4] ; new y
 
 
 
.end_rot:
 
add edi,12
add ebx,12
mov esi,[points_ptr]
add esi,12*4
cmp ebx,esi
jl .rotor
 
add [points_count_var],4
add cx,18
cmp cx,(18*21*3)+1
jle .next
 
mov edi,[triangles_ptr]
mov eax,4
mov ebx,4+4
mov [triangles_count_var],160*3 ;164*3 ;140
 
mov ecx,80*3 ;68
@@:
stosd ;----
mov [edi],ebx ; |
add edi,4 ; |
inc eax ; |
stosd ; |repeat 4 times
 
mov [edi],ebx ; |
inc ebx
add edi,4
stosd ; |
mov [edi],ebx ; |
add edi,4 ;----
loop @b
 
 
mov dword[edi],-1 ; < - end mark
mov [culling_flag],0
 
mov esp,ebp
pop ebp
 
ret
generate_object3: ; heart
;locals
; counter dw ?
; sin dd ?
; cos dd ?
;endl
.counter equ word[ebp-2]
.sin equ dword[ebp-6]
.cos equ dword[ebp-10]
.sin2 equ dword[ebp-14]
.cos2 equ dword[ebp-18]
.piD180m3 equ dword[ebp-22]
.cD2 equ word[ebp-24]
push ebp
mov ebp,esp
sub esp,24
 
fninit
mov edi,[points_ptr]
xor eax,eax
; init seed -> eight 3d points
mov dword[edi],2.0
add edi,4
stosd
stosd
 
mov dword[edi],2.0
mov dword[edi+4],-0.5
add edi,8
stosd
 
mov dword[edi],1.5
mov dword[edi+4],-1.5
add edi,8
stosd
mov dword[edi],1.0
mov dword[edi+4],-2.0
add edi,8
stosd
 
stosd
mov dword[edi],-2.5
add edi,4
stosd
 
mov [points_count_var],5
 
mov ecx,1
.next: ; calc angle and rotate seed 4 points
mov .counter,cx
mov ebx,[points_ptr]
fld [piD180]
fimul .counter
fsincos
fstp .sin
fstp .cos
 
.rotor: ; next 4
; rotary y
fld dword[ebx] ; x
fld .sin
fmul dword[ebx+8] ; z * sinbeta
fchs
fld .cos
fmul dword[ebx] ; x * cosbeta
faddp
fidiv [i3]
fstp dword[edi] ; new x
fmul .sin ; old x * sinbeta
fld .cos
fmul dword[ebx+8] ; z * cosbeta
faddp
fstp dword[edi+8] ; new z
 
fld dword[ebx+4] ;y
fstp dword[edi+4]
 
 
.end_rot:
 
add edi,12
add ebx,12
mov esi,[points_ptr]
add esi,12*5
cmp ebx,esi ;real_points + (12*5)
jl .rotor
 
add [points_count_var],5
add cx,18
cmp cx,(18*21)+1
jle .next
;last points
 
xor eax,eax
 
mov dword[edi],0.22
mov dword[edi+4],0.77
mov dword[edi+8],1.25
add edi,12
 
mov dword[edi],0.22
mov dword[edi+4],0.77
mov dword[edi+8],-1.25
add edi,12
stosd
 
add [points_count_var],2
 
; init triangles list
 
mov edi,[triangles_ptr]
mov eax,5
mov ebx,5+5
mov [triangles_count_var],200 ;204
 
mov ecx,100
@@:
stosd ;----
mov [edi],ebx ; |
add edi,4 ; |
inc eax ; |
stosd ; |repeat
 
mov [edi],ebx ; |
inc ebx
add edi,4
stosd ; |
mov [edi],ebx ; |
add edi,4 ;----
loop @b
 
mov eax,5
mov ebx,[points_count_var]
sub ebx,2
mov dl,2
.nx:
mov ecx,5
add [triangles_count_var],ecx
@@:
stosd
add eax,5
stosd
mov dword[edi],ebx
add edi,4
loop @b
 
cmp dl,1
je @f
 
inc ebx
jmp .lab
@@:
dec ebx
.lab:
mov ecx,5
add [triangles_count_var],ecx
@@:
stosd
add eax,5
stosd
mov dword[edi],ebx
add edi,4
loop @b
 
dec dl
or dl,dl
jnz .nx
 
sub eax,25
stosd
sub eax,50
stosd
mov dword[edi],ebx
add edi,4
 
stosd
add eax,50
stosd
inc ebx
mov dword[edi],ebx
add edi,4
add [triangles_count_var],2
 
mov dword[edi],-1 ; < - end mark
mov [culling_flag],0
 
mov esp,ebp
pop ebp
 
ret
 
 
 
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/asc.inc
0,0 → 1,815
; Files *.asc routines by Maciej Guba
; Thanks to Reverend for integer/float/ascii conversion examples
read_asc:
mov eax,[fptr]
.find_vert:
cmp dword[eax],'Vert'
je @f
inc eax
jmp .find_vert
@@:
add eax,4
cmp dword[eax],'ices'
jne .find_vert
add eax,3
@@:
inc eax
cmp byte[eax],'0' ; search end of ascii number of vertices string
jb @b
cmp byte[eax],'9'
ja @b
; eax - start ascii number
@@:
inc eax
cmp byte[eax],'0'
jb .convert1
cmp byte[eax],'9'
ja .convert1
jmp @b
.convert1:
dec eax
mov ebx,eax
push eax
call ascii_to_integer
mov [points_count_var],edx
pop eax
 
@@:
inc eax
cmp dword[eax],'Face'
jne @b
add eax,3
@@:
inc eax
cmp byte[eax],'0'
jb @b
cmp byte[eax],'9'
ja @b
; eax - start ascii number
@@:
inc eax
cmp byte[eax],'0'
jb .convert2
cmp byte[eax],'9'
ja .convert2
jmp @b
; eax - end ascii number
.convert2:
dec eax
mov ebx,eax
push eax
call ascii_to_integer
mov [triangles_count_var],edx
pop eax
 
@@:
inc eax
cmp dword[eax],'Vert'
jnz @b
inc eax
 
mov edi,[points_ptr]
xor ebx,ebx
.decode_vertices:
push ebx
@@:
inc eax
cmp dword[eax],'Vert'
jne @b
xor ecx,ecx
 
.decode_coord:
push ecx
@@:
inc eax
mov dl,byte[eax]
cmp dl,byte[XYZpartices+ecx]
jne @b
@@:
inc eax
cmp byte[eax],'.'
je .readF
cmp byte[eax],'-'
je .readF
cmp byte[eax],'0'
jb @b
cmp byte[eax],'9'
ja @b
.readF: ; read float
mov esi,eax
push eax
push ecx
 
call atof ; st0 - desired dword float
 
pop ecx
pop eax
 
fstp dword[edi]
add edi,4
 
pop ecx
inc ecx
cmp ecx,3
jne .decode_coord
pop ebx
inc ebx
cmp ebx,[points_count_var]
jne .decode_vertices
mov dword[edi],-1
 
 
 
mov esi,eax
@@:
inc esi
cmp dword[esi],'Face'
jne @b
xor edx,edx
mov edi,[triangles_ptr]
cld
.decode_face:
 
push edx
@@:
inc esi
cmp dword[esi],'Face'
jne @b
@@:
inc esi
cmp byte[esi],'0' ; face number start
jb @b
cmp byte[esi],'9'
ja @b
@@:
inc esi
cmp byte[esi],'0'
jb @f
cmp byte[esi],'9' ; face number end
ja @f
jmp @b
@@:
xor ecx,ecx
.next_vertex_number:
 
push ecx
@@:
inc esi
cmp byte[esi],'0'
jb @b
cmp byte[esi],'9'
ja @b
; eax - start ascii number
@@:
inc esi
cmp byte[esi],'0'
jb @f
cmp byte[esi],'9'
ja @f
jmp @b
; eax - end ascii number
@@:
dec esi
mov ebx,esi
push esi
call ascii_to_integer
mov eax,edx
 
stosd
pop esi
add esi,4
 
pop ecx
inc ecx
cmp ecx,3
jne .next_vertex_number
pop edx
inc edx
cmp edx,[triangles_count_var]
jne .decode_face
mov dword[edi],-1 ;dword[triangles+ebx+2],-1 ; end mark
mov eax,1 ;-> mark if ok
ret
 
ascii_to_integer:
; in --- [ebx] -> end of ascii string
; out -- edx -> desired number
xor edx,edx
xor ecx,ecx
.again:
movzx eax,byte[ebx]
sub al,'0'
cwde
push edx
mul dword[convert_muler+ecx]
pop edx
add edx,eax
dec ebx
cmp byte[ebx],'0'
jb .end
cmp byte[ebx],'9'
ja .end
add ecx,4
jmp .again
@@:
 
.end:
ret
 
;===============================================================================
; ASCII to float conversion procedure
;
; input:
; esi - pointer to string
;
; output:
; st0 - number changed into float
;
;===============================================================================
 
atof:
.string equ ebp-4
 
push ebp
mov ebp,esp
sub esp,32
push eax ecx esi
mov [.string],esi
fninit
fldz
fldz
 
cld
cmp byte [esi], '-'
jnz @F
inc esi
@@:
xor eax, eax
align 4
.loop.integer_part:
lodsb
cmp al, '.'
jz .mantisa
cmp al,'0'
jb .exit
cmp al,'9'
ja .exit
fimul [i10]
sub al, '0'
push eax
fiadd dword [esp]
add esp, 4
jmp .loop.integer_part
 
.mantisa:
xor ecx, ecx
xor eax, eax
cld
fxch st1
@@:
 
lodsb
cmp al,'0'
jb .exit
cmp al,'9'
ja .exit
cmp ecx,7*4
je .exit ; max 7 digits in mantisa
sub al,'0'
push eax
fild dword[esp]
fidiv dword[convert_muler+4+ecx]
faddp
add esp,4
add ecx,4
jmp @b
.exit:
faddp
 
mov eax, [.string]
cmp byte [eax], '-'
jnz @F
fchs
@@:
cld
stc ; always returns no error
pop esi ecx eax
mov esp,ebp
pop ebp
ret
 
 
itoa: ; unsigned dword integer to ascii procedure
; in eax - variable
; esi - Pointer to ascii string
; out esi - desired ascii string
; edi - end of ascii string - ptr to memory
.temp_string equ dword[ebp-36]
.ptr equ dword[ebp-40]
.var equ dword[ebp-44]
push ecx
push ebp
mov ebp,esp
sub esp,64
mov .var,eax
mov eax,-1
lea edi,.temp_string
cld
mov ecx,9
rep stosd ; make floor
 
 
mov .ptr,esi
lea edi,.temp_string
add edi,34
std
xor eax,eax
stosb ; mark begin
mov eax,.var
mov esi,10
@@:
xor edx,edx
div esi
xchg eax,edx
add al,'0'
stosb
xchg eax,edx
or eax,eax
jnz @b
stosb ; mark end
 
lea esi,.temp_string
cld
@@:
lodsb
or al,al
jnz @b
 
mov edi,.ptr
@@:
lodsb
stosb
or al,al
jnz @b
 
mov esp,ebp
pop ebp
pop ecx
ret
if 1
ftoa_mac:
; in : esi - pointer to dword float
; edi - pointer to ascii string
.ptr_f equ dword[ebp-4]
.sign equ dword[ebp-8] ; 0 -> less than zero, 1 - otherwise
.ptr_ascii equ dword[ebp-12]
.integer equ dword[ebp-20]
.fraction equ dword[ebp-28]
.status_orginal equ word[ebp-32]
.status_changed equ word[ebp-34]
push ecx
push ebp
mov ebp,esp
sub esp,64
fninit
fnstcw .status_orginal
mov ax, .status_orginal
or ax, 0000110000000000b
mov .status_changed, ax
fldcw .status_changed
; --------------------------------
; check if signed
xor eax, eax
fld dword[esi]
fst .sign
test .sign, 80000000h
setz al
mov .sign, eax
 
mov .ptr_f,esi
mov .ptr_ascii,edi
fabs
fld st0
frndint
fist .integer
fsubp st1, st0
 
mov eax,.integer
mov esi,.ptr_ascii
call itoa
; edi -> ptr to end of ascii string
dec edi
mov al,'.'
stosb
 
mov ecx, 6 ; max 6 digits in fraction part
.loop:
fimul [i10]
fld st0
frndint
fist .fraction
fsubp st1, st0
mov esi,edi
mov eax,.fraction
add al,'0'
stosb
ftst
fnstsw ax
test ax, 0100000000000000b
jz @F
test ax, 0000010100000000b
jz .finish
@@:
loop .loop
if 0
fldcw .status_orginal
fimul [i10]
fist .fraction
; mov esi,edi
mov eax,.fraction
add al,'0'
stosb
; call itoa
; --------------------------------
; restore previous values
.finish:
; fstp st0
ffree st
mov eax,.fraction
mov esi,edi
; call itoa
 
add al,'0'
stosb
end if
.finish:
ffree st
cmp .sign,0
jnz @f
mov esi,.ptr_ascii
dec esi
mov byte[esi],'-'
@@:
mov esp,ebp
pop ebp
pop ecx
 
ret
end if
if 0
;===============================================================================
; float to ASCII conversion procedure
;
; input:
; buffer - pointer to memory where output will be saved
; precision - number of digits after dot
;
; output:
; no immediate output
;
; notes:
; separate integer and mantisa part with dot '.'
; so GOOD 123.456
; WRONG 123,456
;
; coded by Reverend // HTB + RAG
;===============================================================================
proc ftoa buffer, precision
locals
status_original dw ?
status_changed dw ?
integer dd ?
mantisa dd ?
signed dd ?
endl
push eax ecx;edi ecx
; --------------------------------
; set correct precision
mov eax, [precision]
cmp eax, 51
jb @F
mov eax, 51
@@:
mov [precision], eax
; --------------------------------
; change control wortd of fpu to prevent rounding
fnstcw [status_original]
mov ax, [status_original]
or ax, 0000110000000000b
mov [status_changed], ax
fldcw [status_changed]
; --------------------------------
; check if signed
xor eax, eax
fst [signed]
test [signed], 80000000h
setnz al
mov [signed], eax
; --------------------------------
; cut integer and mantisa separately
fld st0
fld st0 ; st0 = x, st1 = x
frndint
fist [integer] ; st0 = x, st1 = x
fabs
fsubp st1, st0 ; st0 = mantisa(x)
; --------------------------------
; save integer part in buffer
; mov edi, [buffer]
mov esi,[buffer]
; push [signed]
; push edi
; push 10
; push [integer]
mov eax,[integer]
call itoa
; add edi, eax
mov al, '.'
stosb
mov esi,edi
; --------------------------------
; save mantisa part in buffer
mov ecx, [precision]
dec ecx
.loop:
fimul [i10]
fld st0
frndint
fist [mantisa]
fsubp st1, st0
; push 0
; push edi
; push 10
; push [mantisa]
mov esi,edi
mov eax,[mantisa]
call itoa
; add edi, eax
ftst
fnstsw ax
test ax, 0100000000000000b
jz @F
test ax, 0000010100000000b
jz .finish
@@:
loop .loop
fldcw [status_original]
fimul [i10]
fist [mantisa]
; push 0
; push edi
; push 10
; push [mantisa]
mov esi,edi
mov eax,[mantisa]
call itoa
; --------------------------------
; restore previous values
.finish:
fstp st0
cmp [signed],1
jnz @f
mov byte[buffer],'-'
@@:
stc
pop ecx eax ;edi eax
ret
endp
end if
if 0
write_asc:
.counter equ dword[ebp-4]
push ebp
mov ebp,esp
sub esp,64
fninit
mov edi,asc_file_buffer
mov esi,asc_main_header
cld
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
 
mov esi,asc_info_header
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
push esi ; -> position in header info
movzx eax,[points_count_var]
mov esi,edi
call itoa ; unsigned dword integer to ascii procedure
pop esi
inc esi
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
push esi
movzx eax,[triangles_count_var]
mov esi,edi
call itoa
pop esi
inc esi
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
;=============================================================
;================vertex list parser===========================
;=============================================================
 
xor ecx,ecx
.again_vertex:
push ecx
mov esi,asc_one_vertex_formula
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
mov eax,ecx
; push ecx
push esi
mov esi,edi
call itoa
pop esi
; pop ecx
inc esi
xor ebx,ebx
.next_vertex_coef:
push ebx
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
; int3
push esi
lea esi,[ecx*3]
shl esi,2
add esi,points_r
add esi,ebx
; int3
call ftoa_mac
; std
; fld dword[esi]
 
 
; pushad
; stdcall ftoa, edi, 30
; popad
; add edi,20
 
 
pop esi
pop ebx
add ebx,4
cmp ebx,12
jnz .next_vertex_coef
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
pop ecx
inc ecx
cmp cx,[points_count_var]
jnz .again_vertex
 
 
; mov edi,[temp_edi]
 
 
mov esi,asc_face_list_header
@@:
lodsb
cmp al,1 ; all face header
jz @f
stosb
jmp @b
@@:
;=====================================
; ==============face list parser======
;=====================================
xor ecx,ecx
.again_face:
push ecx
mov .counter,ecx
mov esi,asc_one_face_formula
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
mov eax,ecx
push esi
mov esi,edi
call itoa
pop esi
inc esi
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
 
xor ebx,ebx
.next_face_index:
push ebx
mov ecx,.counter
lea ecx,[ecx*3]
add ecx,ecx
movzx eax,word[triangles+ecx+ebx]
push esi
mov esi,edi
call itoa
pop esi
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
pop ebx
add ebx,2
cmp ebx,6
jnz .next_face_index
 
; push esi
mov esi,asc_material
@@:
lodsb
cmp al,1
jz @f
stosb
jmp @b
@@:
; pop esi
 
pop ecx
inc ecx
cmp cx,[triangles_count_var]
jnz .again_face
 
; write file
sub edi,asc_file_buffer
; mov [file_buffer+2],edi
mov [FileSize],edi
 
invoke CreateFile,asc_file_name, GENERIC_WRITE, 0, 0,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
mov [hfile],eax
invoke WriteFile,eax,asc_file_buffer,[FileSize], byteswritten, 0
invoke CloseHandle,[hfile]
 
mov esp,ebp
pop ebp
ret
end if
if 0
asc_file_buffer:
rd 65536
ascii_string rb 50
ftoa_muler dd 1000000000
file_size dd ?
file_handle dd ?
end if
 
if 0
convert_muler:
dd 1, 10, 100, 1000, 10000
XYZpartices:
db 'X','Y','Z'
i10 dw 10
points_count_var dd ?
triangles_count_var dd ?
points rb 100
triangles rb 100
asc_file:
 
file "2TORUS.ASC"
end if
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/asc_objects/2TORUS.ASC
0,0 → 1,3894
Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
 
Named object: "Object01"
Tri-mesh, Vertices: 512 Faces: 1024
Vertex list:
Vertex 0: X: -99.192619 Y: 226.066895 Z: -0.00002
Vertex 1: X: -97.418694 Y: 223.674133 Z: 14.974417
Vertex 2: X: -92.366959 Y: 216.860184 Z: 27.66913
Vertex 3: X: -84.806511 Y: 206.662369 Z: 36.15147
Vertex 4: X: -75.888351 Y: 194.63324 Z: 39.130074
Vertex 5: X: -66.9702 Y: 182.604095 Z: 36.15147
Vertex 6: X: -59.409748 Y: 172.406281 Z: 27.669136
Vertex 7: X: -54.358021 Y: 165.592316 Z: 14.974428
Vertex 8: X: -52.584087 Y: 163.19957 Z: -0.000005
Vertex 9: X: -54.358017 Y: 165.592316 Z: -14.974438
Vertex 10: X: -59.409744 Y: 172.406265 Z: -27.669153
Vertex 11: X: -66.970192 Y: 182.60408 Z: -36.151497
Vertex 12: X: -75.888351 Y: 194.633224 Z: -39.1301
Vertex 13: X: -84.806519 Y: 206.662369 Z: -36.151497
Vertex 14: X: -92.366966 Y: 216.860184 Z: -27.669159
Vertex 15: X: -97.418694 Y: 223.674149 Z: -14.974438
Vertex 16: X: -142.843033 Y: 177.923004 Z: -0.000013
Vertex 17: X: -140.288467 Y: 176.391266 Z: 14.974423
Vertex 18: X: -133.013687 Y: 172.029205 Z: 27.669138
Vertex 19: X: -122.126213 Y: 165.5009 Z: 36.151478
Vertex 20: X: -109.283562 Y: 157.800262 Z: 39.130077
Vertex 21: X: -96.440903 Y: 150.099609 Z: 36.151474
Vertex 22: X: -85.553429 Y: 143.57132 Z: 27.669144
Vertex 23: X: -78.278648 Y: 139.209259 Z: 14.974431
Vertex 24: X: -75.724083 Y: 137.67749 Z: -0.000001
Vertex 25: X: -78.278648 Y: 139.209244 Z: -14.974435
Vertex 26: X: -85.553421 Y: 143.57132 Z: -27.669147
Vertex 27: X: -96.440903 Y: 150.099594 Z: -36.151489
Vertex 28: X: -109.283562 Y: 157.800247 Z: -39.130096
Vertex 29: X: -122.126221 Y: 165.5009 Z: -36.151493
Vertex 30: X: -133.013702 Y: 172.02919 Z: -27.669153
Vertex 31: X: -140.288483 Y: 176.391266 Z: -14.97443
Vertex 32: X: -164.746902 Y: 116.739586 Z: -0.000004
Vertex 33: X: -161.800613 Y: 116.302017 Z: 14.974433
Vertex 34: X: -153.410309 Y: 115.055931 Z: 27.669147
Vertex 35: X: -140.853317 Y: 113.191032 Z: 36.151485
Vertex 36: X: -126.041344 Y: 110.991234 Z: 39.130085
Vertex 37: X: -111.22937 Y: 108.791435 Z: 36.151482
Vertex 38: X: -98.672386 Y: 106.926529 Z: 27.669147
Vertex 39: X: -90.282074 Y: 105.680443 Z: 14.974437
Vertex 40: X: -87.335785 Y: 105.242874 Z: 0.000004
Vertex 41: X: -90.282066 Y: 105.680443 Z: -14.974429
Vertex 42: X: -98.672371 Y: 106.926521 Z: -27.669142
Vertex 43: X: -111.229362 Y: 108.79142 Z: -36.151485
Vertex 44: X: -126.041344 Y: 110.991219 Z: -39.130089
Vertex 45: X: -140.853333 Y: 113.191025 Z: -36.151485
Vertex 46: X: -153.410324 Y: 115.055923 Z: -27.669144
Vertex 47: X: -161.800629 Y: 116.302017 Z: -14.974421
Vertex 48: X: -161.569565 Y: 51.831223 Z: 0.000006
Vertex 49: X: -158.680099 Y: 52.554459 Z: 14.974442
Vertex 50: X: -150.451599 Y: 54.614059 Z: 27.669155
Vertex 51: X: -138.136795 Y: 57.696468 Z: 36.151493
Vertex 52: X: -123.610481 Y: 61.332413 Z: 39.130089
Vertex 53: X: -109.084167 Y: 64.968361 Z: 36.151485
Vertex 54: X: -96.769363 Y: 68.050766 Z: 27.669153
Vertex 55: X: -88.540871 Y: 70.110359 Z: 14.974442
 
Page 1
 
 
 
Vertex 56: X: -85.651405 Y: 70.833595 Z: 0.000009
Vertex 57: X: -88.540871 Y: 70.110359 Z: -14.974424
Vertex 58: X: -96.769356 Y: 68.050766 Z: -27.669136
Vertex 59: X: -109.084167 Y: 64.968353 Z: -36.151478
Vertex 60: X: -123.610481 Y: 61.332401 Z: -39.130081
Vertex 61: X: -138.136795 Y: 57.696453 Z: -36.151478
Vertex 62: X: -150.451614 Y: 54.614052 Z: -27.669134
Vertex 63: X: -158.680099 Y: 52.554455 Z: -14.974411
Vertex 64: X: -133.794724 Y: -6.920366 Z: 0.000015
Vertex 65: X: -131.401978 Y: -5.146431 Z: 14.97445
Vertex 66: X: -124.588013 Y: -0.094702 Z: 27.669165
Vertex 67: X: -114.390198 Y: 7.465739 Z: 36.151497
Vertex 68: X: -102.361053 Y: 16.383898 Z: 39.130096
Vertex 69: X: -90.331909 Y: 25.30205 Z: 36.151493
Vertex 70: X: -80.134094 Y: 32.862492 Z: 27.669157
Vertex 71: X: -73.320129 Y: 37.914215 Z: 14.974447
Vertex 72: X: -70.927383 Y: 39.688148 Z: 0.000014
Vertex 73: X: -73.320129 Y: 37.914215 Z: -14.974419
Vertex 74: X: -80.134087 Y: 32.862488 Z: -27.669132
Vertex 75: X: -90.331902 Y: 25.30204 Z: -36.151474
Vertex 76: X: -102.361053 Y: 16.383888 Z: -39.130077
Vertex 77: X: -114.390198 Y: 7.465729 Z: -36.15147
Vertex 78: X: -124.58802 Y: -0.094717 Z: -27.669127
Vertex 79: X: -131.401978 Y: -5.146442 Z: -14.974403
Vertex 80: X: -85.650818 Y: -50.570816 Z: 0.000021
Vertex 81: X: -84.119064 Y: -48.016247 Z: 14.974457
Vertex 82: X: -79.756996 Y: -40.741467 Z: 27.66917
Vertex 83: X: -73.228699 Y: -29.853992 Z: 36.151505
Vertex 84: X: -65.528053 Y: -17.011341 Z: 39.1301
Vertex 85: X: -57.827404 Y: -4.168683 Z: 36.151497
Vertex 86: X: -51.299114 Y: 6.718789 Z: 27.669163
Vertex 87: X: -46.937046 Y: 13.993567 Z: 14.97445
Vertex 88: X: -45.405293 Y: 16.54813 Z: 0.000017
Vertex 89: X: -46.937046 Y: 13.993564 Z: -14.974416
Vertex 90: X: -51.299107 Y: 6.71879 Z: -27.669127
Vertex 91: X: -57.827404 Y: -4.168693 Z: -36.15147
Vertex 92: X: -65.528053 Y: -17.011351 Z: -39.130074
Vertex 93: X: -73.228706 Y: -29.85401 Z: -36.151466
Vertex 94: X: -79.756996 Y: -40.741489 Z: -27.669121
Vertex 95: X: -84.119064 Y: -48.016266 Z: -14.974397
Vertex 96: X: -24.467348 Y: -72.474686 Z: 0.000024
Vertex 97: X: -24.029781 Y: -69.528389 Z: 14.97446
Vertex 98: X: -22.783695 Y: -61.138088 Z: 27.669172
Vertex 99: X: -20.918798 Y: -48.581097 Z: 36.151505
Vertex 100: X: -18.719 Y: -33.769123 Z: 39.130104
Vertex 101: X: -16.519203 Y: -18.95715 Z: 36.151497
Vertex 102: X: -14.654305 Y: -6.400167 Z: 27.669165
Vertex 103: X: -13.40822 Y: 1.990143 Z: 14.974452
Vertex 104: X: -12.970654 Y: 4.93643 Z: 0.000019
Vertex 105: X: -13.40822 Y: 1.990146 Z: -14.974414
Vertex 106: X: -14.654305 Y: -6.400159 Z: -27.669125
Vertex 107: X: -16.519203 Y: -18.957151 Z: -36.15147
Vertex 108: X: -18.719 Y: -33.769131 Z: -39.13007
Vertex 109: X: -20.918798 Y: -48.58112 Z: -36.151463
Vertex 110: X: -22.783697 Y: -61.138111 Z: -27.669117
Vertex 111: X: -24.029781 Y: -69.528412 Z: -14.974394
Vertex 112: X: 40.441055 Y: -69.297318 Z: 0.000024
Vertex 113: X: 39.717819 Y: -66.407845 Z: 14.974459
Vertex 114: X: 37.658218 Y: -58.179363 Z: 27.669172
Vertex 115: X: 34.575806 Y: -45.864559 Z: 36.151505
Vertex 116: X: 30.939854 Y: -31.338243 Z: 39.130104
 
Page 2
 
 
 
Vertex 117: X: 27.3039 Y: -16.811939 Z: 36.151497
Vertex 118: X: 24.221489 Y: -4.497129 Z: 27.669165
Vertex 119: X: 22.161888 Y: 3.731354 Z: 14.974452
Vertex 120: X: 21.438652 Y: 6.620817 Z: 0.000019
Vertex 121: X: 22.161886 Y: 3.731357 Z: -14.974415
Vertex 122: X: 24.221487 Y: -4.497129 Z: -27.669125
Vertex 123: X: 27.3039 Y: -16.811941 Z: -36.15147
Vertex 124: X: 30.939854 Y: -31.338255 Z: -39.13007
Vertex 125: X: 34.575809 Y: -45.864567 Z: -36.151466
Vertex 126: X: 37.658222 Y: -58.179386 Z: -27.669119
Vertex 127: X: 39.717823 Y: -66.407867 Z: -14.974395
Vertex 128: X: 99.192673 Y: -41.52243 Z: 0.00002
Vertex 129: X: 97.418739 Y: -39.129681 Z: 14.974456
Vertex 130: X: 92.367004 Y: -32.315723 Z: 27.669168
Vertex 131: X: 84.806557 Y: -22.117916 Z: 36.151501
Vertex 132: X: 75.88839 Y: -10.088779 Z: 39.1301
Vertex 133: X: 66.97023 Y: 1.940364 Z: 36.151497
Vertex 134: X: 59.409779 Y: 12.138169 Z: 27.669163
Vertex 135: X: 54.358047 Y: 18.952124 Z: 14.974449
Vertex 136: X: 52.584114 Y: 21.344868 Z: 0.000016
Vertex 137: X: 54.358044 Y: 18.95212 Z: -14.974417
Vertex 138: X: 59.409775 Y: 12.138169 Z: -27.669127
Vertex 139: X: 66.97023 Y: 1.940354 Z: -36.15147
Vertex 140: X: 75.88839 Y: -10.08879 Z: -39.130074
Vertex 141: X: 84.806557 Y: -22.117933 Z: -36.151466
Vertex 142: X: 92.367012 Y: -32.315739 Z: -27.669121
Vertex 143: X: 97.418747 Y: -39.1297 Z: -14.974399
Vertex 144: X: 142.843079 Y: 6.621488 Z: 0.000013
Vertex 145: X: 140.288513 Y: 8.153243 Z: 14.974448
Vertex 146: X: 133.013733 Y: 12.515306 Z: 27.669163
Vertex 147: X: 122.126259 Y: 19.043596 Z: 36.151497
Vertex 148: X: 109.2836 Y: 26.744234 Z: 39.130096
Vertex 149: X: 96.440933 Y: 34.444874 Z: 36.151489
Vertex 150: X: 85.553459 Y: 40.97316 Z: 27.669157
Vertex 151: X: 78.278679 Y: 45.335217 Z: 14.974446
Vertex 152: X: 75.724113 Y: 46.86697 Z: 0.000013
Vertex 153: X: 78.278671 Y: 45.335213 Z: -14.97442
Vertex 154: X: 85.553452 Y: 40.973156 Z: -27.669134
Vertex 155: X: 96.440933 Y: 34.444866 Z: -36.151474
Vertex 156: X: 109.2836 Y: 26.744223 Z: -39.130077
Vertex 157: X: 122.126266 Y: 19.043579 Z: -36.151474
Vertex 158: X: 133.013748 Y: 12.51529 Z: -27.669128
Vertex 159: X: 140.288528 Y: 8.153232 Z: -14.974405
Vertex 160: X: 164.746933 Y: 67.804962 Z: 0.000004
Vertex 161: X: 161.800644 Y: 68.242531 Z: 14.974439
Vertex 162: X: 153.410324 Y: 69.488617 Z: 27.669153
Vertex 163: X: 140.853333 Y: 71.353508 Z: 36.151489
Vertex 164: X: 126.041359 Y: 73.553291 Z: 39.130089
Vertex 165: X: 111.229378 Y: 75.753082 Z: 36.151485
Vertex 166: X: 98.672394 Y: 77.617973 Z: 27.669151
Vertex 167: X: 90.282082 Y: 78.864044 Z: 14.974441
Vertex 168: X: 87.3358 Y: 79.301613 Z: 0.000008
Vertex 169: X: 90.282082 Y: 78.864044 Z: -14.974425
Vertex 170: X: 98.672386 Y: 77.617966 Z: -27.669138
Vertex 171: X: 111.229378 Y: 75.753067 Z: -36.151482
Vertex 172: X: 126.041359 Y: 73.553276 Z: -39.130085
Vertex 173: X: 140.853348 Y: 71.3535 Z: -36.151482
Vertex 174: X: 153.410339 Y: 69.488609 Z: -27.669138
Vertex 175: X: 161.800644 Y: 68.242531 Z: -14.974415
Vertex 176: X: 161.569504 Y: 132.713364 Z: -0.000006
Vertex 177: X: 158.680038 Y: 131.990128 Z: 14.974429
 
Page 3
 
 
 
Vertex 178: X: 150.451553 Y: 129.930527 Z: 27.669144
Vertex 179: X: 138.136749 Y: 126.848099 Z: 36.151482
Vertex 180: X: 123.610443 Y: 123.212143 Z: 39.130081
Vertex 181: X: 109.084137 Y: 119.57618 Z: 36.151478
Vertex 182: X: 96.769333 Y: 116.493759 Z: 27.669146
Vertex 183: X: 88.540848 Y: 114.434151 Z: 14.974436
Vertex 184: X: 85.651382 Y: 113.710915 Z: 0.000003
Vertex 185: X: 88.54084 Y: 114.434151 Z: -14.97443
Vertex 186: X: 96.769325 Y: 116.493752 Z: -27.669144
Vertex 187: X: 109.084137 Y: 119.576172 Z: -36.151485
Vertex 188: X: 123.610443 Y: 123.212135 Z: -39.130089
Vertex 189: X: 138.136749 Y: 126.848091 Z: -36.151489
Vertex 190: X: 150.451569 Y: 129.930527 Z: -27.669146
Vertex 191: X: 158.680054 Y: 131.990128 Z: -14.974424
Vertex 192: X: 133.794586 Y: 191.464966 Z: -0.000015
Vertex 193: X: 131.40184 Y: 189.691025 Z: 14.974422
Vertex 194: X: 124.587891 Y: 184.639282 Z: 27.669136
Vertex 195: X: 114.390083 Y: 177.078827 Z: 36.151474
Vertex 196: X: 102.360954 Y: 168.16066 Z: 39.130077
Vertex 197: X: 90.331818 Y: 159.242493 Z: 36.151474
Vertex 198: X: 80.134018 Y: 151.682037 Z: 27.669142
Vertex 199: X: 73.320061 Y: 146.630295 Z: 14.97443
Vertex 200: X: 70.927315 Y: 144.856369 Z: -0.000002
Vertex 201: X: 73.320053 Y: 146.630295 Z: -14.974436
Vertex 202: X: 80.13401 Y: 151.682037 Z: -27.669147
Vertex 203: X: 90.331818 Y: 159.242477 Z: -36.151493
Vertex 204: X: 102.360954 Y: 168.160645 Z: -39.130096
Vertex 205: X: 114.390091 Y: 177.078812 Z: -36.151493
Vertex 206: X: 124.587898 Y: 184.639282 Z: -27.669155
Vertex 207: X: 131.401855 Y: 189.691025 Z: -14.974432
Vertex 208: X: 85.650635 Y: 235.115356 Z: -0.000021
Vertex 209: X: 84.118889 Y: 232.560791 Z: 14.974415
Vertex 210: X: 79.756828 Y: 225.286011 Z: 27.66913
Vertex 211: X: 73.228546 Y: 214.398529 Z: 36.15147
Vertex 212: X: 65.527916 Y: 201.555847 Z: 39.130074
Vertex 213: X: 57.827286 Y: 188.713196 Z: 36.15147
Vertex 214: X: 51.299004 Y: 177.825714 Z: 27.669136
Vertex 215: X: 46.936947 Y: 170.550919 Z: 14.974427
Vertex 216: X: 45.405197 Y: 167.996353 Z: -0.000005
Vertex 217: X: 46.936947 Y: 170.550919 Z: -14.974439
Vertex 218: X: 51.299 Y: 177.825684 Z: -27.669153
Vertex 219: X: 57.827282 Y: 188.713165 Z: -36.151497
Vertex 220: X: 65.527916 Y: 201.555832 Z: -39.1301
Vertex 221: X: 73.228554 Y: 214.398514 Z: -36.151501
Vertex 222: X: 79.756836 Y: 225.285995 Z: -27.669161
Vertex 223: X: 84.118889 Y: 232.560776 Z: -14.974439
Vertex 224: X: 24.46714 Y: 257.019135 Z: -0.000024
Vertex 225: X: 24.029575 Y: 254.072845 Z: 14.974412
Vertex 226: X: 22.783503 Y: 245.682556 Z: 27.669127
Vertex 227: X: 20.918619 Y: 233.125549 Z: 36.151466
Vertex 228: X: 18.718842 Y: 218.313568 Z: 39.13007
Vertex 229: X: 16.519062 Y: 203.501587 Z: 36.15147
Vertex 230: X: 14.654181 Y: 190.944611 Z: 27.669134
Vertex 231: X: 13.408107 Y: 182.554291 Z: 14.974425
Vertex 232: X: 12.970543 Y: 179.608002 Z: -0.000007
Vertex 233: X: 13.408106 Y: 182.554291 Z: -14.974441
Vertex 234: X: 14.65418 Y: 190.944595 Z: -27.669155
Vertex 235: X: 16.519062 Y: 203.501572 Z: -36.151497
Vertex 236: X: 18.718842 Y: 218.313553 Z: -39.130104
Vertex 237: X: 20.918621 Y: 233.125534 Z: -36.151501
Vertex 238: X: 22.783503 Y: 245.682541 Z: -27.669163
 
Page 4
 
 
 
Vertex 239: X: 24.029577 Y: 254.072861 Z: -14.974442
Vertex 240: X: -40.441261 Y: 253.841705 Z: -0.000024
Vertex 241: X: -39.718021 Y: 250.95224 Z: 14.974413
Vertex 242: X: -37.658409 Y: 242.723755 Z: 27.669128
Vertex 243: X: -34.575981 Y: 230.408936 Z: 36.15147
Vertex 244: X: -30.94001 Y: 215.882629 Z: 39.13007
Vertex 245: X: -27.304039 Y: 201.356323 Z: 36.15147
Vertex 246: X: -24.221613 Y: 189.041534 Z: 27.669134
Vertex 247: X: -22.162001 Y: 180.813049 Z: 14.974426
Vertex 248: X: -21.438761 Y: 177.923584 Z: -0.000007
Vertex 249: X: -22.161999 Y: 180.813049 Z: -14.974441
Vertex 250: X: -24.221611 Y: 189.041504 Z: -27.669155
Vertex 251: X: -27.304039 Y: 201.356308 Z: -36.151497
Vertex 252: X: -30.940012 Y: 215.882614 Z: -39.130104
Vertex 253: X: -34.575985 Y: 230.40892 Z: -36.151501
Vertex 254: X: -37.658413 Y: 242.72374 Z: -27.669163
Vertex 255: X: -39.718025 Y: 250.952225 Z: -14.974441
Vertex 256: X: -3.744166 Y: 50.84124 Z: 190.711624
Vertex 257: X: 8.661436 Y: 49.304207 Z: 188.848938
Vertex 258: X: 19.198971 Y: 44.977974 Z: 183.373962
Vertex 259: X: 26.264196 Y: 38.521187 Z: 175.12027
Vertex 260: X: 28.7815 Y: 30.916832 Z: 165.344376
Vertex 261: X: 26.367643 Y: 23.322603 Z: 155.534576
Vertex 262: X: 19.390108 Y: 16.89464 Z: 147.184341
Vertex 263: X: 8.911171 Y: 12.611558 Z: 141.564896
Vertex 264: X: -3.473847 Y: 11.125428 Z: 139.531769
Vertex 265: X: -15.879449 Y: 12.662461 Z: 141.39447
Vertex 266: X: -26.416985 Y: 16.98868 Z: 146.869431
Vertex 267: X: -33.482216 Y: 23.445467 Z: 155.123123
Vertex 268: X: -35.999519 Y: 31.049828 Z: 164.899017
Vertex 269: X: -33.585655 Y: 38.644066 Z: 174.708817
Vertex 270: X: -26.608126 Y: 45.072014 Z: 183.059067
Vertex 271: X: -16.129177 Y: 49.355095 Z: 188.678497
Vertex 272: X: -4.168803 Y: -26.512711 Z: 229.380432
Vertex 273: X: 8.241518 Y: -27.189255 Z: 227.08757
Vertex 274: X: 18.792505 Y: -29.064959 Z: 220.387619
Vertex 275: X: 25.877867 Y: -31.854296 Z: 210.300568
Vertex 276: X: 28.418921 Y: -35.132587 Z: 198.362106
Vertex 277: X: 26.028807 Y: -38.400761 Z: 186.389755
Vertex 278: X: 19.071413 Y: -41.161263 Z: 176.206161
Vertex 279: X: 8.605921 Y: -42.993843 Z: 169.361725
Vertex 280: X: -3.774371 Y: -43.619469 Z: 166.898438
Vertex 281: X: -16.184692 Y: -42.94294 Z: 169.191299
Vertex 282: X: -26.73568 Y: -41.067223 Z: 175.891251
Vertex 283: X: -33.821041 Y: -38.277882 Z: 185.978302
Vertex 284: X: -36.362103 Y: -34.999592 Z: 197.916748
Vertex 285: X: -33.971985 Y: -31.731417 Z: 209.88913
Vertex 286: X: -27.014584 Y: -28.970919 Z: 220.072708
Vertex 287: X: -16.549088 Y: -27.138351 Z: 226.917145
Vertex 288: X: -4.38799 Y: -112.777107 Z: 235.50412
Vertex 289: X: 8.024771 Y: -112.493996 Z: 233.143143
Vertex 290: X: 18.582701 Y: -111.636909 Z: 226.249176
Vertex 291: X: 25.678453 Y: -110.336349 Z: 215.871796
Vertex 292: X: 28.231764 Y: -108.790268 Z: 203.590866
Vertex 293: X: 25.853918 Y: -107.234085 Z: 191.276031
Vertex 294: X: 18.906897 Y: -105.904648 Z: 180.802124
Vertex 295: X: 8.448368 Y: -105.00444 Z: 173.763702
Vertex 296: X: -3.929493 Y: -104.670425 Z: 171.232285
Vertex 297: X: -16.342251 Y: -104.953537 Z: 173.593262
Vertex 298: X: -26.900183 Y: -105.810593 Z: 180.487213
Vertex 299: X: -33.995941 Y: -107.111191 Z: 190.864578
 
Page 5
 
 
 
Vertex 300: X: -36.549255 Y: -108.657303 Z: 203.145508
Vertex 301: X: -34.171394 Y: -110.213486 Z: 215.460358
Vertex 302: X: -27.224392 Y: -111.542885 Z: 225.934265
Vertex 303: X: -16.765835 Y: -112.443092 Z: 232.972702
Vertex 304: X: -4.368368 Y: -194.819016 Z: 208.15036
Vertex 305: X: 8.044176 Y: -193.623245 Z: 206.093674
Vertex 306: X: 18.601492 Y: -190.16716 Z: 200.066284
Vertex 307: X: 25.696314 Y: -184.976852 Z: 190.985779
Vertex 308: X: 28.248526 Y: -178.842545 Z: 180.234604
Vertex 309: X: 25.869574 Y: -172.698105 Z: 169.449554
Vertex 310: X: 18.921635 Y: -167.478958 Z: 160.272522
Vertex 311: X: 8.462477 Y: -163.979721 Z: 154.100647
Vertex 312: X: -3.915599 Y: -162.733078 Z: 151.873505
Vertex 313: X: -16.328144 Y: -163.928818 Z: 153.930206
Vertex 314: X: -26.88546 Y: -167.384933 Z: 159.957596
Vertex 315: X: -33.980282 Y: -172.575241 Z: 169.038101
Vertex 316: X: -36.532501 Y: -178.709549 Z: 179.789246
Vertex 317: X: -34.153542 Y: -184.853989 Z: 190.574341
Vertex 318: X: -27.205605 Y: -190.073105 Z: 199.751358
Vertex 319: X: -16.746429 Y: -193.572372 Z: 205.923248
Vertex 320: X: -4.112908 Y: -260.148193 Z: 151.483536
Vertex 321: X: 8.296793 Y: -258.225708 Z: 150.05719
Vertex 322: X: 18.84601 Y: -252.700027 Z: 145.824951
Vertex 323: X: 25.928717 Y: -244.412369 Z: 139.431122
Vertex 324: X: 28.46665 Y: -234.624527 Z: 131.84906
Vertex 325: X: 26.073408 Y: -224.826492 Z: 124.233154
Vertex 326: X: 19.113367 Y: -216.510025 Z: 117.742767
Vertex 327: X: 8.646107 Y: -210.941177 Z: 113.366051
Vertex 328: X: -3.734814 Y: -208.967789 Z: 111.769279
Vertex 329: X: -16.144514 Y: -210.890274 Z: 113.195625
Vertex 330: X: -26.693726 Y: -216.41597 Z: 117.427841
Vertex 331: X: -33.776447 Y: -224.703629 Z: 123.821701
Vertex 332: X: -36.314369 Y: -234.491531 Z: 131.403702
Vertex 333: X: -33.921127 Y: -244.289505 Z: 139.019669
Vertex 334: X: -26.961082 Y: -252.605972 Z: 145.510056
Vertex 335: X: -16.493814 Y: -258.174805 Z: 149.88678
Vertex 336: X: -3.660517 Y: -298.818939 Z: 74.130638
Vertex 337: X: 8.74415 Y: -296.466339 Z: 73.564781
Vertex 338: X: 19.279045 Y: -289.715546 Z: 71.783012
Vertex 339: X: 26.340307 Y: -279.594452 Z: 69.056572
Vertex 340: X: 28.852926 Y: -267.64389 Z: 65.800529
Vertex 341: X: 26.434393 Y: -255.683197 Z: 62.510635
Vertex 342: X: 19.452902 Y: -245.533295 Z: 59.687668
Vertex 343: X: 8.9713 Y: -238.73941 Z: 57.761398
Vertex 344: X: -3.414645 Y: -236.335846 Z: 57.025131
Vertex 345: X: -15.819319 Y: -238.688507 Z: 57.590958
Vertex 346: X: -26.354193 Y: -245.43924 Z: 59.372757
Vertex 347: X: -33.415459 Y: -255.560333 Z: 62.099197
Vertex 348: X: -35.928097 Y: -267.510956 Z: 65.355186
Vertex 349: X: -33.509544 Y: -279.471649 Z: 68.645164
Vertex 350: X: -26.528048 Y: -289.621552 Z: 71.468102
Vertex 351: X: -16.046448 Y: -296.415436 Z: 73.394341
Vertex 352: X: -3.080057 Y: -304.943939 Z: -12.132051
Vertex 353: X: 9.318155 Y: -302.523163 Z: -11.738283
Vertex 354: X: 19.834658 Y: -295.578339 Z: -10.787296
Vertex 355: X: 26.868391 Y: -285.166901 Z: -9.423924
Vertex 356: X: 29.348547 Y: -272.873749 Z: -7.855628
Vertex 357: X: 26.897551 Y: -260.570526 Z: -6.321298
Vertex 358: X: 19.888527 Y: -250.130219 Z: -5.054484
Vertex 359: X: 9.388556 Y: -243.142303 Z: -4.247936
Vertex 360: X: -3.00385 Y: -240.670624 Z: -4.024609
 
Page 6
 
 
 
Vertex 361: X: -15.40205 Y: -243.0914 Z: -4.418377
Vertex 362: X: -25.918552 Y: -250.036224 Z: -5.369395
Vertex 363: X: -32.952286 Y: -260.447662 Z: -6.732736
Vertex 364: X: -35.432457 Y: -272.740814 Z: -8.301032
Vertex 365: X: -32.981461 Y: -285.044037 Z: -9.835362
Vertex 366: X: -25.972435 Y: -295.484283 Z: -11.102177
Vertex 367: X: -15.472451 Y: -302.47226 Z: -11.908724
Vertex 368: X: -2.459905 Y: -277.590729 Z: -94.171783
Vertex 369: X: 9.93141 Y: -275.474152 Z: -92.865356
Vertex 370: X: 20.428261 Y: -269.395905 Z: -89.31543
Vertex 371: X: 27.4326 Y: -260.281342 Z: -84.062439
Vertex 372: X: 29.878073 Y: -249.517929 Z: -77.906067
Vertex 373: X: 27.392401 Y: -238.744431 Z: -71.783607
Vertex 374: X: 20.353977 Y: -229.601059 Z: -66.627174
Vertex 375: X: 9.834356 Y: -223.47966 Z: -63.221722
Vertex 376: X: -2.56495 Y: -221.312241 Z: -62.085735
Vertex 377: X: -14.956264 Y: -223.428757 Z: -63.392132
Vertex 378: X: -25.453102 Y: -229.507004 Z: -66.942085
Vertex 379: X: -32.457458 Y: -238.621567 Z: -72.195045
Vertex 380: X: -34.902927 Y: -249.384995 Z: -78.35141
Vertex 381: X: -32.417252 Y: -260.158478 Z: -84.473877
Vertex 382: X: -25.378832 Y: -269.301849 Z: -89.630341
Vertex 383: X: -14.859198 Y: -275.423248 Z: -93.035797
Vertex 384: X: -1.894459 Y: -220.923523 Z: -159.498764
Vertex 385: X: 10.490553 Y: -219.437378 Z: -157.465622
Vertex 386: X: 20.969482 Y: -215.154358 Z: -151.846207
Vertex 387: X: 27.947012 Y: -208.726318 Z: -143.495926
Vertex 388: X: 30.360868 Y: -201.132141 Z: -133.686172
Vertex 389: X: 27.84358 Y: -193.527817 Z: -123.910225
Vertex 390: X: 20.778353 Y: -187.07103 Z: -115.65657
Vertex 391: X: 10.240824 Y: -182.744797 Z: -110.181564
Vertex 392: X: -2.164785 Y: -181.207779 Z: -108.318863
Vertex 393: X: -14.549797 Y: -182.693893 Z: -110.352005
Vertex 394: X: -25.02874 Y: -186.976974 Z: -115.97142
Vertex 395: X: -32.006271 Y: -193.404953 Z: -124.321732
Vertex 396: X: -34.420128 Y: -200.999146 Z: -134.131516
Vertex 397: X: -31.902828 Y: -208.603516 Z: -143.907394
Vertex 398: X: -24.837599 Y: -215.060303 Z: -152.161118
Vertex 399: X: -14.300055 Y: -219.386475 Z: -157.636032
Vertex 400: X: -1.469821 Y: -143.569504 Z: -198.167526
Vertex 401: X: 10.910456 Y: -142.943863 Z: -195.704208
Vertex 402: X: 21.375948 Y: -141.111313 Z: -188.859787
Vertex 403: X: 28.333357 Y: -138.350815 Z: -178.676193
Vertex 404: X: 30.723463 Y: -135.082657 Z: -166.703781
Vertex 405: X: 28.182417 Y: -131.804398 Z: -154.765366
Vertex 406: X: 21.097034 Y: -129.01506 Z: -144.678299
Vertex 407: X: 10.546053 Y: -127.139359 Z: -137.978394
Vertex 408: X: -1.864261 Y: -126.462845 Z: -135.685516
Vertex 409: X: -14.244553 Y: -127.088486 Z: -138.148804
Vertex 410: X: -24.710045 Y: -128.921005 Z: -144.99321
Vertex 411: X: -31.667437 Y: -131.681503 Z: -155.176804
Vertex 412: X: -34.057556 Y: -134.949661 Z: -167.149155
Vertex 413: X: -31.5165 Y: -138.227951 Z: -179.087631
Vertex 414: X: -24.431131 Y: -141.017288 Z: -189.174728
Vertex 415: X: -13.880136 Y: -142.89299 Z: -195.87468
Vertex 416: X: -1.250648 Y: -57.30505 Z: -204.291077
Vertex 417: X: 11.127214 Y: -57.63905 Z: -201.759644
Vertex 418: X: 21.58577 Y: -58.539303 Z: -194.721252
Vertex 419: X: 28.532782 Y: -59.86869 Z: -184.247375
Vertex 420: X: 30.910635 Y: -61.424934 Z: -171.932495
Vertex 421: X: 28.357306 Y: -62.971058 Z: -159.651611
 
Page 7
 
 
 
Vertex 422: X: 21.261574 Y: -64.271622 Z: -149.2742
Vertex 423: X: 10.703629 Y: -65.128708 Z: -142.38031
Vertex 424: X: -1.709129 Y: -65.411819 Z: -140.019287
Vertex 425: X: -14.086991 Y: -65.077835 Z: -142.55072
Vertex 426: X: -24.545534 Y: -64.177567 Z: -149.589142
Vertex 427: X: -31.492546 Y: -62.848164 Z: -160.063049
Vertex 428: X: -33.870399 Y: -61.291939 Z: -172.377869
Vertex 429: X: -31.317085 Y: -59.745827 Z: -184.658813
Vertex 430: X: -24.221338 Y: -58.445263 Z: -195.036194
Vertex 431: X: -13.66338 Y: -57.588161 Z: -201.930115
Vertex 432: X: -1.270272 Y: 24.73682 Z: -176.93721
Vertex 433: X: 11.107817 Y: 23.490162 Z: -174.710098
Vertex 434: X: 21.566975 Y: 19.990879 Z: -168.538284
Vertex 435: X: 28.514906 Y: 14.771749 Z: -159.361221
Vertex 436: X: 30.893866 Y: 8.627312 Z: -148.576187
Vertex 437: X: 28.34165 Y: 2.492975 Z: -137.824997
Vertex 438: X: 21.246832 Y: -2.697331 Z: -128.744492
Vertex 439: X: 10.689516 Y: -6.15343 Z: -122.71711
Vertex 440: X: -1.723015 Y: -7.349185 Z: -120.660408
Vertex 441: X: -14.101104 Y: -6.102542 Z: -122.88752
Vertex 442: X: -24.560274 Y: -2.603291 Z: -129.059433
Vertex 443: X: -31.508207 Y: 2.615839 Z: -138.236465
Vertex 444: X: -33.887154 Y: 8.760292 Z: -149.02153
Vertex 445: X: -31.334948 Y: 14.894629 Z: -159.772659
Vertex 446: X: -24.240105 Y: 20.084934 Z: -168.853165
Vertex 447: X: -13.682803 Y: 23.54105 Z: -174.880569
Vertex 448: X: -1.52573 Y: 90.065956 Z: -120.270317
Vertex 449: X: 10.855188 Y: 88.092567 Z: -118.673576
Vertex 450: X: 21.322458 Y: 82.523727 Z: -114.296867
Vertex 451: X: 28.282507 Y: 74.207253 Z: -107.80645
Vertex 452: X: 30.675741 Y: 64.409218 Z: -100.190575
Vertex 453: X: 28.137808 Y: 54.621334 Z: -92.608513
Vertex 454: X: 21.055094 Y: 46.333679 Z: -86.214684
Vertex 455: X: 10.505875 Y: 40.807999 Z: -81.982468
Vertex 456: X: -1.903812 Y: 38.885498 Z: -80.556137
Vertex 457: X: -14.284732 Y: 40.858887 Z: -82.152878
Vertex 458: X: -24.751986 Y: 46.427719 Z: -86.529594
Vertex 459: X: -31.712048 Y: 54.744198 Z: -93.020012
Vertex 460: X: -34.105286 Y: 64.542213 Z: -100.635918
Vertex 461: X: -31.567348 Y: 74.330132 Z: -108.217949
Vertex 462: X: -24.484634 Y: 82.617767 Z: -114.611748
Vertex 463: X: -13.935403 Y: 88.143463 Z: -118.843987
Vertex 464: X: -1.978122 Y: 128.736557 Z: -42.917454
Vertex 465: X: 10.407837 Y: 126.332993 Z: -42.181217
Vertex 466: X: 20.889421 Y: 119.539108 Z: -40.254974
Vertex 467: X: 27.870916 Y: 109.389206 Z: -37.432007
Vertex 468: X: 30.289457 Y: 97.428497 Z: -34.14209
Vertex 469: X: 27.776823 Y: 85.477936 Z: -30.886045
Vertex 470: X: 20.715551 Y: 75.356873 Z: -28.159634
Vertex 471: X: 10.180677 Y: 68.606125 Z: -26.377865
Vertex 472: X: -2.223983 Y: 66.253441 Z: -25.812067
Vertex 473: X: -14.609928 Y: 68.657021 Z: -26.548306
Vertex 474: X: -25.091528 Y: 75.450905 Z: -28.474545
Vertex 475: X: -32.073021 Y: 85.6008 Z: -31.297514
Vertex 476: X: -34.491562 Y: 97.561508 Z: -34.587402
Vertex 477: X: -31.978928 Y: 109.51207 Z: -37.843445
Vertex 478: X: -24.917671 Y: 119.633141 Z: -40.569916
Vertex 479: X: -14.382784 Y: 126.383888 Z: -42.351658
Vertex 480: X: -2.558581 Y: 134.861481 Z: 43.345238
Vertex 481: X: 9.833838 Y: 132.389786 Z: 43.121849
Vertex 482: X: 20.333811 Y: 125.401863 Z: 42.315361
 
Page 8
 
 
 
Vertex 483: X: 27.342817 Y: 114.961563 Z: 41.048489
Vertex 484: X: 29.793829 Y: 102.658333 Z: 39.514126
Vertex 485: X: 27.313662 Y: 90.365219 Z: 37.945889
Vertex 486: X: 20.279924 Y: 79.953773 Z: 36.582489
Vertex 487: X: 9.763424 Y: 73.008987 Z: 35.631531
Vertex 488: X: -2.634776 Y: 70.588181 Z: 35.237732
Vertex 489: X: -15.027183 Y: 73.059883 Z: 35.46109
Vertex 490: X: -25.527168 Y: 80.047806 Z: 36.267578
Vertex 491: X: -32.536201 Y: 90.488083 Z: 37.53442
Vertex 492: X: -34.987186 Y: 102.791321 Z: 39.068783
Vertex 493: X: -32.507034 Y: 115.084435 Z: 40.63702
Vertex 494: X: -25.473284 Y: 125.495903 Z: 42.00042
Vertex 495: X: -14.956781 Y: 132.440674 Z: 42.951439
Vertex 496: X: -3.178736 Y: 107.508194 Z: 125.384926
Vertex 497: X: 9.220579 Y: 105.340767 Z: 124.248924
Vertex 498: X: 19.740192 Y: 99.219383 Z: 120.843483
Vertex 499: X: 26.778616 Y: 90.075935 Z: 115.687004
Vertex 500: X: 29.264296 Y: 79.30246 Z: 109.564537
Vertex 501: X: 26.818815 Y: 68.539085 Z: 103.408173
Vertex 502: X: 19.814482 Y: 59.424492 Z: 98.155151
Vertex 503: X: 9.317629 Y: 53.34623 Z: 94.605225
Vertex 504: X: -3.073677 Y: 51.229729 Z: 93.298828
Vertex 505: X: -15.472984 Y: 53.397133 Z: 94.434784
Vertex 506: X: -25.992605 Y: 59.518517 Z: 97.84024
Vertex 507: X: -33.031029 Y: 68.661949 Z: 102.996735
Vertex 508: X: -35.516716 Y: 79.435448 Z: 109.119194
Vertex 509: X: -33.071236 Y: 90.198799 Z: 115.275551
Vertex 510: X: -26.066887 Y: 99.313416 Z: 120.528572
Vertex 511: X: -15.570028 Y: 105.39167 Z: 124.078514
Face list:
Face 0: A:0 B:17 C:1 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 1
Face 1: A:0 B:16 C:17 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 1
Face 2: A:1 B:18 C:2 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 2
Face 3: A:1 B:17 C:18 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 2
Face 4: A:2 B:19 C:3 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 3
Face 5: A:2 B:18 C:19 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 3
Face 6: A:3 B:20 C:4 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 4
Face 7: A:3 B:19 C:20 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 4
Face 8: A:4 B:21 C:5 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 5
Face 9: A:4 B:20 C:21 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 5
Face 10: A:5 B:22 C:6 AB:0 BC:1 CA:1
 
Page 9
 
 
 
Material:"CYAN PLSTC"
Smoothing: 6
Face 11: A:5 B:21 C:22 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 6
Face 12: A:6 B:23 C:7 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 7
Face 13: A:6 B:22 C:23 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 7
Face 14: A:7 B:24 C:8 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 8
Face 15: A:7 B:23 C:24 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 8
Face 16: A:8 B:25 C:9 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 9
Face 17: A:8 B:24 C:25 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 9
Face 18: A:9 B:26 C:10 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 10
Face 19: A:9 B:25 C:26 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 10
Face 20: A:10 B:27 C:11 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 11
Face 21: A:10 B:26 C:27 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 11
Face 22: A:11 B:28 C:12 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 12
Face 23: A:11 B:27 C:28 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 12
Face 24: A:12 B:29 C:13 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 13
Face 25: A:12 B:28 C:29 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 13
Face 26: A:13 B:30 C:14 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 14
Face 27: A:13 B:29 C:30 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 14
Face 28: A:14 B:31 C:15 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 15
Face 29: A:14 B:30 C:31 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 15
Face 30: A:15 B:16 C:0 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
 
Page 10
 
 
 
Smoothing: 16
Face 31: A:15 B:31 C:16 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 16
Face 32: A:16 B:33 C:17 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 17
Face 33: A:16 B:32 C:33 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 17
Face 34: A:17 B:34 C:18 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 18
Face 35: A:17 B:33 C:34 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 18
Face 36: A:18 B:35 C:19 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 19
Face 37: A:18 B:34 C:35 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 19
Face 38: A:19 B:36 C:20 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 20
Face 39: A:19 B:35 C:36 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 20
Face 40: A:20 B:37 C:21 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 21
Face 41: A:20 B:36 C:37 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 21
Face 42: A:21 B:38 C:22 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 22
Face 43: A:21 B:37 C:38 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 22
Face 44: A:22 B:39 C:23 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 23
Face 45: A:22 B:38 C:39 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 23
Face 46: A:23 B:40 C:24 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 24
Face 47: A:23 B:39 C:40 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 24
Face 48: A:24 B:41 C:25 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 25
Face 49: A:24 B:40 C:41 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 25
Face 50: A:25 B:42 C:26 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 26
 
Page 11
 
 
 
Face 51: A:25 B:41 C:42 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 26
Face 52: A:26 B:43 C:27 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 27
Face 53: A:26 B:42 C:43 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 27
Face 54: A:27 B:44 C:28 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 28
Face 55: A:27 B:43 C:44 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 28
Face 56: A:28 B:45 C:29 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 29
Face 57: A:28 B:44 C:45 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 29
Face 58: A:29 B:46 C:30 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 30
Face 59: A:29 B:45 C:46 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 30
Face 60: A:30 B:47 C:31 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 31
Face 61: A:30 B:46 C:47 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 31
Face 62: A:31 B:32 C:16 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 32
Face 63: A:31 B:47 C:32 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 32
Face 64: A:32 B:49 C:33 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 1
Face 65: A:32 B:48 C:49 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 1
Face 66: A:33 B:50 C:34 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 2
Face 67: A:33 B:49 C:50 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 2
Face 68: A:34 B:51 C:35 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 3
Face 69: A:34 B:50 C:51 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 3
Face 70: A:35 B:52 C:36 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 4
Face 71: A:35 B:51 C:52 AB:1 BC:1 CA:0
 
Page 12
 
 
 
Material:"CYAN PLSTC"
Smoothing: 4
Face 72: A:36 B:53 C:37 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 5
Face 73: A:36 B:52 C:53 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 5
Face 74: A:37 B:54 C:38 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 6
Face 75: A:37 B:53 C:54 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 6
Face 76: A:38 B:55 C:39 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 7
Face 77: A:38 B:54 C:55 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 7
Face 78: A:39 B:56 C:40 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 8
Face 79: A:39 B:55 C:56 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 8
Face 80: A:40 B:57 C:41 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 9
Face 81: A:40 B:56 C:57 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 9
Face 82: A:41 B:58 C:42 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 10
Face 83: A:41 B:57 C:58 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 10
Face 84: A:42 B:59 C:43 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 11
Face 85: A:42 B:58 C:59 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 11
Face 86: A:43 B:60 C:44 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 12
Face 87: A:43 B:59 C:60 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 12
Face 88: A:44 B:61 C:45 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 13
Face 89: A:44 B:60 C:61 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 13
Face 90: A:45 B:62 C:46 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 14
Face 91: A:45 B:61 C:62 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
 
Page 13
 
 
 
Smoothing: 14
Face 92: A:46 B:63 C:47 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 15
Face 93: A:46 B:62 C:63 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 15
Face 94: A:47 B:48 C:32 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 16
Face 95: A:47 B:63 C:48 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 16
Face 96: A:48 B:65 C:49 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 17
Face 97: A:48 B:64 C:65 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 17
Face 98: A:49 B:66 C:50 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 18
Face 99: A:49 B:65 C:66 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 18
Face 100: A:50 B:67 C:51 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 19
Face 101: A:50 B:66 C:67 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 19
Face 102: A:51 B:68 C:52 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 20
Face 103: A:51 B:67 C:68 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 20
Face 104: A:52 B:69 C:53 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 21
Face 105: A:52 B:68 C:69 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 21
Face 106: A:53 B:70 C:54 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 22
Face 107: A:53 B:69 C:70 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 22
Face 108: A:54 B:71 C:55 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 23
Face 109: A:54 B:70 C:71 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 23
Face 110: A:55 B:72 C:56 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 24
Face 111: A:55 B:71 C:72 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 24
 
Page 14
 
 
 
Face 112: A:56 B:73 C:57 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 25
Face 113: A:56 B:72 C:73 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 25
Face 114: A:57 B:74 C:58 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 26
Face 115: A:57 B:73 C:74 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 26
Face 116: A:58 B:75 C:59 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 27
Face 117: A:58 B:74 C:75 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 27
Face 118: A:59 B:76 C:60 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 28
Face 119: A:59 B:75 C:76 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 28
Face 120: A:60 B:77 C:61 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 29
Face 121: A:60 B:76 C:77 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 29
Face 122: A:61 B:78 C:62 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 30
Face 123: A:61 B:77 C:78 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 30
Face 124: A:62 B:79 C:63 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 31
Face 125: A:62 B:78 C:79 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 31
Face 126: A:63 B:64 C:48 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 32
Face 127: A:63 B:79 C:64 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 32
Face 128: A:64 B:81 C:65 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 1
Face 129: A:64 B:80 C:81 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 1
Face 130: A:65 B:82 C:66 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 2
Face 131: A:65 B:81 C:82 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 2
Face 132: A:66 B:83 C:67 AB:0 BC:1 CA:1
 
Page 15
 
 
 
Material:"CYAN PLSTC"
Smoothing: 3
Face 133: A:66 B:82 C:83 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 3
Face 134: A:67 B:84 C:68 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 4
Face 135: A:67 B:83 C:84 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 4
Face 136: A:68 B:85 C:69 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 5
Face 137: A:68 B:84 C:85 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 5
Face 138: A:69 B:86 C:70 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 6
Face 139: A:69 B:85 C:86 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 6
Face 140: A:70 B:87 C:71 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 7
Face 141: A:70 B:86 C:87 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 7
Face 142: A:71 B:88 C:72 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 8
Face 143: A:71 B:87 C:88 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 8
Face 144: A:72 B:89 C:73 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 9
Face 145: A:72 B:88 C:89 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 9
Face 146: A:73 B:90 C:74 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 10
Face 147: A:73 B:89 C:90 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 10
Face 148: A:74 B:91 C:75 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 11
Face 149: A:74 B:90 C:91 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 11
Face 150: A:75 B:92 C:76 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 12
Face 151: A:75 B:91 C:92 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 12
Face 152: A:76 B:93 C:77 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
 
Page 16
 
 
 
Smoothing: 13
Face 153: A:76 B:92 C:93 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 13
Face 154: A:77 B:94 C:78 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 14
Face 155: A:77 B:93 C:94 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 14
Face 156: A:78 B:95 C:79 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 15
Face 157: A:78 B:94 C:95 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 15
Face 158: A:79 B:80 C:64 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 16
Face 159: A:79 B:95 C:80 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 16
Face 160: A:80 B:97 C:81 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 17
Face 161: A:80 B:96 C:97 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 17
Face 162: A:81 B:98 C:82 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 18
Face 163: A:81 B:97 C:98 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 18
Face 164: A:82 B:99 C:83 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 19
Face 165: A:82 B:98 C:99 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 19
Face 166: A:83 B:100 C:84 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 20
Face 167: A:83 B:99 C:100 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 20
Face 168: A:84 B:101 C:85 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 21
Face 169: A:84 B:100 C:101 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 21
Face 170: A:85 B:102 C:86 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 22
Face 171: A:85 B:101 C:102 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 22
Face 172: A:86 B:103 C:87 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 23
 
Page 17
 
 
 
Face 173: A:86 B:102 C:103 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 23
Face 174: A:87 B:104 C:88 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 24
Face 175: A:87 B:103 C:104 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 24
Face 176: A:88 B:105 C:89 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 25
Face 177: A:88 B:104 C:105 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 25
Face 178: A:89 B:106 C:90 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 26
Face 179: A:89 B:105 C:106 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 26
Face 180: A:90 B:107 C:91 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 27
Face 181: A:90 B:106 C:107 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 27
Face 182: A:91 B:108 C:92 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 28
Face 183: A:91 B:107 C:108 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 28
Face 184: A:92 B:109 C:93 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 29
Face 185: A:92 B:108 C:109 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 29
Face 186: A:93 B:110 C:94 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 30
Face 187: A:93 B:109 C:110 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 30
Face 188: A:94 B:111 C:95 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 31
Face 189: A:94 B:110 C:111 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 31
Face 190: A:95 B:96 C:80 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 32
Face 191: A:95 B:111 C:96 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 32
Face 192: A:96 B:113 C:97 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 1
Face 193: A:96 B:112 C:113 AB:1 BC:1 CA:0
 
Page 18
 
 
 
Material:"CYAN PLSTC"
Smoothing: 1
Face 194: A:97 B:114 C:98 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 2
Face 195: A:97 B:113 C:114 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 2
Face 196: A:98 B:115 C:99 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 3
Face 197: A:98 B:114 C:115 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 3
Face 198: A:99 B:116 C:100 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 4
Face 199: A:99 B:115 C:116 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 4
Face 200: A:100 B:117 C:101 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 5
Face 201: A:100 B:116 C:117 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 5
Face 202: A:101 B:118 C:102 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 6
Face 203: A:101 B:117 C:118 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 6
Face 204: A:102 B:119 C:103 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 7
Face 205: A:102 B:118 C:119 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 7
Face 206: A:103 B:120 C:104 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 8
Face 207: A:103 B:119 C:120 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 8
Face 208: A:104 B:121 C:105 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 9
Face 209: A:104 B:120 C:121 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 9
Face 210: A:105 B:122 C:106 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 10
Face 211: A:105 B:121 C:122 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 10
Face 212: A:106 B:123 C:107 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 11
Face 213: A:106 B:122 C:123 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
 
Page 19
 
 
 
Smoothing: 11
Face 214: A:107 B:124 C:108 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 12
Face 215: A:107 B:123 C:124 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 12
Face 216: A:108 B:125 C:109 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 13
Face 217: A:108 B:124 C:125 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 13
Face 218: A:109 B:126 C:110 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 14
Face 219: A:109 B:125 C:126 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 14
Face 220: A:110 B:127 C:111 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 15
Face 221: A:110 B:126 C:127 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 15
Face 222: A:111 B:112 C:96 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 16
Face 223: A:111 B:127 C:112 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 16
Face 224: A:112 B:129 C:113 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 17
Face 225: A:112 B:128 C:129 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 17
Face 226: A:113 B:130 C:114 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 18
Face 227: A:113 B:129 C:130 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 18
Face 228: A:114 B:131 C:115 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 19
Face 229: A:114 B:130 C:131 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 19
Face 230: A:115 B:132 C:116 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 20
Face 231: A:115 B:131 C:132 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 20
Face 232: A:116 B:133 C:117 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 21
Face 233: A:116 B:132 C:133 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 21
 
Page 20
 
 
 
Face 234: A:117 B:134 C:118 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 22
Face 235: A:117 B:133 C:134 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 22
Face 236: A:118 B:135 C:119 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 23
Face 237: A:118 B:134 C:135 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 23
Face 238: A:119 B:136 C:120 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 24
Face 239: A:119 B:135 C:136 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 24
Face 240: A:120 B:137 C:121 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 25
Face 241: A:120 B:136 C:137 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 25
Face 242: A:121 B:138 C:122 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 26
Face 243: A:121 B:137 C:138 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 26
Face 244: A:122 B:139 C:123 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 27
Face 245: A:122 B:138 C:139 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 27
Face 246: A:123 B:140 C:124 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 28
Face 247: A:123 B:139 C:140 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 28
Face 248: A:124 B:141 C:125 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 29
Face 249: A:124 B:140 C:141 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 29
Face 250: A:125 B:142 C:126 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 30
Face 251: A:125 B:141 C:142 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 30
Face 252: A:126 B:143 C:127 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 31
Face 253: A:126 B:142 C:143 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 31
Face 254: A:127 B:128 C:112 AB:0 BC:1 CA:1
 
Page 21
 
 
 
Material:"CYAN PLSTC"
Smoothing: 32
Face 255: A:127 B:143 C:128 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 32
Face 256: A:128 B:145 C:129 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 1
Face 257: A:128 B:144 C:145 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 1
Face 258: A:129 B:146 C:130 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 2
Face 259: A:129 B:145 C:146 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 2
Face 260: A:130 B:147 C:131 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 3
Face 261: A:130 B:146 C:147 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 3
Face 262: A:131 B:148 C:132 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 4
Face 263: A:131 B:147 C:148 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 4
Face 264: A:132 B:149 C:133 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 5
Face 265: A:132 B:148 C:149 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 5
Face 266: A:133 B:150 C:134 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 6
Face 267: A:133 B:149 C:150 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 6
Face 268: A:134 B:151 C:135 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 7
Face 269: A:134 B:150 C:151 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 7
Face 270: A:135 B:152 C:136 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 8
Face 271: A:135 B:151 C:152 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 8
Face 272: A:136 B:153 C:137 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 9
Face 273: A:136 B:152 C:153 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 9
Face 274: A:137 B:154 C:138 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
 
Page 22
 
 
 
Smoothing: 10
Face 275: A:137 B:153 C:154 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 10
Face 276: A:138 B:155 C:139 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 11
Face 277: A:138 B:154 C:155 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 11
Face 278: A:139 B:156 C:140 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 12
Face 279: A:139 B:155 C:156 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 12
Face 280: A:140 B:157 C:141 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 13
Face 281: A:140 B:156 C:157 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 13
Face 282: A:141 B:158 C:142 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 14
Face 283: A:141 B:157 C:158 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 14
Face 284: A:142 B:159 C:143 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 15
Face 285: A:142 B:158 C:159 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 15
Face 286: A:143 B:144 C:128 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 16
Face 287: A:143 B:159 C:144 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 16
Face 288: A:144 B:161 C:145 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 17
Face 289: A:144 B:160 C:161 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 17
Face 290: A:145 B:162 C:146 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 18
Face 291: A:145 B:161 C:162 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 18
Face 292: A:146 B:163 C:147 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 19
Face 293: A:146 B:162 C:163 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 19
Face 294: A:147 B:164 C:148 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 20
 
Page 23
 
 
 
Face 295: A:147 B:163 C:164 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 20
Face 296: A:148 B:165 C:149 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 21
Face 297: A:148 B:164 C:165 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 21
Face 298: A:149 B:166 C:150 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 22
Face 299: A:149 B:165 C:166 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 22
Face 300: A:150 B:167 C:151 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 23
Face 301: A:150 B:166 C:167 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 23
Face 302: A:151 B:168 C:152 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 24
Face 303: A:151 B:167 C:168 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 24
Face 304: A:152 B:169 C:153 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 25
Face 305: A:152 B:168 C:169 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 25
Face 306: A:153 B:170 C:154 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 26
Face 307: A:153 B:169 C:170 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 26
Face 308: A:154 B:171 C:155 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 27
Face 309: A:154 B:170 C:171 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 27
Face 310: A:155 B:172 C:156 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 28
Face 311: A:155 B:171 C:172 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 28
Face 312: A:156 B:173 C:157 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 29
Face 313: A:156 B:172 C:173 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 29
Face 314: A:157 B:174 C:158 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 30
Face 315: A:157 B:173 C:174 AB:1 BC:1 CA:0
 
Page 24
 
 
 
Material:"CYAN PLSTC"
Smoothing: 30
Face 316: A:158 B:175 C:159 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 31
Face 317: A:158 B:174 C:175 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 31
Face 318: A:159 B:160 C:144 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 32
Face 319: A:159 B:175 C:160 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 32
Face 320: A:160 B:177 C:161 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 1
Face 321: A:160 B:176 C:177 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 1
Face 322: A:161 B:178 C:162 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 2
Face 323: A:161 B:177 C:178 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 2
Face 324: A:162 B:179 C:163 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 3
Face 325: A:162 B:178 C:179 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 3
Face 326: A:163 B:180 C:164 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 4
Face 327: A:163 B:179 C:180 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 4
Face 328: A:164 B:181 C:165 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 5
Face 329: A:164 B:180 C:181 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 5
Face 330: A:165 B:182 C:166 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 6
Face 331: A:165 B:181 C:182 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 6
Face 332: A:166 B:183 C:167 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 7
Face 333: A:166 B:182 C:183 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 7
Face 334: A:167 B:184 C:168 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 8
Face 335: A:167 B:183 C:184 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
 
Page 25
 
 
 
Smoothing: 8
Face 336: A:168 B:185 C:169 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 9
Face 337: A:168 B:184 C:185 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 9
Face 338: A:169 B:186 C:170 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 10
Face 339: A:169 B:185 C:186 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 10
Face 340: A:170 B:187 C:171 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 11
Face 341: A:170 B:186 C:187 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 11
Face 342: A:171 B:188 C:172 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 12
Face 343: A:171 B:187 C:188 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 12
Face 344: A:172 B:189 C:173 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 13
Face 345: A:172 B:188 C:189 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 13
Face 346: A:173 B:190 C:174 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 14
Face 347: A:173 B:189 C:190 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 14
Face 348: A:174 B:191 C:175 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 15
Face 349: A:174 B:190 C:191 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 15
Face 350: A:175 B:176 C:160 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 16
Face 351: A:175 B:191 C:176 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 16
Face 352: A:176 B:193 C:177 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 17
Face 353: A:176 B:192 C:193 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 17
Face 354: A:177 B:194 C:178 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 18
Face 355: A:177 B:193 C:194 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 18
 
Page 26
 
 
 
Face 356: A:178 B:195 C:179 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 19
Face 357: A:178 B:194 C:195 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 19
Face 358: A:179 B:196 C:180 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 20
Face 359: A:179 B:195 C:196 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 20
Face 360: A:180 B:197 C:181 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 21
Face 361: A:180 B:196 C:197 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 21
Face 362: A:181 B:198 C:182 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 22
Face 363: A:181 B:197 C:198 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 22
Face 364: A:182 B:199 C:183 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 23
Face 365: A:182 B:198 C:199 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 23
Face 366: A:183 B:200 C:184 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 24
Face 367: A:183 B:199 C:200 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 24
Face 368: A:184 B:201 C:185 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 25
Face 369: A:184 B:200 C:201 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 25
Face 370: A:185 B:202 C:186 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 26
Face 371: A:185 B:201 C:202 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 26
Face 372: A:186 B:203 C:187 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 27
Face 373: A:186 B:202 C:203 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 27
Face 374: A:187 B:204 C:188 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 28
Face 375: A:187 B:203 C:204 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 28
Face 376: A:188 B:205 C:189 AB:0 BC:1 CA:1
 
Page 27
 
 
 
Material:"CYAN PLSTC"
Smoothing: 29
Face 377: A:188 B:204 C:205 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 29
Face 378: A:189 B:206 C:190 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 30
Face 379: A:189 B:205 C:206 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 30
Face 380: A:190 B:207 C:191 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 31
Face 381: A:190 B:206 C:207 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 31
Face 382: A:191 B:192 C:176 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 32
Face 383: A:191 B:207 C:192 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 32
Face 384: A:192 B:209 C:193 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 1
Face 385: A:192 B:208 C:209 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 1
Face 386: A:193 B:210 C:194 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 2
Face 387: A:193 B:209 C:210 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 2
Face 388: A:194 B:211 C:195 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 3
Face 389: A:194 B:210 C:211 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 3
Face 390: A:195 B:212 C:196 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 4
Face 391: A:195 B:211 C:212 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 4
Face 392: A:196 B:213 C:197 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 5
Face 393: A:196 B:212 C:213 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 5
Face 394: A:197 B:214 C:198 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 6
Face 395: A:197 B:213 C:214 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 6
Face 396: A:198 B:215 C:199 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
 
Page 28
 
 
 
Smoothing: 7
Face 397: A:198 B:214 C:215 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 7
Face 398: A:199 B:216 C:200 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 8
Face 399: A:199 B:215 C:216 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 8
Face 400: A:200 B:217 C:201 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 9
Face 401: A:200 B:216 C:217 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 9
Face 402: A:201 B:218 C:202 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 10
Face 403: A:201 B:217 C:218 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 10
Face 404: A:202 B:219 C:203 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 11
Face 405: A:202 B:218 C:219 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 11
Face 406: A:203 B:220 C:204 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 12
Face 407: A:203 B:219 C:220 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 12
Face 408: A:204 B:221 C:205 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 13
Face 409: A:204 B:220 C:221 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 13
Face 410: A:205 B:222 C:206 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 14
Face 411: A:205 B:221 C:222 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 14
Face 412: A:206 B:223 C:207 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 15
Face 413: A:206 B:222 C:223 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 15
Face 414: A:207 B:208 C:192 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 16
Face 415: A:207 B:223 C:208 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 16
Face 416: A:208 B:225 C:209 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 17
 
Page 29
 
 
 
Face 417: A:208 B:224 C:225 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 17
Face 418: A:209 B:226 C:210 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 18
Face 419: A:209 B:225 C:226 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 18
Face 420: A:210 B:227 C:211 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 19
Face 421: A:210 B:226 C:227 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 19
Face 422: A:211 B:228 C:212 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 20
Face 423: A:211 B:227 C:228 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 20
Face 424: A:212 B:229 C:213 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 21
Face 425: A:212 B:228 C:229 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 21
Face 426: A:213 B:230 C:214 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 22
Face 427: A:213 B:229 C:230 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 22
Face 428: A:214 B:231 C:215 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 23
Face 429: A:214 B:230 C:231 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 23
Face 430: A:215 B:232 C:216 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 24
Face 431: A:215 B:231 C:232 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 24
Face 432: A:216 B:233 C:217 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 25
Face 433: A:216 B:232 C:233 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 25
Face 434: A:217 B:234 C:218 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 26
Face 435: A:217 B:233 C:234 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 26
Face 436: A:218 B:235 C:219 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 27
Face 437: A:218 B:234 C:235 AB:1 BC:1 CA:0
 
Page 30
 
 
 
Material:"CYAN PLSTC"
Smoothing: 27
Face 438: A:219 B:236 C:220 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 28
Face 439: A:219 B:235 C:236 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 28
Face 440: A:220 B:237 C:221 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 29
Face 441: A:220 B:236 C:237 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 29
Face 442: A:221 B:238 C:222 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 30
Face 443: A:221 B:237 C:238 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 30
Face 444: A:222 B:239 C:223 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 31
Face 445: A:222 B:238 C:239 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 31
Face 446: A:223 B:224 C:208 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 32
Face 447: A:223 B:239 C:224 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 32
Face 448: A:224 B:241 C:225 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 1
Face 449: A:224 B:240 C:241 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 1
Face 450: A:225 B:242 C:226 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 2
Face 451: A:225 B:241 C:242 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 2
Face 452: A:226 B:243 C:227 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 3
Face 453: A:226 B:242 C:243 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 3
Face 454: A:227 B:244 C:228 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 4
Face 455: A:227 B:243 C:244 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 4
Face 456: A:228 B:245 C:229 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 5
Face 457: A:228 B:244 C:245 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
 
Page 31
 
 
 
Smoothing: 5
Face 458: A:229 B:246 C:230 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 6
Face 459: A:229 B:245 C:246 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 6
Face 460: A:230 B:247 C:231 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 7
Face 461: A:230 B:246 C:247 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 7
Face 462: A:231 B:248 C:232 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 8
Face 463: A:231 B:247 C:248 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 8
Face 464: A:232 B:249 C:233 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 9
Face 465: A:232 B:248 C:249 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 9
Face 466: A:233 B:250 C:234 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 10
Face 467: A:233 B:249 C:250 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 10
Face 468: A:234 B:251 C:235 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 11
Face 469: A:234 B:250 C:251 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 11
Face 470: A:235 B:252 C:236 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 12
Face 471: A:235 B:251 C:252 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 12
Face 472: A:236 B:253 C:237 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 13
Face 473: A:236 B:252 C:253 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 13
Face 474: A:237 B:254 C:238 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 14
Face 475: A:237 B:253 C:254 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 14
Face 476: A:238 B:255 C:239 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 15
Face 477: A:238 B:254 C:255 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 15
 
Page 32
 
 
 
Face 478: A:239 B:240 C:224 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 16
Face 479: A:239 B:255 C:240 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 16
Face 480: A:240 B:1 C:241 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 17
Face 481: A:240 B:0 C:1 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 17
Face 482: A:241 B:2 C:242 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 18
Face 483: A:241 B:1 C:2 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 18
Face 484: A:242 B:3 C:243 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 19
Face 485: A:242 B:2 C:3 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 19
Face 486: A:243 B:4 C:244 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 20
Face 487: A:243 B:3 C:4 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 20
Face 488: A:244 B:5 C:245 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 21
Face 489: A:244 B:4 C:5 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 21
Face 490: A:245 B:6 C:246 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 22
Face 491: A:245 B:5 C:6 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 22
Face 492: A:246 B:7 C:247 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 23
Face 493: A:246 B:6 C:7 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 23
Face 494: A:247 B:8 C:248 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 24
Face 495: A:247 B:7 C:8 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 24
Face 496: A:248 B:9 C:249 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 25
Face 497: A:248 B:8 C:9 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 25
Face 498: A:249 B:10 C:250 AB:0 BC:1 CA:1
 
Page 33
 
 
 
Material:"CYAN PLSTC"
Smoothing: 26
Face 499: A:249 B:9 C:10 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 26
Face 500: A:250 B:11 C:251 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 27
Face 501: A:250 B:10 C:11 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 27
Face 502: A:251 B:12 C:252 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 28
Face 503: A:251 B:11 C:12 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 28
Face 504: A:252 B:13 C:253 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 29
Face 505: A:252 B:12 C:13 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 29
Face 506: A:253 B:14 C:254 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 30
Face 507: A:253 B:13 C:14 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 30
Face 508: A:254 B:15 C:255 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 31
Face 509: A:254 B:14 C:15 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 31
Face 510: A:255 B:0 C:240 AB:0 BC:1 CA:1
Material:"CYAN PLSTC"
Smoothing: 32
Face 511: A:255 B:15 C:0 AB:1 BC:1 CA:0
Material:"CYAN PLSTC"
Smoothing: 32
Face 512: A:256 B:273 C:257 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 1
Face 513: A:256 B:272 C:273 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 1
Face 514: A:257 B:274 C:258 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 2
Face 515: A:257 B:273 C:274 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 2
Face 516: A:258 B:275 C:259 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 3
Face 517: A:258 B:274 C:275 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 3
Face 518: A:259 B:276 C:260 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
 
Page 34
 
 
 
Smoothing: 4
Face 519: A:259 B:275 C:276 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 4
Face 520: A:260 B:277 C:261 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 5
Face 521: A:260 B:276 C:277 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 5
Face 522: A:261 B:278 C:262 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 6
Face 523: A:261 B:277 C:278 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 6
Face 524: A:262 B:279 C:263 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 7
Face 525: A:262 B:278 C:279 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 7
Face 526: A:263 B:280 C:264 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 8
Face 527: A:263 B:279 C:280 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 8
Face 528: A:264 B:281 C:265 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 9
Face 529: A:264 B:280 C:281 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 9
Face 530: A:265 B:282 C:266 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 10
Face 531: A:265 B:281 C:282 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 10
Face 532: A:266 B:283 C:267 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 11
Face 533: A:266 B:282 C:283 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 11
Face 534: A:267 B:284 C:268 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 12
Face 535: A:267 B:283 C:284 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 12
Face 536: A:268 B:285 C:269 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 13
Face 537: A:268 B:284 C:285 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 13
Face 538: A:269 B:286 C:270 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 14
 
Page 35
 
 
 
Face 539: A:269 B:285 C:286 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 14
Face 540: A:270 B:287 C:271 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 15
Face 541: A:270 B:286 C:287 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 15
Face 542: A:271 B:272 C:256 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 16
Face 543: A:271 B:287 C:272 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 16
Face 544: A:272 B:289 C:273 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 17
Face 545: A:272 B:288 C:289 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 17
Face 546: A:273 B:290 C:274 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 18
Face 547: A:273 B:289 C:290 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 18
Face 548: A:274 B:291 C:275 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 19
Face 549: A:274 B:290 C:291 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 19
Face 550: A:275 B:292 C:276 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 20
Face 551: A:275 B:291 C:292 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 20
Face 552: A:276 B:293 C:277 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 21
Face 553: A:276 B:292 C:293 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 21
Face 554: A:277 B:294 C:278 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 22
Face 555: A:277 B:293 C:294 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 22
Face 556: A:278 B:295 C:279 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 23
Face 557: A:278 B:294 C:295 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 23
Face 558: A:279 B:296 C:280 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 24
Face 559: A:279 B:295 C:296 AB:1 BC:1 CA:0
 
Page 36
 
 
 
Material:"BLUE PLASTIC"
Smoothing: 24
Face 560: A:280 B:297 C:281 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 25
Face 561: A:280 B:296 C:297 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 25
Face 562: A:281 B:298 C:282 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 26
Face 563: A:281 B:297 C:298 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 26
Face 564: A:282 B:299 C:283 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 27
Face 565: A:282 B:298 C:299 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 27
Face 566: A:283 B:300 C:284 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 28
Face 567: A:283 B:299 C:300 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 28
Face 568: A:284 B:301 C:285 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 29
Face 569: A:284 B:300 C:301 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 29
Face 570: A:285 B:302 C:286 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 30
Face 571: A:285 B:301 C:302 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 30
Face 572: A:286 B:303 C:287 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 31
Face 573: A:286 B:302 C:303 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 31
Face 574: A:287 B:288 C:272 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 32
Face 575: A:287 B:303 C:288 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 32
Face 576: A:288 B:305 C:289 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 1
Face 577: A:288 B:304 C:305 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 1
Face 578: A:289 B:306 C:290 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 2
Face 579: A:289 B:305 C:306 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
 
Page 37
 
 
 
Smoothing: 2
Face 580: A:290 B:307 C:291 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 3
Face 581: A:290 B:306 C:307 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 3
Face 582: A:291 B:308 C:292 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 4
Face 583: A:291 B:307 C:308 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 4
Face 584: A:292 B:309 C:293 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 5
Face 585: A:292 B:308 C:309 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 5
Face 586: A:293 B:310 C:294 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 6
Face 587: A:293 B:309 C:310 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 6
Face 588: A:294 B:311 C:295 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 7
Face 589: A:294 B:310 C:311 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 7
Face 590: A:295 B:312 C:296 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 8
Face 591: A:295 B:311 C:312 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 8
Face 592: A:296 B:313 C:297 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 9
Face 593: A:296 B:312 C:313 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 9
Face 594: A:297 B:314 C:298 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 10
Face 595: A:297 B:313 C:314 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 10
Face 596: A:298 B:315 C:299 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 11
Face 597: A:298 B:314 C:315 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 11
Face 598: A:299 B:316 C:300 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 12
Face 599: A:299 B:315 C:316 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 12
 
Page 38
 
 
 
Face 600: A:300 B:317 C:301 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 13
Face 601: A:300 B:316 C:317 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 13
Face 602: A:301 B:318 C:302 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 14
Face 603: A:301 B:317 C:318 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 14
Face 604: A:302 B:319 C:303 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 15
Face 605: A:302 B:318 C:319 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 15
Face 606: A:303 B:304 C:288 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 16
Face 607: A:303 B:319 C:304 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 16
Face 608: A:304 B:321 C:305 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 17
Face 609: A:304 B:320 C:321 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 17
Face 610: A:305 B:322 C:306 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 18
Face 611: A:305 B:321 C:322 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 18
Face 612: A:306 B:323 C:307 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 19
Face 613: A:306 B:322 C:323 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 19
Face 614: A:307 B:324 C:308 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 20
Face 615: A:307 B:323 C:324 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 20
Face 616: A:308 B:325 C:309 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 21
Face 617: A:308 B:324 C:325 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 21
Face 618: A:309 B:326 C:310 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 22
Face 619: A:309 B:325 C:326 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 22
Face 620: A:310 B:327 C:311 AB:0 BC:1 CA:1
 
Page 39
 
 
 
Material:"BLUE PLASTIC"
Smoothing: 23
Face 621: A:310 B:326 C:327 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 23
Face 622: A:311 B:328 C:312 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 24
Face 623: A:311 B:327 C:328 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 24
Face 624: A:312 B:329 C:313 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 25
Face 625: A:312 B:328 C:329 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 25
Face 626: A:313 B:330 C:314 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 26
Face 627: A:313 B:329 C:330 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 26
Face 628: A:314 B:331 C:315 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 27
Face 629: A:314 B:330 C:331 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 27
Face 630: A:315 B:332 C:316 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 28
Face 631: A:315 B:331 C:332 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 28
Face 632: A:316 B:333 C:317 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 29
Face 633: A:316 B:332 C:333 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 29
Face 634: A:317 B:334 C:318 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 30
Face 635: A:317 B:333 C:334 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 30
Face 636: A:318 B:335 C:319 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 31
Face 637: A:318 B:334 C:335 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 31
Face 638: A:319 B:320 C:304 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 32
Face 639: A:319 B:335 C:320 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 32
Face 640: A:320 B:337 C:321 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
 
Page 40
 
 
 
Smoothing: 1
Face 641: A:320 B:336 C:337 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 1
Face 642: A:321 B:338 C:322 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 2
Face 643: A:321 B:337 C:338 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 2
Face 644: A:322 B:339 C:323 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 3
Face 645: A:322 B:338 C:339 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 3
Face 646: A:323 B:340 C:324 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 4
Face 647: A:323 B:339 C:340 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 4
Face 648: A:324 B:341 C:325 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 5
Face 649: A:324 B:340 C:341 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 5
Face 650: A:325 B:342 C:326 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 6
Face 651: A:325 B:341 C:342 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 6
Face 652: A:326 B:343 C:327 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 7
Face 653: A:326 B:342 C:343 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 7
Face 654: A:327 B:344 C:328 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 8
Face 655: A:327 B:343 C:344 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 8
Face 656: A:328 B:345 C:329 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 9
Face 657: A:328 B:344 C:345 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 9
Face 658: A:329 B:346 C:330 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 10
Face 659: A:329 B:345 C:346 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 10
Face 660: A:330 B:347 C:331 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 11
 
Page 41
 
 
 
Face 661: A:330 B:346 C:347 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 11
Face 662: A:331 B:348 C:332 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 12
Face 663: A:331 B:347 C:348 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 12
Face 664: A:332 B:349 C:333 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 13
Face 665: A:332 B:348 C:349 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 13
Face 666: A:333 B:350 C:334 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 14
Face 667: A:333 B:349 C:350 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 14
Face 668: A:334 B:351 C:335 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 15
Face 669: A:334 B:350 C:351 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 15
Face 670: A:335 B:336 C:320 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 16
Face 671: A:335 B:351 C:336 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 16
Face 672: A:336 B:353 C:337 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 17
Face 673: A:336 B:352 C:353 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 17
Face 674: A:337 B:354 C:338 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 18
Face 675: A:337 B:353 C:354 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 18
Face 676: A:338 B:355 C:339 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 19
Face 677: A:338 B:354 C:355 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 19
Face 678: A:339 B:356 C:340 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 20
Face 679: A:339 B:355 C:356 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 20
Face 680: A:340 B:357 C:341 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 21
Face 681: A:340 B:356 C:357 AB:1 BC:1 CA:0
 
Page 42
 
 
 
Material:"BLUE PLASTIC"
Smoothing: 21
Face 682: A:341 B:358 C:342 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 22
Face 683: A:341 B:357 C:358 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 22
Face 684: A:342 B:359 C:343 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 23
Face 685: A:342 B:358 C:359 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 23
Face 686: A:343 B:360 C:344 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 24
Face 687: A:343 B:359 C:360 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 24
Face 688: A:344 B:361 C:345 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 25
Face 689: A:344 B:360 C:361 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 25
Face 690: A:345 B:362 C:346 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 26
Face 691: A:345 B:361 C:362 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 26
Face 692: A:346 B:363 C:347 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 27
Face 693: A:346 B:362 C:363 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 27
Face 694: A:347 B:364 C:348 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 28
Face 695: A:347 B:363 C:364 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 28
Face 696: A:348 B:365 C:349 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 29
Face 697: A:348 B:364 C:365 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 29
Face 698: A:349 B:366 C:350 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 30
Face 699: A:349 B:365 C:366 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 30
Face 700: A:350 B:367 C:351 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 31
Face 701: A:350 B:366 C:367 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
 
Page 43
 
 
 
Smoothing: 31
Face 702: A:351 B:352 C:336 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 32
Face 703: A:351 B:367 C:352 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 32
Face 704: A:352 B:369 C:353 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 1
Face 705: A:352 B:368 C:369 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 1
Face 706: A:353 B:370 C:354 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 2
Face 707: A:353 B:369 C:370 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 2
Face 708: A:354 B:371 C:355 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 3
Face 709: A:354 B:370 C:371 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 3
Face 710: A:355 B:372 C:356 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 4
Face 711: A:355 B:371 C:372 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 4
Face 712: A:356 B:373 C:357 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 5
Face 713: A:356 B:372 C:373 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 5
Face 714: A:357 B:374 C:358 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 6
Face 715: A:357 B:373 C:374 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 6
Face 716: A:358 B:375 C:359 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 7
Face 717: A:358 B:374 C:375 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 7
Face 718: A:359 B:376 C:360 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 8
Face 719: A:359 B:375 C:376 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 8
Face 720: A:360 B:377 C:361 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 9
Face 721: A:360 B:376 C:377 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 9
 
Page 44
 
 
 
Face 722: A:361 B:378 C:362 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 10
Face 723: A:361 B:377 C:378 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 10
Face 724: A:362 B:379 C:363 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 11
Face 725: A:362 B:378 C:379 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 11
Face 726: A:363 B:380 C:364 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 12
Face 727: A:363 B:379 C:380 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 12
Face 728: A:364 B:381 C:365 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 13
Face 729: A:364 B:380 C:381 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 13
Face 730: A:365 B:382 C:366 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 14
Face 731: A:365 B:381 C:382 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 14
Face 732: A:366 B:383 C:367 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 15
Face 733: A:366 B:382 C:383 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 15
Face 734: A:367 B:368 C:352 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 16
Face 735: A:367 B:383 C:368 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 16
Face 736: A:368 B:385 C:369 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 17
Face 737: A:368 B:384 C:385 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 17
Face 738: A:369 B:386 C:370 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 18
Face 739: A:369 B:385 C:386 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 18
Face 740: A:370 B:387 C:371 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 19
Face 741: A:370 B:386 C:387 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 19
Face 742: A:371 B:388 C:372 AB:0 BC:1 CA:1
 
Page 45
 
 
 
Material:"BLUE PLASTIC"
Smoothing: 20
Face 743: A:371 B:387 C:388 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 20
Face 744: A:372 B:389 C:373 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 21
Face 745: A:372 B:388 C:389 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 21
Face 746: A:373 B:390 C:374 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 22
Face 747: A:373 B:389 C:390 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 22
Face 748: A:374 B:391 C:375 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 23
Face 749: A:374 B:390 C:391 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 23
Face 750: A:375 B:392 C:376 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 24
Face 751: A:375 B:391 C:392 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 24
Face 752: A:376 B:393 C:377 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 25
Face 753: A:376 B:392 C:393 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 25
Face 754: A:377 B:394 C:378 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 26
Face 755: A:377 B:393 C:394 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 26
Face 756: A:378 B:395 C:379 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 27
Face 757: A:378 B:394 C:395 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 27
Face 758: A:379 B:396 C:380 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 28
Face 759: A:379 B:395 C:396 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 28
Face 760: A:380 B:397 C:381 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 29
Face 761: A:380 B:396 C:397 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 29
Face 762: A:381 B:398 C:382 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
 
Page 46
 
 
 
Smoothing: 30
Face 763: A:381 B:397 C:398 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 30
Face 764: A:382 B:399 C:383 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 31
Face 765: A:382 B:398 C:399 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 31
Face 766: A:383 B:384 C:368 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 32
Face 767: A:383 B:399 C:384 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 32
Face 768: A:384 B:401 C:385 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 1
Face 769: A:384 B:400 C:401 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 1
Face 770: A:385 B:402 C:386 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 2
Face 771: A:385 B:401 C:402 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 2
Face 772: A:386 B:403 C:387 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 3
Face 773: A:386 B:402 C:403 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 3
Face 774: A:387 B:404 C:388 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 4
Face 775: A:387 B:403 C:404 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 4
Face 776: A:388 B:405 C:389 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 5
Face 777: A:388 B:404 C:405 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 5
Face 778: A:389 B:406 C:390 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 6
Face 779: A:389 B:405 C:406 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 6
Face 780: A:390 B:407 C:391 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 7
Face 781: A:390 B:406 C:407 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 7
Face 782: A:391 B:408 C:392 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 8
 
Page 47
 
 
 
Face 783: A:391 B:407 C:408 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 8
Face 784: A:392 B:409 C:393 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 9
Face 785: A:392 B:408 C:409 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 9
Face 786: A:393 B:410 C:394 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 10
Face 787: A:393 B:409 C:410 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 10
Face 788: A:394 B:411 C:395 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 11
Face 789: A:394 B:410 C:411 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 11
Face 790: A:395 B:412 C:396 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 12
Face 791: A:395 B:411 C:412 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 12
Face 792: A:396 B:413 C:397 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 13
Face 793: A:396 B:412 C:413 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 13
Face 794: A:397 B:414 C:398 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 14
Face 795: A:397 B:413 C:414 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 14
Face 796: A:398 B:415 C:399 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 15
Face 797: A:398 B:414 C:415 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 15
Face 798: A:399 B:400 C:384 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 16
Face 799: A:399 B:415 C:400 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 16
Face 800: A:400 B:417 C:401 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 17
Face 801: A:400 B:416 C:417 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 17
Face 802: A:401 B:418 C:402 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 18
Face 803: A:401 B:417 C:418 AB:1 BC:1 CA:0
 
Page 48
 
 
 
Material:"BLUE PLASTIC"
Smoothing: 18
Face 804: A:402 B:419 C:403 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 19
Face 805: A:402 B:418 C:419 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 19
Face 806: A:403 B:420 C:404 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 20
Face 807: A:403 B:419 C:420 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 20
Face 808: A:404 B:421 C:405 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 21
Face 809: A:404 B:420 C:421 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 21
Face 810: A:405 B:422 C:406 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 22
Face 811: A:405 B:421 C:422 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 22
Face 812: A:406 B:423 C:407 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 23
Face 813: A:406 B:422 C:423 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 23
Face 814: A:407 B:424 C:408 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 24
Face 815: A:407 B:423 C:424 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 24
Face 816: A:408 B:425 C:409 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 25
Face 817: A:408 B:424 C:425 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 25
Face 818: A:409 B:426 C:410 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 26
Face 819: A:409 B:425 C:426 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 26
Face 820: A:410 B:427 C:411 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 27
Face 821: A:410 B:426 C:427 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 27
Face 822: A:411 B:428 C:412 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 28
Face 823: A:411 B:427 C:428 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
 
Page 49
 
 
 
Smoothing: 28
Face 824: A:412 B:429 C:413 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 29
Face 825: A:412 B:428 C:429 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 29
Face 826: A:413 B:430 C:414 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 30
Face 827: A:413 B:429 C:430 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 30
Face 828: A:414 B:431 C:415 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 31
Face 829: A:414 B:430 C:431 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 31
Face 830: A:415 B:416 C:400 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 32
Face 831: A:415 B:431 C:416 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 32
Face 832: A:416 B:433 C:417 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 1
Face 833: A:416 B:432 C:433 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 1
Face 834: A:417 B:434 C:418 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 2
Face 835: A:417 B:433 C:434 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 2
Face 836: A:418 B:435 C:419 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 3
Face 837: A:418 B:434 C:435 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 3
Face 838: A:419 B:436 C:420 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 4
Face 839: A:419 B:435 C:436 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 4
Face 840: A:420 B:437 C:421 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 5
Face 841: A:420 B:436 C:437 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 5
Face 842: A:421 B:438 C:422 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 6
Face 843: A:421 B:437 C:438 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 6
 
Page 50
 
 
 
Face 844: A:422 B:439 C:423 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 7
Face 845: A:422 B:438 C:439 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 7
Face 846: A:423 B:440 C:424 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 8
Face 847: A:423 B:439 C:440 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 8
Face 848: A:424 B:441 C:425 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 9
Face 849: A:424 B:440 C:441 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 9
Face 850: A:425 B:442 C:426 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 10
Face 851: A:425 B:441 C:442 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 10
Face 852: A:426 B:443 C:427 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 11
Face 853: A:426 B:442 C:443 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 11
Face 854: A:427 B:444 C:428 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 12
Face 855: A:427 B:443 C:444 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 12
Face 856: A:428 B:445 C:429 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 13
Face 857: A:428 B:444 C:445 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 13
Face 858: A:429 B:446 C:430 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 14
Face 859: A:429 B:445 C:446 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 14
Face 860: A:430 B:447 C:431 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 15
Face 861: A:430 B:446 C:447 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 15
Face 862: A:431 B:432 C:416 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 16
Face 863: A:431 B:447 C:432 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 16
Face 864: A:432 B:449 C:433 AB:0 BC:1 CA:1
 
Page 51
 
 
 
Material:"BLUE PLASTIC"
Smoothing: 17
Face 865: A:432 B:448 C:449 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 17
Face 866: A:433 B:450 C:434 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 18
Face 867: A:433 B:449 C:450 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 18
Face 868: A:434 B:451 C:435 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 19
Face 869: A:434 B:450 C:451 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 19
Face 870: A:435 B:452 C:436 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 20
Face 871: A:435 B:451 C:452 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 20
Face 872: A:436 B:453 C:437 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 21
Face 873: A:436 B:452 C:453 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 21
Face 874: A:437 B:454 C:438 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 22
Face 875: A:437 B:453 C:454 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 22
Face 876: A:438 B:455 C:439 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 23
Face 877: A:438 B:454 C:455 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 23
Face 878: A:439 B:456 C:440 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 24
Face 879: A:439 B:455 C:456 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 24
Face 880: A:440 B:457 C:441 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 25
Face 881: A:440 B:456 C:457 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 25
Face 882: A:441 B:458 C:442 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 26
Face 883: A:441 B:457 C:458 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 26
Face 884: A:442 B:459 C:443 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
 
Page 52
 
 
 
Smoothing: 27
Face 885: A:442 B:458 C:459 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 27
Face 886: A:443 B:460 C:444 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 28
Face 887: A:443 B:459 C:460 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 28
Face 888: A:444 B:461 C:445 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 29
Face 889: A:444 B:460 C:461 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 29
Face 890: A:445 B:462 C:446 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 30
Face 891: A:445 B:461 C:462 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 30
Face 892: A:446 B:463 C:447 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 31
Face 893: A:446 B:462 C:463 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 31
Face 894: A:447 B:448 C:432 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 32
Face 895: A:447 B:463 C:448 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 32
Face 896: A:448 B:465 C:449 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 1
Face 897: A:448 B:464 C:465 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 1
Face 898: A:449 B:466 C:450 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 2
Face 899: A:449 B:465 C:466 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 2
Face 900: A:450 B:467 C:451 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 3
Face 901: A:450 B:466 C:467 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 3
Face 902: A:451 B:468 C:452 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 4
Face 903: A:451 B:467 C:468 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 4
Face 904: A:452 B:469 C:453 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 5
 
Page 53
 
 
 
Face 905: A:452 B:468 C:469 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 5
Face 906: A:453 B:470 C:454 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 6
Face 907: A:453 B:469 C:470 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 6
Face 908: A:454 B:471 C:455 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 7
Face 909: A:454 B:470 C:471 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 7
Face 910: A:455 B:472 C:456 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 8
Face 911: A:455 B:471 C:472 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 8
Face 912: A:456 B:473 C:457 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 9
Face 913: A:456 B:472 C:473 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 9
Face 914: A:457 B:474 C:458 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 10
Face 915: A:457 B:473 C:474 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 10
Face 916: A:458 B:475 C:459 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 11
Face 917: A:458 B:474 C:475 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 11
Face 918: A:459 B:476 C:460 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 12
Face 919: A:459 B:475 C:476 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 12
Face 920: A:460 B:477 C:461 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 13
Face 921: A:460 B:476 C:477 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 13
Face 922: A:461 B:478 C:462 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 14
Face 923: A:461 B:477 C:478 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 14
Face 924: A:462 B:479 C:463 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 15
Face 925: A:462 B:478 C:479 AB:1 BC:1 CA:0
 
Page 54
 
 
 
Material:"BLUE PLASTIC"
Smoothing: 15
Face 926: A:463 B:464 C:448 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 16
Face 927: A:463 B:479 C:464 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 16
Face 928: A:464 B:481 C:465 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 17
Face 929: A:464 B:480 C:481 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 17
Face 930: A:465 B:482 C:466 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 18
Face 931: A:465 B:481 C:482 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 18
Face 932: A:466 B:483 C:467 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 19
Face 933: A:466 B:482 C:483 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 19
Face 934: A:467 B:484 C:468 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 20
Face 935: A:467 B:483 C:484 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 20
Face 936: A:468 B:485 C:469 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 21
Face 937: A:468 B:484 C:485 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 21
Face 938: A:469 B:486 C:470 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 22
Face 939: A:469 B:485 C:486 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 22
Face 940: A:470 B:487 C:471 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 23
Face 941: A:470 B:486 C:487 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 23
Face 942: A:471 B:488 C:472 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 24
Face 943: A:471 B:487 C:488 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 24
Face 944: A:472 B:489 C:473 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 25
Face 945: A:472 B:488 C:489 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
 
Page 55
 
 
 
Smoothing: 25
Face 946: A:473 B:490 C:474 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 26
Face 947: A:473 B:489 C:490 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 26
Face 948: A:474 B:491 C:475 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 27
Face 949: A:474 B:490 C:491 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 27
Face 950: A:475 B:492 C:476 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 28
Face 951: A:475 B:491 C:492 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 28
Face 952: A:476 B:493 C:477 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 29
Face 953: A:476 B:492 C:493 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 29
Face 954: A:477 B:494 C:478 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 30
Face 955: A:477 B:493 C:494 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 30
Face 956: A:478 B:495 C:479 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 31
Face 957: A:478 B:494 C:495 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 31
Face 958: A:479 B:480 C:464 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 32
Face 959: A:479 B:495 C:480 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 32
Face 960: A:480 B:497 C:481 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 1
Face 961: A:480 B:496 C:497 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 1
Face 962: A:481 B:498 C:482 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 2
Face 963: A:481 B:497 C:498 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 2
Face 964: A:482 B:499 C:483 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 3
Face 965: A:482 B:498 C:499 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 3
 
Page 56
 
 
 
Face 966: A:483 B:500 C:484 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 4
Face 967: A:483 B:499 C:500 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 4
Face 968: A:484 B:501 C:485 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 5
Face 969: A:484 B:500 C:501 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 5
Face 970: A:485 B:502 C:486 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 6
Face 971: A:485 B:501 C:502 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 6
Face 972: A:486 B:503 C:487 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 7
Face 973: A:486 B:502 C:503 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 7
Face 974: A:487 B:504 C:488 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 8
Face 975: A:487 B:503 C:504 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 8
Face 976: A:488 B:505 C:489 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 9
Face 977: A:488 B:504 C:505 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 9
Face 978: A:489 B:506 C:490 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 10
Face 979: A:489 B:505 C:506 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 10
Face 980: A:490 B:507 C:491 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 11
Face 981: A:490 B:506 C:507 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 11
Face 982: A:491 B:508 C:492 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 12
Face 983: A:491 B:507 C:508 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 12
Face 984: A:492 B:509 C:493 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 13
Face 985: A:492 B:508 C:509 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 13
Face 986: A:493 B:510 C:494 AB:0 BC:1 CA:1
 
Page 57
 
 
 
Material:"BLUE PLASTIC"
Smoothing: 14
Face 987: A:493 B:509 C:510 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 14
Face 988: A:494 B:511 C:495 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 15
Face 989: A:494 B:510 C:511 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 15
Face 990: A:495 B:496 C:480 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 16
Face 991: A:495 B:511 C:496 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 16
Face 992: A:496 B:257 C:497 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 17
Face 993: A:496 B:256 C:257 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 17
Face 994: A:497 B:258 C:498 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 18
Face 995: A:497 B:257 C:258 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 18
Face 996: A:498 B:259 C:499 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 19
Face 997: A:498 B:258 C:259 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 19
Face 998: A:499 B:260 C:500 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 20
Face 999: A:499 B:259 C:260 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 20
Face 1000: A:500 B:261 C:501 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 21
Face 1001: A:500 B:260 C:261 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 21
Face 1002: A:501 B:262 C:502 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 22
Face 1003: A:501 B:261 C:262 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 22
Face 1004: A:502 B:263 C:503 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 23
Face 1005: A:502 B:262 C:263 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 23
Face 1006: A:503 B:264 C:504 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
 
Page 58
 
 
 
Smoothing: 24
Face 1007: A:503 B:263 C:264 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 24
Face 1008: A:504 B:265 C:505 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 25
Face 1009: A:504 B:264 C:265 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 25
Face 1010: A:505 B:266 C:506 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 26
Face 1011: A:505 B:265 C:266 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 26
Face 1012: A:506 B:267 C:507 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 27
Face 1013: A:506 B:266 C:267 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 27
Face 1014: A:507 B:268 C:508 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 28
Face 1015: A:507 B:267 C:268 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 28
Face 1016: A:508 B:269 C:509 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 29
Face 1017: A:508 B:268 C:269 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 29
Face 1018: A:509 B:270 C:510 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 30
Face 1019: A:509 B:269 C:270 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 30
Face 1020: A:510 B:271 C:511 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 31
Face 1021: A:510 B:270 C:271 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 31
Face 1022: A:511 B:256 C:496 AB:0 BC:1 CA:1
Material:"BLUE PLASTIC"
Smoothing: 32
Face 1023: A:511 B:271 C:256 AB:1 BC:1 CA:0
Material:"BLUE PLASTIC"
Smoothing: 32
 
Named object: "Light01"
Direct light
Position: X:-184.258514 Y:-220.365723 Z:140.796509
Light color: Red=0.886275 Green=0.886275 Blue=0.886275
 
 
 
 
 
Page 59
 
 
 
/programs/demos/view3ds/asc_objects/3TORUS.ASC
0,0 → 1,2112
Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
 
Named object: "Object02"
Tri-mesh, Vertices: 384 Faces: 768
Vertex list:
Vertex 0: X: 209.644867 Y: -0.000012 Z: -140.53125
Vertex 1: X: 204.976227 Y: -13.569129 Z: -137.401718
Vertex 2: X: 193.705139 Y: -19.18964 Z: -129.846359
Vertex 3: X: 182.434036 Y: -13.569127 Z: -122.291016
Vertex 4: X: 177.765396 Y: -0.000009 Z: -119.161491
Vertex 5: X: 182.434052 Y: 13.569108 Z: -122.291023
Vertex 6: X: 193.705139 Y: 19.189617 Z: -129.846375
Vertex 7: X: 204.976227 Y: 13.569106 Z: -137.401733
Vertex 8: X: 247.465591 Y: -0.000004 Z: -49.606297
Vertex 9: X: 241.954712 Y: -13.56912 Z: -48.501598
Vertex 10: X: 228.650269 Y: -19.189632 Z: -45.834625
Vertex 11: X: 215.345825 Y: -13.56912 Z: -43.167652
Vertex 12: X: 209.834946 Y: -0.000002 Z: -42.062958
Vertex 13: X: 215.345825 Y: 13.569115 Z: -43.167652
Vertex 14: X: 228.650269 Y: 19.189625 Z: -45.834625
Vertex 15: X: 241.954712 Y: 13.569115 Z: -48.501598
Vertex 16: X: 247.611908 Y: 0.000004 Z: 48.870781
Vertex 17: X: 242.097763 Y: -13.569113 Z: 47.782467
Vertex 18: X: 228.785461 Y: -19.189625 Z: 45.155037
Vertex 19: X: 215.473145 Y: -13.569113 Z: 42.527607
Vertex 20: X: 209.959015 Y: 0.000005 Z: 41.439289
Vertex 21: X: 215.47316 Y: 13.569122 Z: 42.527607
Vertex 22: X: 228.785461 Y: 19.189632 Z: 45.155037
Vertex 23: X: 242.097763 Y: 13.569122 Z: 47.782467
Vertex 24: X: 210.061508 Y: 0.000012 Z: 139.907715
Vertex 25: X: 205.383591 Y: -13.569104 Z: 136.792068
Vertex 26: X: 194.090088 Y: -19.189617 Z: 129.270248
Vertex 27: X: 182.7966 Y: -13.569106 Z: 121.748413
Vertex 28: X: 178.118683 Y: 0.000012 Z: 118.632767
Vertex 29: X: 182.7966 Y: 13.569129 Z: 121.748413
Vertex 30: X: 194.090088 Y: 19.18964 Z: 129.270233
Vertex 31: X: 205.383575 Y: 13.569131 Z: 136.792053
Vertex 32: X: 140.531113 Y: 0.000018 Z: 209.644958
Vertex 33: X: 137.401596 Y: -13.569098 Z: 204.976334
Vertex 34: X: 129.846252 Y: -19.189611 Z: 193.705215
Vertex 35: X: 122.290901 Y: -13.5691 Z: 182.434128
Vertex 36: X: 119.161377 Y: 0.000017 Z: 177.765472
Vertex 37: X: 122.290901 Y: 13.569135 Z: 182.434113
Vertex 38: X: 129.846252 Y: 19.189646 Z: 193.7052
Vertex 39: X: 137.401596 Y: 13.569137 Z: 204.976318
Vertex 40: X: 49.606136 Y: 0.000022 Z: 247.465637
Vertex 41: X: 48.501442 Y: -13.569096 Z: 241.954758
Vertex 42: X: 45.83448 Y: -19.18961 Z: 228.650314
Vertex 43: X: 43.167515 Y: -13.569098 Z: 215.345871
Vertex 44: X: 42.06282 Y: 0.00002 Z: 209.834991
Vertex 45: X: 43.167515 Y: 13.569138 Z: 215.345856
Vertex 46: X: 45.83448 Y: 19.189648 Z: 228.650299
Vertex 47: X: 48.501442 Y: 13.569139 Z: 241.954742
Vertex 48: X: -48.870941 Y: 0.000022 Z: 247.611877
Vertex 49: X: -47.782619 Y: -13.569096 Z: 242.097733
Vertex 50: X: -45.155182 Y: -19.18961 Z: 228.785446
Vertex 51: X: -42.527744 Y: -13.569098 Z: 215.473129
Vertex 52: X: -41.439423 Y: 0.00002 Z: 209.958984
Vertex 53: X: -42.527744 Y: 13.569138 Z: 215.473114
Vertex 54: X: -45.155182 Y: 19.189648 Z: 228.785431
Vertex 55: X: -47.782619 Y: 13.569139 Z: 242.097717
 
Page 1
 
 
 
Vertex 56: X: -139.907852 Y: 0.000018 Z: 210.061401
Vertex 57: X: -136.792206 Y: -13.569098 Z: 205.383499
Vertex 58: X: -129.27037 Y: -19.189611 Z: 194.090012
Vertex 59: X: -121.748528 Y: -13.5691 Z: 182.796524
Vertex 60: X: -118.632881 Y: 0.000017 Z: 178.118591
Vertex 61: X: -121.748528 Y: 13.569135 Z: 182.796509
Vertex 62: X: -129.27037 Y: 19.189646 Z: 194.089996
Vertex 63: X: -136.792206 Y: 13.569137 Z: 205.383484
Vertex 64: X: -209.64505 Y: 0.000012 Z: 140.530975
Vertex 65: X: -204.97641 Y: -13.569104 Z: 137.401474
Vertex 66: X: -193.705307 Y: -19.189617 Z: 129.846115
Vertex 67: X: -182.434204 Y: -13.569106 Z: 122.290787
Vertex 68: X: -177.765549 Y: 0.000012 Z: 119.161263
Vertex 69: X: -182.434204 Y: 13.569129 Z: 122.290787
Vertex 70: X: -193.705307 Y: 19.18964 Z: 129.8461
Vertex 71: X: -204.97641 Y: 13.569131 Z: 137.401459
Vertex 72: X: -247.465668 Y: 0.000004 Z: 49.60598
Vertex 73: X: -241.954788 Y: -13.569113 Z: 48.501289
Vertex 74: X: -228.650345 Y: -19.189625 Z: 45.834332
Vertex 75: X: -215.345886 Y: -13.569113 Z: 43.167377
Vertex 76: X: -209.835007 Y: 0.000005 Z: 42.062687
Vertex 77: X: -215.345901 Y: 13.569122 Z: 43.167377
Vertex 78: X: -228.650345 Y: 19.189632 Z: 45.834332
Vertex 79: X: -241.954788 Y: 13.569122 Z: 48.501289
Vertex 80: X: -247.611847 Y: -0.000004 Z: -48.871098
Vertex 81: X: -242.097702 Y: -13.56912 Z: -47.782776
Vertex 82: X: -228.7854 Y: -19.189632 Z: -45.155327
Vertex 83: X: -215.473099 Y: -13.56912 Z: -42.527882
Vertex 84: X: -209.958969 Y: -0.000002 Z: -41.439556
Vertex 85: X: -215.473099 Y: 13.569115 Z: -42.527882
Vertex 86: X: -228.7854 Y: 19.189625 Z: -45.155327
Vertex 87: X: -242.097702 Y: 13.569115 Z: -47.782772
Vertex 88: X: -210.061325 Y: -0.000012 Z: -139.90799
Vertex 89: X: -205.383408 Y: -13.569129 Z: -136.792343
Vertex 90: X: -194.08992 Y: -19.18964 Z: -129.270493
Vertex 91: X: -182.796432 Y: -13.569127 Z: -121.74865
Vertex 92: X: -178.11853 Y: -0.000009 Z: -118.632996
Vertex 93: X: -182.796448 Y: 13.569108 Z: -121.74865
Vertex 94: X: -194.08992 Y: 19.189617 Z: -129.270508
Vertex 95: X: -205.383408 Y: 13.569106 Z: -136.792328
Vertex 96: X: -140.530869 Y: -0.000018 Z: -209.645142
Vertex 97: X: -137.401337 Y: -13.569135 Z: -204.976486
Vertex 98: X: -129.846008 Y: -19.189646 Z: -193.705368
Vertex 99: X: -122.29068 Y: -13.569133 Z: -182.43428
Vertex 100: X: -119.161156 Y: -0.000014 Z: -177.765656
Vertex 101: X: -122.29068 Y: 13.569102 Z: -182.434296
Vertex 102: X: -129.846008 Y: 19.189611 Z: -193.705383
Vertex 103: X: -137.401337 Y: 13.5691 Z: -204.976501
Vertex 104: X: -49.60582 Y: -0.000022 Z: -247.465698
Vertex 105: X: -48.501137 Y: -13.569138 Z: -241.954819
Vertex 106: X: -45.834187 Y: -19.189648 Z: -228.650345
Vertex 107: X: -43.16724 Y: -13.569136 Z: -215.345901
Vertex 108: X: -42.062553 Y: -0.000017 Z: -209.835052
Vertex 109: X: -43.16724 Y: 13.569099 Z: -215.345917
Vertex 110: X: -45.834187 Y: 19.18961 Z: -228.65036
Vertex 111: X: -48.501133 Y: 13.569098 Z: -241.954834
Vertex 112: X: 48.871262 Y: -0.000022 Z: -247.611816
Vertex 113: X: 47.782932 Y: -13.569138 Z: -242.097641
Vertex 114: X: 45.155476 Y: -19.189648 Z: -228.785355
Vertex 115: X: 42.528023 Y: -13.569136 Z: -215.473038
Vertex 116: X: 41.439693 Y: -0.000017 Z: -209.958923
 
Page 2
 
 
 
Vertex 117: X: 42.528023 Y: 13.569099 Z: -215.473083
Vertex 118: X: 45.155476 Y: 19.18961 Z: -228.78537
Vertex 119: X: 47.782932 Y: 13.569098 Z: -242.097656
Vertex 120: X: 139.908127 Y: -0.000018 Z: -210.061249
Vertex 121: X: 136.792465 Y: -13.569135 Z: -205.383316
Vertex 122: X: 129.270615 Y: -19.189646 Z: -194.089828
Vertex 123: X: 121.748764 Y: -13.569133 Z: -182.796341
Vertex 124: X: 118.63311 Y: -0.000014 Z: -178.118469
Vertex 125: X: 121.748764 Y: 13.569102 Z: -182.796356
Vertex 126: X: 129.270615 Y: 19.189611 Z: -194.089844
Vertex 127: X: 136.792465 Y: 13.5691 Z: -205.383331
Vertex 128: X: 249.932419 Y: -20.827681 Z: 0.000002
Vertex 129: X: 244.116898 Y: -20.343052 Z: 14.088573
Vertex 130: X: 230.076996 Y: -19.173061 Z: 19.92425
Vertex 131: X: 216.037094 Y: -18.003071 Z: 14.088573
Vertex 132: X: 210.221573 Y: -17.518446 Z: -0
Vertex 133: X: 216.037094 Y: -18.003075 Z: -14.088572
Vertex 134: X: 230.076996 Y: -19.173065 Z: -19.924246
Vertex 135: X: 244.116898 Y: -20.343056 Z: -14.088571
Vertex 136: X: 238.877838 Y: 76.402763 Z: -0.000007
Vertex 137: X: 233.319534 Y: 74.624992 Z: 14.088564
Vertex 138: X: 219.90062 Y: 70.333084 Z: 19.924242
Vertex 139: X: 206.481705 Y: 66.041176 Z: 14.088565
Vertex 140: X: 200.923401 Y: 64.263405 Z: -0.000007
Vertex 141: X: 206.481705 Y: 66.041176 Z: -14.088579
Vertex 142: X: 219.90062 Y: 70.333084 Z: -19.924253
Vertex 143: X: 233.319534 Y: 74.624992 Z: -14.088579
Vertex 144: X: 191.456238 Y: 162.001572 Z: -0.000014
Vertex 145: X: 187.001373 Y: 158.232056 Z: 14.088556
Vertex 146: X: 176.246353 Y: 149.131653 Z: 19.924234
Vertex 147: X: 165.491333 Y: 140.03125 Z: 14.088558
Vertex 148: X: 161.036453 Y: 136.261734 Z: -0.000014
Vertex 149: X: 165.491333 Y: 140.03125 Z: -14.088586
Vertex 150: X: 176.246353 Y: 149.131653 Z: -19.924261
Vertex 151: X: 187.001358 Y: 158.232056 Z: -14.088587
Vertex 152: X: 114.887154 Y: 222.937073 Z: -0.000019
Vertex 153: X: 112.213913 Y: 217.749695 Z: 14.088552
Vertex 154: X: 105.760147 Y: 205.226242 Z: 19.924231
Vertex 155: X: 99.306389 Y: 192.702805 Z: 14.088553
Vertex 156: X: 96.633148 Y: 187.515427 Z: -0.000018
Vertex 157: X: 99.306389 Y: 192.702805 Z: -14.088591
Vertex 158: X: 105.760147 Y: 205.226242 Z: -19.924265
Vertex 159: X: 112.213913 Y: 217.749695 Z: -14.088592
Vertex 160: X: 20.82752 Y: 249.932419 Z: -0.000022
Vertex 161: X: 20.342897 Y: 244.116898 Z: 14.08855
Vertex 162: X: 19.172916 Y: 230.076996 Z: 19.924227
Vertex 163: X: 18.002934 Y: 216.037094 Z: 14.088552
Vertex 164: X: 17.518311 Y: 210.221573 Z: -0.00002
Vertex 165: X: 18.002934 Y: 216.037094 Z: -14.088593
Vertex 166: X: 19.172916 Y: 230.076996 Z: -19.924269
Vertex 167: X: 20.342897 Y: 244.116898 Z: -14.088593
Vertex 168: X: -76.402802 Y: 238.877823 Z: -0.000021
Vertex 169: X: -74.625031 Y: 233.319519 Z: 14.088551
Vertex 170: X: -70.333122 Y: 219.900604 Z: 19.924229
Vertex 171: X: -66.041206 Y: 206.481689 Z: 14.088552
Vertex 172: X: -64.263435 Y: 200.923386 Z: -0.000019
Vertex 173: X: -66.041206 Y: 206.481689 Z: -14.088592
Vertex 174: X: -70.333122 Y: 219.900604 Z: -19.924267
Vertex 175: X: -74.625031 Y: 233.319519 Z: -14.088593
Vertex 176: X: -162.001602 Y: 191.456223 Z: -0.000017
Vertex 177: X: -158.232086 Y: 187.001358 Z: 14.088554
 
Page 3
 
 
 
Vertex 178: X: -149.131683 Y: 176.246338 Z: 19.924232
Vertex 179: X: -140.031281 Y: 165.491318 Z: 14.088556
Vertex 180: X: -136.261765 Y: 161.036438 Z: -0.000016
Vertex 181: X: -140.031281 Y: 165.491318 Z: -14.088588
Vertex 182: X: -149.131683 Y: 176.246338 Z: -19.924263
Vertex 183: X: -158.232086 Y: 187.001358 Z: -14.088589
Vertex 184: X: -222.937103 Y: 114.887123 Z: -0.00001
Vertex 185: X: -217.749725 Y: 112.213882 Z: 14.088561
Vertex 186: X: -205.226273 Y: 105.760124 Z: 19.924238
Vertex 187: X: -192.70282 Y: 99.306358 Z: 14.088562
Vertex 188: X: -187.515442 Y: 96.633125 Z: -0.00001
Vertex 189: X: -192.702835 Y: 99.306358 Z: -14.088582
Vertex 190: X: -205.226273 Y: 105.760124 Z: -19.924257
Vertex 191: X: -217.749725 Y: 112.213882 Z: -14.088582
Vertex 192: X: -249.932434 Y: 20.82748 Z: -0.000002
Vertex 193: X: -244.116913 Y: 20.342861 Z: 14.088569
Vertex 194: X: -230.077011 Y: 19.172882 Z: 19.924246
Vertex 195: X: -216.037094 Y: 18.002901 Z: 14.088569
Vertex 196: X: -210.221573 Y: 17.518278 Z: -0.000003
Vertex 197: X: -216.037109 Y: 18.002899 Z: -14.088575
Vertex 198: X: -230.077011 Y: 19.172878 Z: -19.92425
Vertex 199: X: -244.116913 Y: 20.342857 Z: -14.088574
Vertex 200: X: -238.877777 Y: -76.402954 Z: 0.000007
Vertex 201: X: -233.319473 Y: -74.625183 Z: 14.088577
Vertex 202: X: -219.900558 Y: -70.333267 Z: 19.924253
Vertex 203: X: -206.481644 Y: -66.041344 Z: 14.088576
Vertex 204: X: -200.923355 Y: -64.263573 Z: 0.000004
Vertex 205: X: -206.481659 Y: -66.041344 Z: -14.088568
Vertex 206: X: -219.900558 Y: -70.333267 Z: -19.924242
Vertex 207: X: -233.319473 Y: -74.625183 Z: -14.088566
Vertex 208: X: -191.456116 Y: -162.001724 Z: 0.000014
Vertex 209: X: -187.001251 Y: -158.232208 Z: 14.088585
Vertex 210: X: -176.246231 Y: -149.13179 Z: 19.924261
Vertex 211: X: -165.491226 Y: -140.031372 Z: 14.088583
Vertex 212: X: -161.036362 Y: -136.261856 Z: 0.00001
Vertex 213: X: -165.491226 Y: -140.031372 Z: -14.088561
Vertex 214: X: -176.246246 Y: -149.13179 Z: -19.924234
Vertex 215: X: -187.001251 Y: -158.232208 Z: -14.088558
Vertex 216: X: -114.886971 Y: -222.93718 Z: 0.000019
Vertex 217: X: -112.213737 Y: -217.749802 Z: 14.08859
Vertex 218: X: -105.759987 Y: -205.226349 Z: 19.924265
Vertex 219: X: -99.306229 Y: -192.702896 Z: 14.088588
Vertex 220: X: -96.633003 Y: -187.515503 Z: 0.000015
Vertex 221: X: -99.306236 Y: -192.702896 Z: -14.088556
Vertex 222: X: -105.759987 Y: -205.226349 Z: -19.924231
Vertex 223: X: -112.213737 Y: -217.749802 Z: -14.088553
Vertex 224: X: -20.82732 Y: -249.932449 Z: 0.000022
Vertex 225: X: -20.342703 Y: -244.116928 Z: 14.088592
Vertex 226: X: -19.172731 Y: -230.077026 Z: 19.924269
Vertex 227: X: -18.002762 Y: -216.037109 Z: 14.08859
Vertex 228: X: -17.518143 Y: -210.221588 Z: 0.000017
Vertex 229: X: -18.002762 Y: -216.037109 Z: -14.088554
Vertex 230: X: -19.172731 Y: -230.077026 Z: -19.924227
Vertex 231: X: -20.342703 Y: -244.116928 Z: -14.088552
Vertex 232: X: 76.403107 Y: -238.877731 Z: 0.000021
Vertex 233: X: 74.625328 Y: -233.319427 Z: 14.088591
Vertex 234: X: 70.333405 Y: -219.900528 Z: 19.924267
Vertex 235: X: 66.041473 Y: -206.481613 Z: 14.088589
Vertex 236: X: 64.263695 Y: -200.923325 Z: 0.000016
Vertex 237: X: 66.041473 Y: -206.481613 Z: -14.088555
Vertex 238: X: 70.333405 Y: -219.900528 Z: -19.924229
 
Page 4
 
 
 
Vertex 239: X: 74.625328 Y: -233.319427 Z: -14.088552
Vertex 240: X: 162.001846 Y: -191.456024 Z: 0.000017
Vertex 241: X: 158.23233 Y: -187.001144 Z: 14.088587
Vertex 242: X: 149.131897 Y: -176.24614 Z: 19.924263
Vertex 243: X: 140.031479 Y: -165.491135 Z: 14.088585
Vertex 244: X: 136.261963 Y: -161.03627 Z: 0.000012
Vertex 245: X: 140.031479 Y: -165.491135 Z: -14.088559
Vertex 246: X: 149.131897 Y: -176.24614 Z: -19.924232
Vertex 247: X: 158.23233 Y: -187.001144 Z: -14.088556
Vertex 248: X: 222.937256 Y: -114.886833 Z: 0.00001
Vertex 249: X: 217.749878 Y: -112.2136 Z: 14.08858
Vertex 250: X: 205.22641 Y: -105.759857 Z: 19.924257
Vertex 251: X: 192.702957 Y: -99.306107 Z: 14.088579
Vertex 252: X: 187.515564 Y: -96.632881 Z: 0.000007
Vertex 253: X: 192.702957 Y: -99.306107 Z: -14.088565
Vertex 254: X: 205.22641 Y: -105.759857 Z: -19.924238
Vertex 255: X: 217.749863 Y: -112.2136 Z: -14.088563
Vertex 256: X: 0 Y: -209.644852 Z: -140.53125
Vertex 257: X: -15.663151 Y: -204.255737 Z: -136.918762
Vertex 258: X: -22.151039 Y: -191.245255 Z: -128.197449
Vertex 259: X: -15.66315 Y: -178.234756 Z: -119.476128
Vertex 260: X: 0.000002 Y: -172.845642 Z: -115.863632
Vertex 261: X: 15.663153 Y: -178.234772 Z: -119.476128
Vertex 262: X: 22.151039 Y: -191.245255 Z: -128.197449
Vertex 263: X: 15.663153 Y: -204.255737 Z: -136.918762
Vertex 264: X: 0 Y: -139.907639 Z: -210.061569
Vertex 265: X: -15.663151 Y: -136.311172 Z: -204.661728
Vertex 266: X: -22.151039 Y: -127.628555 Z: -191.625381
Vertex 267: X: -15.66315 Y: -118.945938 Z: -178.589035
Vertex 268: X: 0.000002 Y: -115.34948 Z: -173.189194
Vertex 269: X: 15.663153 Y: -118.945938 Z: -178.589035
Vertex 270: X: 22.151039 Y: -127.628555 Z: -191.625381
Vertex 271: X: 15.663153 Y: -136.311172 Z: -204.661728
Vertex 272: X: 0 Y: -48.870712 Z: -247.611893
Vertex 273: X: -15.663151 Y: -47.614445 Z: -241.246811
Vertex 274: X: -22.151039 Y: -44.581543 Z: -225.880081
Vertex 275: X: -15.66315 Y: -41.548645 Z: -210.513382
Vertex 276: X: 0.000002 Y: -40.292377 Z: -204.14827
Vertex 277: X: 15.663153 Y: -41.548645 Z: -210.513382
Vertex 278: X: 22.151039 Y: -44.581543 Z: -225.880081
Vertex 279: X: 15.663153 Y: -47.614445 Z: -241.24678
Vertex 280: X: 0 Y: 49.606331 Z: -247.465576
Vertex 281: X: -15.663151 Y: 48.331154 Z: -241.104248
Vertex 282: X: -22.151039 Y: 45.252605 Z: -225.746613
Vertex 283: X: -15.66315 Y: 42.174049 Z: -210.388977
Vertex 284: X: 0.000002 Y: 40.898872 Z: -204.027649
Vertex 285: X: 15.663153 Y: 42.174049 Z: -210.388977
Vertex 286: X: 22.151039 Y: 45.252605 Z: -225.746613
Vertex 287: X: 15.663153 Y: 48.331154 Z: -241.104248
Vertex 288: X: 0 Y: 140.531265 Z: -209.644836
Vertex 289: X: -15.663151 Y: 136.918777 Z: -204.255737
Vertex 290: X: -22.151039 Y: 128.197449 Z: -191.245239
Vertex 291: X: -15.66315 Y: 119.476128 Z: -178.234741
Vertex 292: X: 0.000002 Y: 115.863632 Z: -172.845642
Vertex 293: X: 15.663153 Y: 119.476128 Z: -178.234772
Vertex 294: X: 22.151039 Y: 128.197449 Z: -191.245239
Vertex 295: X: 15.663153 Y: 136.918762 Z: -204.255737
Vertex 296: X: 0 Y: 210.061569 Z: -139.907608
Vertex 297: X: -15.663151 Y: 204.661728 Z: -136.311142
Vertex 298: X: -22.151039 Y: 191.625381 Z: -127.62851
Vertex 299: X: -15.66315 Y: 178.589035 Z: -118.9459
 
Page 5
 
 
 
Vertex 300: X: 0.000002 Y: 173.189194 Z: -115.349442
Vertex 301: X: 15.663153 Y: 178.589035 Z: -118.9459
Vertex 302: X: 22.151039 Y: 191.625381 Z: -127.62851
Vertex 303: X: 15.663153 Y: 204.661728 Z: -136.311142
Vertex 304: X: 0 Y: 247.611908 Z: -48.870678
Vertex 305: X: -15.663151 Y: 241.246811 Z: -47.61441
Vertex 306: X: -22.151039 Y: 225.880096 Z: -44.581512
Vertex 307: X: -15.66315 Y: 210.513382 Z: -41.548615
Vertex 308: X: 0.000002 Y: 204.148285 Z: -40.292347
Vertex 309: X: 15.663153 Y: 210.513382 Z: -41.548615
Vertex 310: X: 22.151039 Y: 225.880096 Z: -44.581512
Vertex 311: X: 15.663153 Y: 241.246796 Z: -47.61441
Vertex 312: X: 0 Y: 247.465561 Z: 49.606354
Vertex 313: X: -15.663151 Y: 241.104218 Z: 48.331177
Vertex 314: X: -22.151039 Y: 225.746597 Z: 45.252625
Vertex 315: X: -15.66315 Y: 210.388962 Z: 42.174068
Vertex 316: X: 0.000002 Y: 204.027634 Z: 40.898891
Vertex 317: X: 15.663153 Y: 210.388962 Z: 42.174072
Vertex 318: X: 22.151039 Y: 225.746597 Z: 45.252625
Vertex 319: X: 15.663153 Y: 241.104218 Z: 48.331177
Vertex 320: X: 0 Y: 209.644836 Z: 140.531265
Vertex 321: X: -15.663151 Y: 204.255722 Z: 136.918777
Vertex 322: X: -22.151039 Y: 191.245239 Z: 128.197464
Vertex 323: X: -15.66315 Y: 178.234756 Z: 119.476135
Vertex 324: X: 0.000002 Y: 172.845627 Z: 115.863647
Vertex 325: X: 15.663153 Y: 178.234756 Z: 119.476135
Vertex 326: X: 22.151039 Y: 191.245239 Z: 128.197464
Vertex 327: X: 15.663153 Y: 204.255722 Z: 136.918777
Vertex 328: X: 0 Y: 139.907593 Z: 210.061584
Vertex 329: X: -15.663151 Y: 136.311127 Z: 204.661743
Vertex 330: X: -22.151039 Y: 127.62851 Z: 191.625397
Vertex 331: X: -15.66315 Y: 118.9459 Z: 178.58905
Vertex 332: X: 0.000002 Y: 115.349442 Z: 173.189209
Vertex 333: X: 15.663153 Y: 118.9459 Z: 178.58905
Vertex 334: X: 22.151039 Y: 127.62851 Z: 191.625397
Vertex 335: X: 15.663153 Y: 136.311127 Z: 204.661743
Vertex 336: X: 0 Y: 48.870659 Z: 247.611908
Vertex 337: X: -15.663151 Y: 47.614391 Z: 241.246826
Vertex 338: X: -22.151039 Y: 44.581493 Z: 225.880096
Vertex 339: X: -15.66315 Y: 41.548599 Z: 210.513397
Vertex 340: X: 0.000002 Y: 40.292332 Z: 204.148285
Vertex 341: X: 15.663153 Y: 41.548599 Z: 210.513397
Vertex 342: X: 22.151039 Y: 44.581493 Z: 225.880096
Vertex 343: X: 15.663153 Y: 47.614391 Z: 241.246796
Vertex 344: X: 0 Y: -49.60638 Z: 247.465561
Vertex 345: X: -15.663151 Y: -48.331203 Z: 241.104233
Vertex 346: X: -22.151039 Y: -45.252647 Z: 225.746597
Vertex 347: X: -15.66315 Y: -42.174091 Z: 210.388962
Vertex 348: X: 0.000002 Y: -40.898911 Z: 204.027634
Vertex 349: X: 15.663153 Y: -42.174091 Z: 210.388962
Vertex 350: X: 22.151039 Y: -45.252647 Z: 225.746597
Vertex 351: X: 15.663153 Y: -48.3312 Z: 241.104233
Vertex 352: X: 0 Y: -140.531311 Z: 209.644821
Vertex 353: X: -15.663151 Y: -136.918808 Z: 204.255692
Vertex 354: X: -22.151039 Y: -128.197495 Z: 191.245224
Vertex 355: X: -15.66315 Y: -119.476166 Z: 178.234726
Vertex 356: X: 0.000002 Y: -115.86367 Z: 172.845596
Vertex 357: X: 15.663153 Y: -119.476166 Z: 178.234726
Vertex 358: X: 22.151039 Y: -128.197495 Z: 191.245224
Vertex 359: X: 15.663153 Y: -136.918808 Z: 204.255692
Vertex 360: X: 0 Y: -210.061584 Z: 139.907593
 
Page 6
 
 
 
Vertex 361: X: -15.663151 Y: -204.661743 Z: 136.311127
Vertex 362: X: -22.151039 Y: -191.625397 Z: 127.628502
Vertex 363: X: -15.66315 Y: -178.58905 Z: 118.945885
Vertex 364: X: 0.000002 Y: -173.189209 Z: 115.349426
Vertex 365: X: 15.663153 Y: -178.58905 Z: 118.945885
Vertex 366: X: 22.151039 Y: -191.625397 Z: 127.628502
Vertex 367: X: 15.663153 Y: -204.661743 Z: 136.311127
Vertex 368: X: 0 Y: -247.611908 Z: 48.870678
Vertex 369: X: -15.663151 Y: -241.246811 Z: 47.61441
Vertex 370: X: -22.151039 Y: -225.880096 Z: 44.581512
Vertex 371: X: -15.66315 Y: -210.513382 Z: 41.548615
Vertex 372: X: 0.000002 Y: -204.148285 Z: 40.292347
Vertex 373: X: 15.663153 Y: -210.513382 Z: 41.548615
Vertex 374: X: 22.151039 Y: -225.880096 Z: 44.581512
Vertex 375: X: 15.663153 Y: -241.246796 Z: 47.61441
Vertex 376: X: 0 Y: -247.465576 Z: -49.606331
Vertex 377: X: -15.663151 Y: -241.104233 Z: -48.331154
Vertex 378: X: -22.151039 Y: -225.746613 Z: -45.252605
Vertex 379: X: -15.66315 Y: -210.388977 Z: -42.174049
Vertex 380: X: 0.000002 Y: -204.027634 Z: -40.898872
Vertex 381: X: 15.663153 Y: -210.388977 Z: -42.174049
Vertex 382: X: 22.151039 Y: -225.746613 Z: -45.252605
Vertex 383: X: 15.663153 Y: -241.104233 Z: -48.331154
Face list:
Face 0: A:0 B:9 C:1 AB:0 BC:1 CA:1
Smoothing: 1
Face 1: A:0 B:8 C:9 AB:1 BC:1 CA:0
Smoothing: 1
Face 2: A:1 B:10 C:2 AB:0 BC:1 CA:1
Smoothing: 2
Face 3: A:1 B:9 C:10 AB:1 BC:1 CA:0
Smoothing: 2
Face 4: A:2 B:11 C:3 AB:0 BC:1 CA:1
Smoothing: 3
Face 5: A:2 B:10 C:11 AB:1 BC:1 CA:0
Smoothing: 3
Face 6: A:3 B:12 C:4 AB:0 BC:1 CA:1
Smoothing: 4
Face 7: A:3 B:11 C:12 AB:1 BC:1 CA:0
Smoothing: 4
Face 8: A:4 B:13 C:5 AB:0 BC:1 CA:1
Smoothing: 5
Face 9: A:4 B:12 C:13 AB:1 BC:1 CA:0
Smoothing: 5
Face 10: A:5 B:14 C:6 AB:0 BC:1 CA:1
Smoothing: 6
Face 11: A:5 B:13 C:14 AB:1 BC:1 CA:0
Smoothing: 6
Face 12: A:6 B:15 C:7 AB:0 BC:1 CA:1
Smoothing: 7
Face 13: A:6 B:14 C:15 AB:1 BC:1 CA:0
Smoothing: 7
Face 14: A:7 B:8 C:0 AB:0 BC:1 CA:1
Smoothing: 8
Face 15: A:7 B:15 C:8 AB:1 BC:1 CA:0
Smoothing: 8
Face 16: A:8 B:17 C:9 AB:0 BC:1 CA:1
Smoothing: 9
Face 17: A:8 B:16 C:17 AB:1 BC:1 CA:0
Smoothing: 9
Face 18: A:9 B:18 C:10 AB:0 BC:1 CA:1
 
Page 7
 
 
 
Smoothing: 10
Face 19: A:9 B:17 C:18 AB:1 BC:1 CA:0
Smoothing: 10
Face 20: A:10 B:19 C:11 AB:0 BC:1 CA:1
Smoothing: 11
Face 21: A:10 B:18 C:19 AB:1 BC:1 CA:0
Smoothing: 11
Face 22: A:11 B:20 C:12 AB:0 BC:1 CA:1
Smoothing: 12
Face 23: A:11 B:19 C:20 AB:1 BC:1 CA:0
Smoothing: 12
Face 24: A:12 B:21 C:13 AB:0 BC:1 CA:1
Smoothing: 13
Face 25: A:12 B:20 C:21 AB:1 BC:1 CA:0
Smoothing: 13
Face 26: A:13 B:22 C:14 AB:0 BC:1 CA:1
Smoothing: 14
Face 27: A:13 B:21 C:22 AB:1 BC:1 CA:0
Smoothing: 14
Face 28: A:14 B:23 C:15 AB:0 BC:1 CA:1
Smoothing: 15
Face 29: A:14 B:22 C:23 AB:1 BC:1 CA:0
Smoothing: 15
Face 30: A:15 B:16 C:8 AB:0 BC:1 CA:1
Smoothing: 16
Face 31: A:15 B:23 C:16 AB:1 BC:1 CA:0
Smoothing: 16
Face 32: A:16 B:25 C:17 AB:0 BC:1 CA:1
Smoothing: 17
Face 33: A:16 B:24 C:25 AB:1 BC:1 CA:0
Smoothing: 17
Face 34: A:17 B:26 C:18 AB:0 BC:1 CA:1
Smoothing: 18
Face 35: A:17 B:25 C:26 AB:1 BC:1 CA:0
Smoothing: 18
Face 36: A:18 B:27 C:19 AB:0 BC:1 CA:1
Smoothing: 19
Face 37: A:18 B:26 C:27 AB:1 BC:1 CA:0
Smoothing: 19
Face 38: A:19 B:28 C:20 AB:0 BC:1 CA:1
Smoothing: 20
Face 39: A:19 B:27 C:28 AB:1 BC:1 CA:0
Smoothing: 20
Face 40: A:20 B:29 C:21 AB:0 BC:1 CA:1
Smoothing: 21
Face 41: A:20 B:28 C:29 AB:1 BC:1 CA:0
Smoothing: 21
Face 42: A:21 B:30 C:22 AB:0 BC:1 CA:1
Smoothing: 22
Face 43: A:21 B:29 C:30 AB:1 BC:1 CA:0
Smoothing: 22
Face 44: A:22 B:31 C:23 AB:0 BC:1 CA:1
Smoothing: 23
Face 45: A:22 B:30 C:31 AB:1 BC:1 CA:0
Smoothing: 23
Face 46: A:23 B:24 C:16 AB:0 BC:1 CA:1
Smoothing: 24
Face 47: A:23 B:31 C:24 AB:1 BC:1 CA:0
Smoothing: 24
Face 48: A:24 B:33 C:25 AB:0 BC:1 CA:1
Smoothing: 25
 
Page 8
 
 
 
Face 49: A:24 B:32 C:33 AB:1 BC:1 CA:0
Smoothing: 25
Face 50: A:25 B:34 C:26 AB:0 BC:1 CA:1
Smoothing: 26
Face 51: A:25 B:33 C:34 AB:1 BC:1 CA:0
Smoothing: 26
Face 52: A:26 B:35 C:27 AB:0 BC:1 CA:1
Smoothing: 27
Face 53: A:26 B:34 C:35 AB:1 BC:1 CA:0
Smoothing: 27
Face 54: A:27 B:36 C:28 AB:0 BC:1 CA:1
Smoothing: 28
Face 55: A:27 B:35 C:36 AB:1 BC:1 CA:0
Smoothing: 28
Face 56: A:28 B:37 C:29 AB:0 BC:1 CA:1
Smoothing: 29
Face 57: A:28 B:36 C:37 AB:1 BC:1 CA:0
Smoothing: 29
Face 58: A:29 B:38 C:30 AB:0 BC:1 CA:1
Smoothing: 30
Face 59: A:29 B:37 C:38 AB:1 BC:1 CA:0
Smoothing: 30
Face 60: A:30 B:39 C:31 AB:0 BC:1 CA:1
Smoothing: 31
Face 61: A:30 B:38 C:39 AB:1 BC:1 CA:0
Smoothing: 31
Face 62: A:31 B:32 C:24 AB:0 BC:1 CA:1
Smoothing: 32
Face 63: A:31 B:39 C:32 AB:1 BC:1 CA:0
Smoothing: 32
Face 64: A:32 B:41 C:33 AB:0 BC:1 CA:1
Smoothing: 1
Face 65: A:32 B:40 C:41 AB:1 BC:1 CA:0
Smoothing: 1
Face 66: A:33 B:42 C:34 AB:0 BC:1 CA:1
Smoothing: 2
Face 67: A:33 B:41 C:42 AB:1 BC:1 CA:0
Smoothing: 2
Face 68: A:34 B:43 C:35 AB:0 BC:1 CA:1
Smoothing: 3
Face 69: A:34 B:42 C:43 AB:1 BC:1 CA:0
Smoothing: 3
Face 70: A:35 B:44 C:36 AB:0 BC:1 CA:1
Smoothing: 4
Face 71: A:35 B:43 C:44 AB:1 BC:1 CA:0
Smoothing: 4
Face 72: A:36 B:45 C:37 AB:0 BC:1 CA:1
Smoothing: 5
Face 73: A:36 B:44 C:45 AB:1 BC:1 CA:0
Smoothing: 5
Face 74: A:37 B:46 C:38 AB:0 BC:1 CA:1
Smoothing: 6
Face 75: A:37 B:45 C:46 AB:1 BC:1 CA:0
Smoothing: 6
Face 76: A:38 B:47 C:39 AB:0 BC:1 CA:1
Smoothing: 7
Face 77: A:38 B:46 C:47 AB:1 BC:1 CA:0
Smoothing: 7
Face 78: A:39 B:40 C:32 AB:0 BC:1 CA:1
Smoothing: 8
Face 79: A:39 B:47 C:40 AB:1 BC:1 CA:0
 
Page 9
 
 
 
Smoothing: 8
Face 80: A:40 B:49 C:41 AB:0 BC:1 CA:1
Smoothing: 9
Face 81: A:40 B:48 C:49 AB:1 BC:1 CA:0
Smoothing: 9
Face 82: A:41 B:50 C:42 AB:0 BC:1 CA:1
Smoothing: 10
Face 83: A:41 B:49 C:50 AB:1 BC:1 CA:0
Smoothing: 10
Face 84: A:42 B:51 C:43 AB:0 BC:1 CA:1
Smoothing: 11
Face 85: A:42 B:50 C:51 AB:1 BC:1 CA:0
Smoothing: 11
Face 86: A:43 B:52 C:44 AB:0 BC:1 CA:1
Smoothing: 12
Face 87: A:43 B:51 C:52 AB:1 BC:1 CA:0
Smoothing: 12
Face 88: A:44 B:53 C:45 AB:0 BC:1 CA:1
Smoothing: 13
Face 89: A:44 B:52 C:53 AB:1 BC:1 CA:0
Smoothing: 13
Face 90: A:45 B:54 C:46 AB:0 BC:1 CA:1
Smoothing: 14
Face 91: A:45 B:53 C:54 AB:1 BC:1 CA:0
Smoothing: 14
Face 92: A:46 B:55 C:47 AB:0 BC:1 CA:1
Smoothing: 15
Face 93: A:46 B:54 C:55 AB:1 BC:1 CA:0
Smoothing: 15
Face 94: A:47 B:48 C:40 AB:0 BC:1 CA:1
Smoothing: 16
Face 95: A:47 B:55 C:48 AB:1 BC:1 CA:0
Smoothing: 16
Face 96: A:48 B:57 C:49 AB:0 BC:1 CA:1
Smoothing: 17
Face 97: A:48 B:56 C:57 AB:1 BC:1 CA:0
Smoothing: 17
Face 98: A:49 B:58 C:50 AB:0 BC:1 CA:1
Smoothing: 18
Face 99: A:49 B:57 C:58 AB:1 BC:1 CA:0
Smoothing: 18
Face 100: A:50 B:59 C:51 AB:0 BC:1 CA:1
Smoothing: 19
Face 101: A:50 B:58 C:59 AB:1 BC:1 CA:0
Smoothing: 19
Face 102: A:51 B:60 C:52 AB:0 BC:1 CA:1
Smoothing: 20
Face 103: A:51 B:59 C:60 AB:1 BC:1 CA:0
Smoothing: 20
Face 104: A:52 B:61 C:53 AB:0 BC:1 CA:1
Smoothing: 21
Face 105: A:52 B:60 C:61 AB:1 BC:1 CA:0
Smoothing: 21
Face 106: A:53 B:62 C:54 AB:0 BC:1 CA:1
Smoothing: 22
Face 107: A:53 B:61 C:62 AB:1 BC:1 CA:0
Smoothing: 22
Face 108: A:54 B:63 C:55 AB:0 BC:1 CA:1
Smoothing: 23
Face 109: A:54 B:62 C:63 AB:1 BC:1 CA:0
Smoothing: 23
 
Page 10
 
 
 
Face 110: A:55 B:56 C:48 AB:0 BC:1 CA:1
Smoothing: 24
Face 111: A:55 B:63 C:56 AB:1 BC:1 CA:0
Smoothing: 24
Face 112: A:56 B:65 C:57 AB:0 BC:1 CA:1
Smoothing: 25
Face 113: A:56 B:64 C:65 AB:1 BC:1 CA:0
Smoothing: 25
Face 114: A:57 B:66 C:58 AB:0 BC:1 CA:1
Smoothing: 26
Face 115: A:57 B:65 C:66 AB:1 BC:1 CA:0
Smoothing: 26
Face 116: A:58 B:67 C:59 AB:0 BC:1 CA:1
Smoothing: 27
Face 117: A:58 B:66 C:67 AB:1 BC:1 CA:0
Smoothing: 27
Face 118: A:59 B:68 C:60 AB:0 BC:1 CA:1
Smoothing: 28
Face 119: A:59 B:67 C:68 AB:1 BC:1 CA:0
Smoothing: 28
Face 120: A:60 B:69 C:61 AB:0 BC:1 CA:1
Smoothing: 29
Face 121: A:60 B:68 C:69 AB:1 BC:1 CA:0
Smoothing: 29
Face 122: A:61 B:70 C:62 AB:0 BC:1 CA:1
Smoothing: 30
Face 123: A:61 B:69 C:70 AB:1 BC:1 CA:0
Smoothing: 30
Face 124: A:62 B:71 C:63 AB:0 BC:1 CA:1
Smoothing: 31
Face 125: A:62 B:70 C:71 AB:1 BC:1 CA:0
Smoothing: 31
Face 126: A:63 B:64 C:56 AB:0 BC:1 CA:1
Smoothing: 32
Face 127: A:63 B:71 C:64 AB:1 BC:1 CA:0
Smoothing: 32
Face 128: A:64 B:73 C:65 AB:0 BC:1 CA:1
Smoothing: 1
Face 129: A:64 B:72 C:73 AB:1 BC:1 CA:0
Smoothing: 1
Face 130: A:65 B:74 C:66 AB:0 BC:1 CA:1
Smoothing: 2
Face 131: A:65 B:73 C:74 AB:1 BC:1 CA:0
Smoothing: 2
Face 132: A:66 B:75 C:67 AB:0 BC:1 CA:1
Smoothing: 3
Face 133: A:66 B:74 C:75 AB:1 BC:1 CA:0
Smoothing: 3
Face 134: A:67 B:76 C:68 AB:0 BC:1 CA:1
Smoothing: 4
Face 135: A:67 B:75 C:76 AB:1 BC:1 CA:0
Smoothing: 4
Face 136: A:68 B:77 C:69 AB:0 BC:1 CA:1
Smoothing: 5
Face 137: A:68 B:76 C:77 AB:1 BC:1 CA:0
Smoothing: 5
Face 138: A:69 B:78 C:70 AB:0 BC:1 CA:1
Smoothing: 6
Face 139: A:69 B:77 C:78 AB:1 BC:1 CA:0
Smoothing: 6
Face 140: A:70 B:79 C:71 AB:0 BC:1 CA:1
 
Page 11
 
 
 
Smoothing: 7
Face 141: A:70 B:78 C:79 AB:1 BC:1 CA:0
Smoothing: 7
Face 142: A:71 B:72 C:64 AB:0 BC:1 CA:1
Smoothing: 8
Face 143: A:71 B:79 C:72 AB:1 BC:1 CA:0
Smoothing: 8
Face 144: A:72 B:81 C:73 AB:0 BC:1 CA:1
Smoothing: 9
Face 145: A:72 B:80 C:81 AB:1 BC:1 CA:0
Smoothing: 9
Face 146: A:73 B:82 C:74 AB:0 BC:1 CA:1
Smoothing: 10
Face 147: A:73 B:81 C:82 AB:1 BC:1 CA:0
Smoothing: 10
Face 148: A:74 B:83 C:75 AB:0 BC:1 CA:1
Smoothing: 11
Face 149: A:74 B:82 C:83 AB:1 BC:1 CA:0
Smoothing: 11
Face 150: A:75 B:84 C:76 AB:0 BC:1 CA:1
Smoothing: 12
Face 151: A:75 B:83 C:84 AB:1 BC:1 CA:0
Smoothing: 12
Face 152: A:76 B:85 C:77 AB:0 BC:1 CA:1
Smoothing: 13
Face 153: A:76 B:84 C:85 AB:1 BC:1 CA:0
Smoothing: 13
Face 154: A:77 B:86 C:78 AB:0 BC:1 CA:1
Smoothing: 14
Face 155: A:77 B:85 C:86 AB:1 BC:1 CA:0
Smoothing: 14
Face 156: A:78 B:87 C:79 AB:0 BC:1 CA:1
Smoothing: 15
Face 157: A:78 B:86 C:87 AB:1 BC:1 CA:0
Smoothing: 15
Face 158: A:79 B:80 C:72 AB:0 BC:1 CA:1
Smoothing: 16
Face 159: A:79 B:87 C:80 AB:1 BC:1 CA:0
Smoothing: 16
Face 160: A:80 B:89 C:81 AB:0 BC:1 CA:1
Smoothing: 17
Face 161: A:80 B:88 C:89 AB:1 BC:1 CA:0
Smoothing: 17
Face 162: A:81 B:90 C:82 AB:0 BC:1 CA:1
Smoothing: 18
Face 163: A:81 B:89 C:90 AB:1 BC:1 CA:0
Smoothing: 18
Face 164: A:82 B:91 C:83 AB:0 BC:1 CA:1
Smoothing: 19
Face 165: A:82 B:90 C:91 AB:1 BC:1 CA:0
Smoothing: 19
Face 166: A:83 B:92 C:84 AB:0 BC:1 CA:1
Smoothing: 20
Face 167: A:83 B:91 C:92 AB:1 BC:1 CA:0
Smoothing: 20
Face 168: A:84 B:93 C:85 AB:0 BC:1 CA:1
Smoothing: 21
Face 169: A:84 B:92 C:93 AB:1 BC:1 CA:0
Smoothing: 21
Face 170: A:85 B:94 C:86 AB:0 BC:1 CA:1
Smoothing: 22
 
Page 12
 
 
 
Face 171: A:85 B:93 C:94 AB:1 BC:1 CA:0
Smoothing: 22
Face 172: A:86 B:95 C:87 AB:0 BC:1 CA:1
Smoothing: 23
Face 173: A:86 B:94 C:95 AB:1 BC:1 CA:0
Smoothing: 23
Face 174: A:87 B:88 C:80 AB:0 BC:1 CA:1
Smoothing: 24
Face 175: A:87 B:95 C:88 AB:1 BC:1 CA:0
Smoothing: 24
Face 176: A:88 B:97 C:89 AB:0 BC:1 CA:1
Smoothing: 25
Face 177: A:88 B:96 C:97 AB:1 BC:1 CA:0
Smoothing: 25
Face 178: A:89 B:98 C:90 AB:0 BC:1 CA:1
Smoothing: 26
Face 179: A:89 B:97 C:98 AB:1 BC:1 CA:0
Smoothing: 26
Face 180: A:90 B:99 C:91 AB:0 BC:1 CA:1
Smoothing: 27
Face 181: A:90 B:98 C:99 AB:1 BC:1 CA:0
Smoothing: 27
Face 182: A:91 B:100 C:92 AB:0 BC:1 CA:1
Smoothing: 28
Face 183: A:91 B:99 C:100 AB:1 BC:1 CA:0
Smoothing: 28
Face 184: A:92 B:101 C:93 AB:0 BC:1 CA:1
Smoothing: 29
Face 185: A:92 B:100 C:101 AB:1 BC:1 CA:0
Smoothing: 29
Face 186: A:93 B:102 C:94 AB:0 BC:1 CA:1
Smoothing: 30
Face 187: A:93 B:101 C:102 AB:1 BC:1 CA:0
Smoothing: 30
Face 188: A:94 B:103 C:95 AB:0 BC:1 CA:1
Smoothing: 31
Face 189: A:94 B:102 C:103 AB:1 BC:1 CA:0
Smoothing: 31
Face 190: A:95 B:96 C:88 AB:0 BC:1 CA:1
Smoothing: 32
Face 191: A:95 B:103 C:96 AB:1 BC:1 CA:0
Smoothing: 32
Face 192: A:96 B:105 C:97 AB:0 BC:1 CA:1
Smoothing: 1
Face 193: A:96 B:104 C:105 AB:1 BC:1 CA:0
Smoothing: 1
Face 194: A:97 B:106 C:98 AB:0 BC:1 CA:1
Smoothing: 2
Face 195: A:97 B:105 C:106 AB:1 BC:1 CA:0
Smoothing: 2
Face 196: A:98 B:107 C:99 AB:0 BC:1 CA:1
Smoothing: 3
Face 197: A:98 B:106 C:107 AB:1 BC:1 CA:0
Smoothing: 3
Face 198: A:99 B:108 C:100 AB:0 BC:1 CA:1
Smoothing: 4
Face 199: A:99 B:107 C:108 AB:1 BC:1 CA:0
Smoothing: 4
Face 200: A:100 B:109 C:101 AB:0 BC:1 CA:1
Smoothing: 5
Face 201: A:100 B:108 C:109 AB:1 BC:1 CA:0
 
Page 13
 
 
 
Smoothing: 5
Face 202: A:101 B:110 C:102 AB:0 BC:1 CA:1
Smoothing: 6
Face 203: A:101 B:109 C:110 AB:1 BC:1 CA:0
Smoothing: 6
Face 204: A:102 B:111 C:103 AB:0 BC:1 CA:1
Smoothing: 7
Face 205: A:102 B:110 C:111 AB:1 BC:1 CA:0
Smoothing: 7
Face 206: A:103 B:104 C:96 AB:0 BC:1 CA:1
Smoothing: 8
Face 207: A:103 B:111 C:104 AB:1 BC:1 CA:0
Smoothing: 8
Face 208: A:104 B:113 C:105 AB:0 BC:1 CA:1
Smoothing: 9
Face 209: A:104 B:112 C:113 AB:1 BC:1 CA:0
Smoothing: 9
Face 210: A:105 B:114 C:106 AB:0 BC:1 CA:1
Smoothing: 10
Face 211: A:105 B:113 C:114 AB:1 BC:1 CA:0
Smoothing: 10
Face 212: A:106 B:115 C:107 AB:0 BC:1 CA:1
Smoothing: 11
Face 213: A:106 B:114 C:115 AB:1 BC:1 CA:0
Smoothing: 11
Face 214: A:107 B:116 C:108 AB:0 BC:1 CA:1
Smoothing: 12
Face 215: A:107 B:115 C:116 AB:1 BC:1 CA:0
Smoothing: 12
Face 216: A:108 B:117 C:109 AB:0 BC:1 CA:1
Smoothing: 13
Face 217: A:108 B:116 C:117 AB:1 BC:1 CA:0
Smoothing: 13
Face 218: A:109 B:118 C:110 AB:0 BC:1 CA:1
Smoothing: 14
Face 219: A:109 B:117 C:118 AB:1 BC:1 CA:0
Smoothing: 14
Face 220: A:110 B:119 C:111 AB:0 BC:1 CA:1
Smoothing: 15
Face 221: A:110 B:118 C:119 AB:1 BC:1 CA:0
Smoothing: 15
Face 222: A:111 B:112 C:104 AB:0 BC:1 CA:1
Smoothing: 16
Face 223: A:111 B:119 C:112 AB:1 BC:1 CA:0
Smoothing: 16
Face 224: A:112 B:121 C:113 AB:0 BC:1 CA:1
Smoothing: 17
Face 225: A:112 B:120 C:121 AB:1 BC:1 CA:0
Smoothing: 17
Face 226: A:113 B:122 C:114 AB:0 BC:1 CA:1
Smoothing: 18
Face 227: A:113 B:121 C:122 AB:1 BC:1 CA:0
Smoothing: 18
Face 228: A:114 B:123 C:115 AB:0 BC:1 CA:1
Smoothing: 19
Face 229: A:114 B:122 C:123 AB:1 BC:1 CA:0
Smoothing: 19
Face 230: A:115 B:124 C:116 AB:0 BC:1 CA:1
Smoothing: 20
Face 231: A:115 B:123 C:124 AB:1 BC:1 CA:0
Smoothing: 20
 
Page 14
 
 
 
Face 232: A:116 B:125 C:117 AB:0 BC:1 CA:1
Smoothing: 21
Face 233: A:116 B:124 C:125 AB:1 BC:1 CA:0
Smoothing: 21
Face 234: A:117 B:126 C:118 AB:0 BC:1 CA:1
Smoothing: 22
Face 235: A:117 B:125 C:126 AB:1 BC:1 CA:0
Smoothing: 22
Face 236: A:118 B:127 C:119 AB:0 BC:1 CA:1
Smoothing: 23
Face 237: A:118 B:126 C:127 AB:1 BC:1 CA:0
Smoothing: 23
Face 238: A:119 B:120 C:112 AB:0 BC:1 CA:1
Smoothing: 24
Face 239: A:119 B:127 C:120 AB:1 BC:1 CA:0
Smoothing: 24
Face 240: A:120 B:1 C:121 AB:0 BC:1 CA:1
Smoothing: 25
Face 241: A:120 B:0 C:1 AB:1 BC:1 CA:0
Smoothing: 25
Face 242: A:121 B:2 C:122 AB:0 BC:1 CA:1
Smoothing: 26
Face 243: A:121 B:1 C:2 AB:1 BC:1 CA:0
Smoothing: 26
Face 244: A:122 B:3 C:123 AB:0 BC:1 CA:1
Smoothing: 27
Face 245: A:122 B:2 C:3 AB:1 BC:1 CA:0
Smoothing: 27
Face 246: A:123 B:4 C:124 AB:0 BC:1 CA:1
Smoothing: 28
Face 247: A:123 B:3 C:4 AB:1 BC:1 CA:0
Smoothing: 28
Face 248: A:124 B:5 C:125 AB:0 BC:1 CA:1
Smoothing: 29
Face 249: A:124 B:4 C:5 AB:1 BC:1 CA:0
Smoothing: 29
Face 250: A:125 B:6 C:126 AB:0 BC:1 CA:1
Smoothing: 30
Face 251: A:125 B:5 C:6 AB:1 BC:1 CA:0
Smoothing: 30
Face 252: A:126 B:7 C:127 AB:0 BC:1 CA:1
Smoothing: 31
Face 253: A:126 B:6 C:7 AB:1 BC:1 CA:0
Smoothing: 31
Face 254: A:127 B:0 C:120 AB:0 BC:1 CA:1
Smoothing: 32
Face 255: A:127 B:7 C:0 AB:1 BC:1 CA:0
Smoothing: 32
Face 256: A:128 B:137 C:129 AB:0 BC:1 CA:1
Smoothing: 1
Face 257: A:128 B:136 C:137 AB:1 BC:1 CA:0
Smoothing: 1
Face 258: A:129 B:138 C:130 AB:0 BC:1 CA:1
Smoothing: 2
Face 259: A:129 B:137 C:138 AB:1 BC:1 CA:0
Smoothing: 2
Face 260: A:130 B:139 C:131 AB:0 BC:1 CA:1
Smoothing: 3
Face 261: A:130 B:138 C:139 AB:1 BC:1 CA:0
Smoothing: 3
Face 262: A:131 B:140 C:132 AB:0 BC:1 CA:1
 
Page 15
 
 
 
Smoothing: 4
Face 263: A:131 B:139 C:140 AB:1 BC:1 CA:0
Smoothing: 4
Face 264: A:132 B:141 C:133 AB:0 BC:1 CA:1
Smoothing: 5
Face 265: A:132 B:140 C:141 AB:1 BC:1 CA:0
Smoothing: 5
Face 266: A:133 B:142 C:134 AB:0 BC:1 CA:1
Smoothing: 6
Face 267: A:133 B:141 C:142 AB:1 BC:1 CA:0
Smoothing: 6
Face 268: A:134 B:143 C:135 AB:0 BC:1 CA:1
Smoothing: 7
Face 269: A:134 B:142 C:143 AB:1 BC:1 CA:0
Smoothing: 7
Face 270: A:135 B:136 C:128 AB:0 BC:1 CA:1
Smoothing: 8
Face 271: A:135 B:143 C:136 AB:1 BC:1 CA:0
Smoothing: 8
Face 272: A:136 B:145 C:137 AB:0 BC:1 CA:1
Smoothing: 9
Face 273: A:136 B:144 C:145 AB:1 BC:1 CA:0
Smoothing: 9
Face 274: A:137 B:146 C:138 AB:0 BC:1 CA:1
Smoothing: 10
Face 275: A:137 B:145 C:146 AB:1 BC:1 CA:0
Smoothing: 10
Face 276: A:138 B:147 C:139 AB:0 BC:1 CA:1
Smoothing: 11
Face 277: A:138 B:146 C:147 AB:1 BC:1 CA:0
Smoothing: 11
Face 278: A:139 B:148 C:140 AB:0 BC:1 CA:1
Smoothing: 12
Face 279: A:139 B:147 C:148 AB:1 BC:1 CA:0
Smoothing: 12
Face 280: A:140 B:149 C:141 AB:0 BC:1 CA:1
Smoothing: 13
Face 281: A:140 B:148 C:149 AB:1 BC:1 CA:0
Smoothing: 13
Face 282: A:141 B:150 C:142 AB:0 BC:1 CA:1
Smoothing: 14
Face 283: A:141 B:149 C:150 AB:1 BC:1 CA:0
Smoothing: 14
Face 284: A:142 B:151 C:143 AB:0 BC:1 CA:1
Smoothing: 15
Face 285: A:142 B:150 C:151 AB:1 BC:1 CA:0
Smoothing: 15
Face 286: A:143 B:144 C:136 AB:0 BC:1 CA:1
Smoothing: 16
Face 287: A:143 B:151 C:144 AB:1 BC:1 CA:0
Smoothing: 16
Face 288: A:144 B:153 C:145 AB:0 BC:1 CA:1
Smoothing: 17
Face 289: A:144 B:152 C:153 AB:1 BC:1 CA:0
Smoothing: 17
Face 290: A:145 B:154 C:146 AB:0 BC:1 CA:1
Smoothing: 18
Face 291: A:145 B:153 C:154 AB:1 BC:1 CA:0
Smoothing: 18
Face 292: A:146 B:155 C:147 AB:0 BC:1 CA:1
Smoothing: 19
 
Page 16
 
 
 
Face 293: A:146 B:154 C:155 AB:1 BC:1 CA:0
Smoothing: 19
Face 294: A:147 B:156 C:148 AB:0 BC:1 CA:1
Smoothing: 20
Face 295: A:147 B:155 C:156 AB:1 BC:1 CA:0
Smoothing: 20
Face 296: A:148 B:157 C:149 AB:0 BC:1 CA:1
Smoothing: 21
Face 297: A:148 B:156 C:157 AB:1 BC:1 CA:0
Smoothing: 21
Face 298: A:149 B:158 C:150 AB:0 BC:1 CA:1
Smoothing: 22
Face 299: A:149 B:157 C:158 AB:1 BC:1 CA:0
Smoothing: 22
Face 300: A:150 B:159 C:151 AB:0 BC:1 CA:1
Smoothing: 23
Face 301: A:150 B:158 C:159 AB:1 BC:1 CA:0
Smoothing: 23
Face 302: A:151 B:152 C:144 AB:0 BC:1 CA:1
Smoothing: 24
Face 303: A:151 B:159 C:152 AB:1 BC:1 CA:0
Smoothing: 24
Face 304: A:152 B:161 C:153 AB:0 BC:1 CA:1
Smoothing: 25
Face 305: A:152 B:160 C:161 AB:1 BC:1 CA:0
Smoothing: 25
Face 306: A:153 B:162 C:154 AB:0 BC:1 CA:1
Smoothing: 26
Face 307: A:153 B:161 C:162 AB:1 BC:1 CA:0
Smoothing: 26
Face 308: A:154 B:163 C:155 AB:0 BC:1 CA:1
Smoothing: 27
Face 309: A:154 B:162 C:163 AB:1 BC:1 CA:0
Smoothing: 27
Face 310: A:155 B:164 C:156 AB:0 BC:1 CA:1
Smoothing: 28
Face 311: A:155 B:163 C:164 AB:1 BC:1 CA:0
Smoothing: 28
Face 312: A:156 B:165 C:157 AB:0 BC:1 CA:1
Smoothing: 29
Face 313: A:156 B:164 C:165 AB:1 BC:1 CA:0
Smoothing: 29
Face 314: A:157 B:166 C:158 AB:0 BC:1 CA:1
Smoothing: 30
Face 315: A:157 B:165 C:166 AB:1 BC:1 CA:0
Smoothing: 30
Face 316: A:158 B:167 C:159 AB:0 BC:1 CA:1
Smoothing: 31
Face 317: A:158 B:166 C:167 AB:1 BC:1 CA:0
Smoothing: 31
Face 318: A:159 B:160 C:152 AB:0 BC:1 CA:1
Smoothing: 32
Face 319: A:159 B:167 C:160 AB:1 BC:1 CA:0
Smoothing: 32
Face 320: A:160 B:169 C:161 AB:0 BC:1 CA:1
Smoothing: 1
Face 321: A:160 B:168 C:169 AB:1 BC:1 CA:0
Smoothing: 1
Face 322: A:161 B:170 C:162 AB:0 BC:1 CA:1
Smoothing: 2
Face 323: A:161 B:169 C:170 AB:1 BC:1 CA:0
 
Page 17
 
 
 
Smoothing: 2
Face 324: A:162 B:171 C:163 AB:0 BC:1 CA:1
Smoothing: 3
Face 325: A:162 B:170 C:171 AB:1 BC:1 CA:0
Smoothing: 3
Face 326: A:163 B:172 C:164 AB:0 BC:1 CA:1
Smoothing: 4
Face 327: A:163 B:171 C:172 AB:1 BC:1 CA:0
Smoothing: 4
Face 328: A:164 B:173 C:165 AB:0 BC:1 CA:1
Smoothing: 5
Face 329: A:164 B:172 C:173 AB:1 BC:1 CA:0
Smoothing: 5
Face 330: A:165 B:174 C:166 AB:0 BC:1 CA:1
Smoothing: 6
Face 331: A:165 B:173 C:174 AB:1 BC:1 CA:0
Smoothing: 6
Face 332: A:166 B:175 C:167 AB:0 BC:1 CA:1
Smoothing: 7
Face 333: A:166 B:174 C:175 AB:1 BC:1 CA:0
Smoothing: 7
Face 334: A:167 B:168 C:160 AB:0 BC:1 CA:1
Smoothing: 8
Face 335: A:167 B:175 C:168 AB:1 BC:1 CA:0
Smoothing: 8
Face 336: A:168 B:177 C:169 AB:0 BC:1 CA:1
Smoothing: 9
Face 337: A:168 B:176 C:177 AB:1 BC:1 CA:0
Smoothing: 9
Face 338: A:169 B:178 C:170 AB:0 BC:1 CA:1
Smoothing: 10
Face 339: A:169 B:177 C:178 AB:1 BC:1 CA:0
Smoothing: 10
Face 340: A:170 B:179 C:171 AB:0 BC:1 CA:1
Smoothing: 11
Face 341: A:170 B:178 C:179 AB:1 BC:1 CA:0
Smoothing: 11
Face 342: A:171 B:180 C:172 AB:0 BC:1 CA:1
Smoothing: 12
Face 343: A:171 B:179 C:180 AB:1 BC:1 CA:0
Smoothing: 12
Face 344: A:172 B:181 C:173 AB:0 BC:1 CA:1
Smoothing: 13
Face 345: A:172 B:180 C:181 AB:1 BC:1 CA:0
Smoothing: 13
Face 346: A:173 B:182 C:174 AB:0 BC:1 CA:1
Smoothing: 14
Face 347: A:173 B:181 C:182 AB:1 BC:1 CA:0
Smoothing: 14
Face 348: A:174 B:183 C:175 AB:0 BC:1 CA:1
Smoothing: 15
Face 349: A:174 B:182 C:183 AB:1 BC:1 CA:0
Smoothing: 15
Face 350: A:175 B:176 C:168 AB:0 BC:1 CA:1
Smoothing: 16
Face 351: A:175 B:183 C:176 AB:1 BC:1 CA:0
Smoothing: 16
Face 352: A:176 B:185 C:177 AB:0 BC:1 CA:1
Smoothing: 17
Face 353: A:176 B:184 C:185 AB:1 BC:1 CA:0
Smoothing: 17
 
Page 18
 
 
 
Face 354: A:177 B:186 C:178 AB:0 BC:1 CA:1
Smoothing: 18
Face 355: A:177 B:185 C:186 AB:1 BC:1 CA:0
Smoothing: 18
Face 356: A:178 B:187 C:179 AB:0 BC:1 CA:1
Smoothing: 19
Face 357: A:178 B:186 C:187 AB:1 BC:1 CA:0
Smoothing: 19
Face 358: A:179 B:188 C:180 AB:0 BC:1 CA:1
Smoothing: 20
Face 359: A:179 B:187 C:188 AB:1 BC:1 CA:0
Smoothing: 20
Face 360: A:180 B:189 C:181 AB:0 BC:1 CA:1
Smoothing: 21
Face 361: A:180 B:188 C:189 AB:1 BC:1 CA:0
Smoothing: 21
Face 362: A:181 B:190 C:182 AB:0 BC:1 CA:1
Smoothing: 22
Face 363: A:181 B:189 C:190 AB:1 BC:1 CA:0
Smoothing: 22
Face 364: A:182 B:191 C:183 AB:0 BC:1 CA:1
Smoothing: 23
Face 365: A:182 B:190 C:191 AB:1 BC:1 CA:0
Smoothing: 23
Face 366: A:183 B:184 C:176 AB:0 BC:1 CA:1
Smoothing: 24
Face 367: A:183 B:191 C:184 AB:1 BC:1 CA:0
Smoothing: 24
Face 368: A:184 B:193 C:185 AB:0 BC:1 CA:1
Smoothing: 25
Face 369: A:184 B:192 C:193 AB:1 BC:1 CA:0
Smoothing: 25
Face 370: A:185 B:194 C:186 AB:0 BC:1 CA:1
Smoothing: 26
Face 371: A:185 B:193 C:194 AB:1 BC:1 CA:0
Smoothing: 26
Face 372: A:186 B:195 C:187 AB:0 BC:1 CA:1
Smoothing: 27
Face 373: A:186 B:194 C:195 AB:1 BC:1 CA:0
Smoothing: 27
Face 374: A:187 B:196 C:188 AB:0 BC:1 CA:1
Smoothing: 28
Face 375: A:187 B:195 C:196 AB:1 BC:1 CA:0
Smoothing: 28
Face 376: A:188 B:197 C:189 AB:0 BC:1 CA:1
Smoothing: 29
Face 377: A:188 B:196 C:197 AB:1 BC:1 CA:0
Smoothing: 29
Face 378: A:189 B:198 C:190 AB:0 BC:1 CA:1
Smoothing: 30
Face 379: A:189 B:197 C:198 AB:1 BC:1 CA:0
Smoothing: 30
Face 380: A:190 B:199 C:191 AB:0 BC:1 CA:1
Smoothing: 31
Face 381: A:190 B:198 C:199 AB:1 BC:1 CA:0
Smoothing: 31
Face 382: A:191 B:192 C:184 AB:0 BC:1 CA:1
Smoothing: 32
Face 383: A:191 B:199 C:192 AB:1 BC:1 CA:0
Smoothing: 32
Face 384: A:192 B:201 C:193 AB:0 BC:1 CA:1
 
Page 19
 
 
 
Smoothing: 1
Face 385: A:192 B:200 C:201 AB:1 BC:1 CA:0
Smoothing: 1
Face 386: A:193 B:202 C:194 AB:0 BC:1 CA:1
Smoothing: 2
Face 387: A:193 B:201 C:202 AB:1 BC:1 CA:0
Smoothing: 2
Face 388: A:194 B:203 C:195 AB:0 BC:1 CA:1
Smoothing: 3
Face 389: A:194 B:202 C:203 AB:1 BC:1 CA:0
Smoothing: 3
Face 390: A:195 B:204 C:196 AB:0 BC:1 CA:1
Smoothing: 4
Face 391: A:195 B:203 C:204 AB:1 BC:1 CA:0
Smoothing: 4
Face 392: A:196 B:205 C:197 AB:0 BC:1 CA:1
Smoothing: 5
Face 393: A:196 B:204 C:205 AB:1 BC:1 CA:0
Smoothing: 5
Face 394: A:197 B:206 C:198 AB:0 BC:1 CA:1
Smoothing: 6
Face 395: A:197 B:205 C:206 AB:1 BC:1 CA:0
Smoothing: 6
Face 396: A:198 B:207 C:199 AB:0 BC:1 CA:1
Smoothing: 7
Face 397: A:198 B:206 C:207 AB:1 BC:1 CA:0
Smoothing: 7
Face 398: A:199 B:200 C:192 AB:0 BC:1 CA:1
Smoothing: 8
Face 399: A:199 B:207 C:200 AB:1 BC:1 CA:0
Smoothing: 8
Face 400: A:200 B:209 C:201 AB:0 BC:1 CA:1
Smoothing: 9
Face 401: A:200 B:208 C:209 AB:1 BC:1 CA:0
Smoothing: 9
Face 402: A:201 B:210 C:202 AB:0 BC:1 CA:1
Smoothing: 10
Face 403: A:201 B:209 C:210 AB:1 BC:1 CA:0
Smoothing: 10
Face 404: A:202 B:211 C:203 AB:0 BC:1 CA:1
Smoothing: 11
Face 405: A:202 B:210 C:211 AB:1 BC:1 CA:0
Smoothing: 11
Face 406: A:203 B:212 C:204 AB:0 BC:1 CA:1
Smoothing: 12
Face 407: A:203 B:211 C:212 AB:1 BC:1 CA:0
Smoothing: 12
Face 408: A:204 B:213 C:205 AB:0 BC:1 CA:1
Smoothing: 13
Face 409: A:204 B:212 C:213 AB:1 BC:1 CA:0
Smoothing: 13
Face 410: A:205 B:214 C:206 AB:0 BC:1 CA:1
Smoothing: 14
Face 411: A:205 B:213 C:214 AB:1 BC:1 CA:0
Smoothing: 14
Face 412: A:206 B:215 C:207 AB:0 BC:1 CA:1
Smoothing: 15
Face 413: A:206 B:214 C:215 AB:1 BC:1 CA:0
Smoothing: 15
Face 414: A:207 B:208 C:200 AB:0 BC:1 CA:1
Smoothing: 16
 
Page 20
 
 
 
Face 415: A:207 B:215 C:208 AB:1 BC:1 CA:0
Smoothing: 16
Face 416: A:208 B:217 C:209 AB:0 BC:1 CA:1
Smoothing: 17
Face 417: A:208 B:216 C:217 AB:1 BC:1 CA:0
Smoothing: 17
Face 418: A:209 B:218 C:210 AB:0 BC:1 CA:1
Smoothing: 18
Face 419: A:209 B:217 C:218 AB:1 BC:1 CA:0
Smoothing: 18
Face 420: A:210 B:219 C:211 AB:0 BC:1 CA:1
Smoothing: 19
Face 421: A:210 B:218 C:219 AB:1 BC:1 CA:0
Smoothing: 19
Face 422: A:211 B:220 C:212 AB:0 BC:1 CA:1
Smoothing: 20
Face 423: A:211 B:219 C:220 AB:1 BC:1 CA:0
Smoothing: 20
Face 424: A:212 B:221 C:213 AB:0 BC:1 CA:1
Smoothing: 21
Face 425: A:212 B:220 C:221 AB:1 BC:1 CA:0
Smoothing: 21
Face 426: A:213 B:222 C:214 AB:0 BC:1 CA:1
Smoothing: 22
Face 427: A:213 B:221 C:222 AB:1 BC:1 CA:0
Smoothing: 22
Face 428: A:214 B:223 C:215 AB:0 BC:1 CA:1
Smoothing: 23
Face 429: A:214 B:222 C:223 AB:1 BC:1 CA:0
Smoothing: 23
Face 430: A:215 B:216 C:208 AB:0 BC:1 CA:1
Smoothing: 24
Face 431: A:215 B:223 C:216 AB:1 BC:1 CA:0
Smoothing: 24
Face 432: A:216 B:225 C:217 AB:0 BC:1 CA:1
Smoothing: 25
Face 433: A:216 B:224 C:225 AB:1 BC:1 CA:0
Smoothing: 25
Face 434: A:217 B:226 C:218 AB:0 BC:1 CA:1
Smoothing: 26
Face 435: A:217 B:225 C:226 AB:1 BC:1 CA:0
Smoothing: 26
Face 436: A:218 B:227 C:219 AB:0 BC:1 CA:1
Smoothing: 27
Face 437: A:218 B:226 C:227 AB:1 BC:1 CA:0
Smoothing: 27
Face 438: A:219 B:228 C:220 AB:0 BC:1 CA:1
Smoothing: 28
Face 439: A:219 B:227 C:228 AB:1 BC:1 CA:0
Smoothing: 28
Face 440: A:220 B:229 C:221 AB:0 BC:1 CA:1
Smoothing: 29
Face 441: A:220 B:228 C:229 AB:1 BC:1 CA:0
Smoothing: 29
Face 442: A:221 B:230 C:222 AB:0 BC:1 CA:1
Smoothing: 30
Face 443: A:221 B:229 C:230 AB:1 BC:1 CA:0
Smoothing: 30
Face 444: A:222 B:231 C:223 AB:0 BC:1 CA:1
Smoothing: 31
Face 445: A:222 B:230 C:231 AB:1 BC:1 CA:0
 
Page 21
 
 
 
Smoothing: 31
Face 446: A:223 B:224 C:216 AB:0 BC:1 CA:1
Smoothing: 32
Face 447: A:223 B:231 C:224 AB:1 BC:1 CA:0
Smoothing: 32
Face 448: A:224 B:233 C:225 AB:0 BC:1 CA:1
Smoothing: 1
Face 449: A:224 B:232 C:233 AB:1 BC:1 CA:0
Smoothing: 1
Face 450: A:225 B:234 C:226 AB:0 BC:1 CA:1
Smoothing: 2
Face 451: A:225 B:233 C:234 AB:1 BC:1 CA:0
Smoothing: 2
Face 452: A:226 B:235 C:227 AB:0 BC:1 CA:1
Smoothing: 3
Face 453: A:226 B:234 C:235 AB:1 BC:1 CA:0
Smoothing: 3
Face 454: A:227 B:236 C:228 AB:0 BC:1 CA:1
Smoothing: 4
Face 455: A:227 B:235 C:236 AB:1 BC:1 CA:0
Smoothing: 4
Face 456: A:228 B:237 C:229 AB:0 BC:1 CA:1
Smoothing: 5
Face 457: A:228 B:236 C:237 AB:1 BC:1 CA:0
Smoothing: 5
Face 458: A:229 B:238 C:230 AB:0 BC:1 CA:1
Smoothing: 6
Face 459: A:229 B:237 C:238 AB:1 BC:1 CA:0
Smoothing: 6
Face 460: A:230 B:239 C:231 AB:0 BC:1 CA:1
Smoothing: 7
Face 461: A:230 B:238 C:239 AB:1 BC:1 CA:0
Smoothing: 7
Face 462: A:231 B:232 C:224 AB:0 BC:1 CA:1
Smoothing: 8
Face 463: A:231 B:239 C:232 AB:1 BC:1 CA:0
Smoothing: 8
Face 464: A:232 B:241 C:233 AB:0 BC:1 CA:1
Smoothing: 9
Face 465: A:232 B:240 C:241 AB:1 BC:1 CA:0
Smoothing: 9
Face 466: A:233 B:242 C:234 AB:0 BC:1 CA:1
Smoothing: 10
Face 467: A:233 B:241 C:242 AB:1 BC:1 CA:0
Smoothing: 10
Face 468: A:234 B:243 C:235 AB:0 BC:1 CA:1
Smoothing: 11
Face 469: A:234 B:242 C:243 AB:1 BC:1 CA:0
Smoothing: 11
Face 470: A:235 B:244 C:236 AB:0 BC:1 CA:1
Smoothing: 12
Face 471: A:235 B:243 C:244 AB:1 BC:1 CA:0
Smoothing: 12
Face 472: A:236 B:245 C:237 AB:0 BC:1 CA:1
Smoothing: 13
Face 473: A:236 B:244 C:245 AB:1 BC:1 CA:0
Smoothing: 13
Face 474: A:237 B:246 C:238 AB:0 BC:1 CA:1
Smoothing: 14
Face 475: A:237 B:245 C:246 AB:1 BC:1 CA:0
Smoothing: 14
 
Page 22
 
 
 
Face 476: A:238 B:247 C:239 AB:0 BC:1 CA:1
Smoothing: 15
Face 477: A:238 B:246 C:247 AB:1 BC:1 CA:0
Smoothing: 15
Face 478: A:239 B:240 C:232 AB:0 BC:1 CA:1
Smoothing: 16
Face 479: A:239 B:247 C:240 AB:1 BC:1 CA:0
Smoothing: 16
Face 480: A:240 B:249 C:241 AB:0 BC:1 CA:1
Smoothing: 17
Face 481: A:240 B:248 C:249 AB:1 BC:1 CA:0
Smoothing: 17
Face 482: A:241 B:250 C:242 AB:0 BC:1 CA:1
Smoothing: 18
Face 483: A:241 B:249 C:250 AB:1 BC:1 CA:0
Smoothing: 18
Face 484: A:242 B:251 C:243 AB:0 BC:1 CA:1
Smoothing: 19
Face 485: A:242 B:250 C:251 AB:1 BC:1 CA:0
Smoothing: 19
Face 486: A:243 B:252 C:244 AB:0 BC:1 CA:1
Smoothing: 20
Face 487: A:243 B:251 C:252 AB:1 BC:1 CA:0
Smoothing: 20
Face 488: A:244 B:253 C:245 AB:0 BC:1 CA:1
Smoothing: 21
Face 489: A:244 B:252 C:253 AB:1 BC:1 CA:0
Smoothing: 21
Face 490: A:245 B:254 C:246 AB:0 BC:1 CA:1
Smoothing: 22
Face 491: A:245 B:253 C:254 AB:1 BC:1 CA:0
Smoothing: 22
Face 492: A:246 B:255 C:247 AB:0 BC:1 CA:1
Smoothing: 23
Face 493: A:246 B:254 C:255 AB:1 BC:1 CA:0
Smoothing: 23
Face 494: A:247 B:248 C:240 AB:0 BC:1 CA:1
Smoothing: 24
Face 495: A:247 B:255 C:248 AB:1 BC:1 CA:0
Smoothing: 24
Face 496: A:248 B:129 C:249 AB:0 BC:1 CA:1
Smoothing: 25
Face 497: A:248 B:128 C:129 AB:1 BC:1 CA:0
Smoothing: 25
Face 498: A:249 B:130 C:250 AB:0 BC:1 CA:1
Smoothing: 26
Face 499: A:249 B:129 C:130 AB:1 BC:1 CA:0
Smoothing: 26
Face 500: A:250 B:131 C:251 AB:0 BC:1 CA:1
Smoothing: 27
Face 501: A:250 B:130 C:131 AB:1 BC:1 CA:0
Smoothing: 27
Face 502: A:251 B:132 C:252 AB:0 BC:1 CA:1
Smoothing: 28
Face 503: A:251 B:131 C:132 AB:1 BC:1 CA:0
Smoothing: 28
Face 504: A:252 B:133 C:253 AB:0 BC:1 CA:1
Smoothing: 29
Face 505: A:252 B:132 C:133 AB:1 BC:1 CA:0
Smoothing: 29
Face 506: A:253 B:134 C:254 AB:0 BC:1 CA:1
 
Page 23
 
 
 
Smoothing: 30
Face 507: A:253 B:133 C:134 AB:1 BC:1 CA:0
Smoothing: 30
Face 508: A:254 B:135 C:255 AB:0 BC:1 CA:1
Smoothing: 31
Face 509: A:254 B:134 C:135 AB:1 BC:1 CA:0
Smoothing: 31
Face 510: A:255 B:128 C:248 AB:0 BC:1 CA:1
Smoothing: 32
Face 511: A:255 B:135 C:128 AB:1 BC:1 CA:0
Smoothing: 32
Face 512: A:256 B:257 C:265 AB:1 BC:1 CA:0
Smoothing: 1
Face 513: A:256 B:265 C:264 AB:0 BC:1 CA:1
Smoothing: 1
Face 514: A:257 B:258 C:266 AB:1 BC:1 CA:0
Smoothing: 2
Face 515: A:257 B:266 C:265 AB:0 BC:1 CA:1
Smoothing: 2
Face 516: A:258 B:259 C:267 AB:1 BC:1 CA:0
Smoothing: 3
Face 517: A:258 B:267 C:266 AB:0 BC:1 CA:1
Smoothing: 3
Face 518: A:259 B:260 C:268 AB:1 BC:1 CA:0
Smoothing: 4
Face 519: A:259 B:268 C:267 AB:0 BC:1 CA:1
Smoothing: 4
Face 520: A:260 B:261 C:269 AB:1 BC:1 CA:0
Smoothing: 5
Face 521: A:260 B:269 C:268 AB:0 BC:1 CA:1
Smoothing: 5
Face 522: A:261 B:262 C:270 AB:1 BC:1 CA:0
Smoothing: 6
Face 523: A:261 B:270 C:269 AB:0 BC:1 CA:1
Smoothing: 6
Face 524: A:262 B:263 C:271 AB:1 BC:1 CA:0
Smoothing: 7
Face 525: A:262 B:271 C:270 AB:0 BC:1 CA:1
Smoothing: 7
Face 526: A:263 B:256 C:264 AB:1 BC:1 CA:0
Smoothing: 8
Face 527: A:263 B:264 C:271 AB:0 BC:1 CA:1
Smoothing: 8
Face 528: A:264 B:265 C:273 AB:1 BC:1 CA:0
Smoothing: 9
Face 529: A:264 B:273 C:272 AB:0 BC:1 CA:1
Smoothing: 9
Face 530: A:265 B:266 C:274 AB:1 BC:1 CA:0
Smoothing: 10
Face 531: A:265 B:274 C:273 AB:0 BC:1 CA:1
Smoothing: 10
Face 532: A:266 B:267 C:275 AB:1 BC:1 CA:0
Smoothing: 11
Face 533: A:266 B:275 C:274 AB:0 BC:1 CA:1
Smoothing: 11
Face 534: A:267 B:268 C:276 AB:1 BC:1 CA:0
Smoothing: 12
Face 535: A:267 B:276 C:275 AB:0 BC:1 CA:1
Smoothing: 12
Face 536: A:268 B:269 C:277 AB:1 BC:1 CA:0
Smoothing: 13
 
Page 24
 
 
 
Face 537: A:268 B:277 C:276 AB:0 BC:1 CA:1
Smoothing: 13
Face 538: A:269 B:270 C:278 AB:1 BC:1 CA:0
Smoothing: 14
Face 539: A:269 B:278 C:277 AB:0 BC:1 CA:1
Smoothing: 14
Face 540: A:270 B:271 C:279 AB:1 BC:1 CA:0
Smoothing: 15
Face 541: A:270 B:279 C:278 AB:0 BC:1 CA:1
Smoothing: 15
Face 542: A:271 B:264 C:272 AB:1 BC:1 CA:0
Smoothing: 16
Face 543: A:271 B:272 C:279 AB:0 BC:1 CA:1
Smoothing: 16
Face 544: A:272 B:273 C:281 AB:1 BC:1 CA:0
Smoothing: 17
Face 545: A:272 B:281 C:280 AB:0 BC:1 CA:1
Smoothing: 17
Face 546: A:273 B:274 C:282 AB:1 BC:1 CA:0
Smoothing: 18
Face 547: A:273 B:282 C:281 AB:0 BC:1 CA:1
Smoothing: 18
Face 548: A:274 B:275 C:283 AB:1 BC:1 CA:0
Smoothing: 19
Face 549: A:274 B:283 C:282 AB:0 BC:1 CA:1
Smoothing: 19
Face 550: A:275 B:276 C:284 AB:1 BC:1 CA:0
Smoothing: 20
Face 551: A:275 B:284 C:283 AB:0 BC:1 CA:1
Smoothing: 20
Face 552: A:276 B:277 C:285 AB:1 BC:1 CA:0
Smoothing: 21
Face 553: A:276 B:285 C:284 AB:0 BC:1 CA:1
Smoothing: 21
Face 554: A:277 B:278 C:286 AB:1 BC:1 CA:0
Smoothing: 22
Face 555: A:277 B:286 C:285 AB:0 BC:1 CA:1
Smoothing: 22
Face 556: A:278 B:279 C:287 AB:1 BC:1 CA:0
Smoothing: 23
Face 557: A:278 B:287 C:286 AB:0 BC:1 CA:1
Smoothing: 23
Face 558: A:279 B:272 C:280 AB:1 BC:1 CA:0
Smoothing: 24
Face 559: A:279 B:280 C:287 AB:0 BC:1 CA:1
Smoothing: 24
Face 560: A:280 B:281 C:289 AB:1 BC:1 CA:0
Smoothing: 25
Face 561: A:280 B:289 C:288 AB:0 BC:1 CA:1
Smoothing: 25
Face 562: A:281 B:282 C:290 AB:1 BC:1 CA:0
Smoothing: 26
Face 563: A:281 B:290 C:289 AB:0 BC:1 CA:1
Smoothing: 26
Face 564: A:282 B:283 C:291 AB:1 BC:1 CA:0
Smoothing: 27
Face 565: A:282 B:291 C:290 AB:0 BC:1 CA:1
Smoothing: 27
Face 566: A:283 B:284 C:292 AB:1 BC:1 CA:0
Smoothing: 28
Face 567: A:283 B:292 C:291 AB:0 BC:1 CA:1
 
Page 25
 
 
 
Smoothing: 28
Face 568: A:284 B:285 C:293 AB:1 BC:1 CA:0
Smoothing: 29
Face 569: A:284 B:293 C:292 AB:0 BC:1 CA:1
Smoothing: 29
Face 570: A:285 B:286 C:294 AB:1 BC:1 CA:0
Smoothing: 30
Face 571: A:285 B:294 C:293 AB:0 BC:1 CA:1
Smoothing: 30
Face 572: A:286 B:287 C:295 AB:1 BC:1 CA:0
Smoothing: 31
Face 573: A:286 B:295 C:294 AB:0 BC:1 CA:1
Smoothing: 31
Face 574: A:287 B:280 C:288 AB:1 BC:1 CA:0
Smoothing: 32
Face 575: A:287 B:288 C:295 AB:0 BC:1 CA:1
Smoothing: 32
Face 576: A:288 B:289 C:297 AB:1 BC:1 CA:0
Smoothing: 1
Face 577: A:288 B:297 C:296 AB:0 BC:1 CA:1
Smoothing: 1
Face 578: A:289 B:290 C:298 AB:1 BC:1 CA:0
Smoothing: 2
Face 579: A:289 B:298 C:297 AB:0 BC:1 CA:1
Smoothing: 2
Face 580: A:290 B:291 C:299 AB:1 BC:1 CA:0
Smoothing: 3
Face 581: A:290 B:299 C:298 AB:0 BC:1 CA:1
Smoothing: 3
Face 582: A:291 B:292 C:300 AB:1 BC:1 CA:0
Smoothing: 4
Face 583: A:291 B:300 C:299 AB:0 BC:1 CA:1
Smoothing: 4
Face 584: A:292 B:293 C:301 AB:1 BC:1 CA:0
Smoothing: 5
Face 585: A:292 B:301 C:300 AB:0 BC:1 CA:1
Smoothing: 5
Face 586: A:293 B:294 C:302 AB:1 BC:1 CA:0
Smoothing: 6
Face 587: A:293 B:302 C:301 AB:0 BC:1 CA:1
Smoothing: 6
Face 588: A:294 B:295 C:303 AB:1 BC:1 CA:0
Smoothing: 7
Face 589: A:294 B:303 C:302 AB:0 BC:1 CA:1
Smoothing: 7
Face 590: A:295 B:288 C:296 AB:1 BC:1 CA:0
Smoothing: 8
Face 591: A:295 B:296 C:303 AB:0 BC:1 CA:1
Smoothing: 8
Face 592: A:296 B:297 C:305 AB:1 BC:1 CA:0
Smoothing: 9
Face 593: A:296 B:305 C:304 AB:0 BC:1 CA:1
Smoothing: 9
Face 594: A:297 B:298 C:306 AB:1 BC:1 CA:0
Smoothing: 10
Face 595: A:297 B:306 C:305 AB:0 BC:1 CA:1
Smoothing: 10
Face 596: A:298 B:299 C:307 AB:1 BC:1 CA:0
Smoothing: 11
Face 597: A:298 B:307 C:306 AB:0 BC:1 CA:1
Smoothing: 11
 
Page 26
 
 
 
Face 598: A:299 B:300 C:308 AB:1 BC:1 CA:0
Smoothing: 12
Face 599: A:299 B:308 C:307 AB:0 BC:1 CA:1
Smoothing: 12
Face 600: A:300 B:301 C:309 AB:1 BC:1 CA:0
Smoothing: 13
Face 601: A:300 B:309 C:308 AB:0 BC:1 CA:1
Smoothing: 13
Face 602: A:301 B:302 C:310 AB:1 BC:1 CA:0
Smoothing: 14
Face 603: A:301 B:310 C:309 AB:0 BC:1 CA:1
Smoothing: 14
Face 604: A:302 B:303 C:311 AB:1 BC:1 CA:0
Smoothing: 15
Face 605: A:302 B:311 C:310 AB:0 BC:1 CA:1
Smoothing: 15
Face 606: A:303 B:296 C:304 AB:1 BC:1 CA:0
Smoothing: 16
Face 607: A:303 B:304 C:311 AB:0 BC:1 CA:1
Smoothing: 16
Face 608: A:304 B:305 C:313 AB:1 BC:1 CA:0
Smoothing: 17
Face 609: A:304 B:313 C:312 AB:0 BC:1 CA:1
Smoothing: 17
Face 610: A:305 B:306 C:314 AB:1 BC:1 CA:0
Smoothing: 18
Face 611: A:305 B:314 C:313 AB:0 BC:1 CA:1
Smoothing: 18
Face 612: A:306 B:307 C:315 AB:1 BC:1 CA:0
Smoothing: 19
Face 613: A:306 B:315 C:314 AB:0 BC:1 CA:1
Smoothing: 19
Face 614: A:307 B:308 C:316 AB:1 BC:1 CA:0
Smoothing: 20
Face 615: A:307 B:316 C:315 AB:0 BC:1 CA:1
Smoothing: 20
Face 616: A:308 B:309 C:317 AB:1 BC:1 CA:0
Smoothing: 21
Face 617: A:308 B:317 C:316 AB:0 BC:1 CA:1
Smoothing: 21
Face 618: A:309 B:310 C:318 AB:1 BC:1 CA:0
Smoothing: 22
Face 619: A:309 B:318 C:317 AB:0 BC:1 CA:1
Smoothing: 22
Face 620: A:310 B:311 C:319 AB:1 BC:1 CA:0
Smoothing: 23
Face 621: A:310 B:319 C:318 AB:0 BC:1 CA:1
Smoothing: 23
Face 622: A:311 B:304 C:312 AB:1 BC:1 CA:0
Smoothing: 24
Face 623: A:311 B:312 C:319 AB:0 BC:1 CA:1
Smoothing: 24
Face 624: A:312 B:313 C:321 AB:1 BC:1 CA:0
Smoothing: 25
Face 625: A:312 B:321 C:320 AB:0 BC:1 CA:1
Smoothing: 25
Face 626: A:313 B:314 C:322 AB:1 BC:1 CA:0
Smoothing: 26
Face 627: A:313 B:322 C:321 AB:0 BC:1 CA:1
Smoothing: 26
Face 628: A:314 B:315 C:323 AB:1 BC:1 CA:0
 
Page 27
 
 
 
Smoothing: 27
Face 629: A:314 B:323 C:322 AB:0 BC:1 CA:1
Smoothing: 27
Face 630: A:315 B:316 C:324 AB:1 BC:1 CA:0
Smoothing: 28
Face 631: A:315 B:324 C:323 AB:0 BC:1 CA:1
Smoothing: 28
Face 632: A:316 B:317 C:325 AB:1 BC:1 CA:0
Smoothing: 29
Face 633: A:316 B:325 C:324 AB:0 BC:1 CA:1
Smoothing: 29
Face 634: A:317 B:318 C:326 AB:1 BC:1 CA:0
Smoothing: 30
Face 635: A:317 B:326 C:325 AB:0 BC:1 CA:1
Smoothing: 30
Face 636: A:318 B:319 C:327 AB:1 BC:1 CA:0
Smoothing: 31
Face 637: A:318 B:327 C:326 AB:0 BC:1 CA:1
Smoothing: 31
Face 638: A:319 B:312 C:320 AB:1 BC:1 CA:0
Smoothing: 32
Face 639: A:319 B:320 C:327 AB:0 BC:1 CA:1
Smoothing: 32
Face 640: A:320 B:321 C:329 AB:1 BC:1 CA:0
Smoothing: 1
Face 641: A:320 B:329 C:328 AB:0 BC:1 CA:1
Smoothing: 1
Face 642: A:321 B:322 C:330 AB:1 BC:1 CA:0
Smoothing: 2
Face 643: A:321 B:330 C:329 AB:0 BC:1 CA:1
Smoothing: 2
Face 644: A:322 B:323 C:331 AB:1 BC:1 CA:0
Smoothing: 3
Face 645: A:322 B:331 C:330 AB:0 BC:1 CA:1
Smoothing: 3
Face 646: A:323 B:324 C:332 AB:1 BC:1 CA:0
Smoothing: 4
Face 647: A:323 B:332 C:331 AB:0 BC:1 CA:1
Smoothing: 4
Face 648: A:324 B:325 C:333 AB:1 BC:1 CA:0
Smoothing: 5
Face 649: A:324 B:333 C:332 AB:0 BC:1 CA:1
Smoothing: 5
Face 650: A:325 B:326 C:334 AB:1 BC:1 CA:0
Smoothing: 6
Face 651: A:325 B:334 C:333 AB:0 BC:1 CA:1
Smoothing: 6
Face 652: A:326 B:327 C:335 AB:1 BC:1 CA:0
Smoothing: 7
Face 653: A:326 B:335 C:334 AB:0 BC:1 CA:1
Smoothing: 7
Face 654: A:327 B:320 C:328 AB:1 BC:1 CA:0
Smoothing: 8
Face 655: A:327 B:328 C:335 AB:0 BC:1 CA:1
Smoothing: 8
Face 656: A:328 B:329 C:337 AB:1 BC:1 CA:0
Smoothing: 9
Face 657: A:328 B:337 C:336 AB:0 BC:1 CA:1
Smoothing: 9
Face 658: A:329 B:330 C:338 AB:1 BC:1 CA:0
Smoothing: 10
 
Page 28
 
 
 
Face 659: A:329 B:338 C:337 AB:0 BC:1 CA:1
Smoothing: 10
Face 660: A:330 B:331 C:339 AB:1 BC:1 CA:0
Smoothing: 11
Face 661: A:330 B:339 C:338 AB:0 BC:1 CA:1
Smoothing: 11
Face 662: A:331 B:332 C:340 AB:1 BC:1 CA:0
Smoothing: 12
Face 663: A:331 B:340 C:339 AB:0 BC:1 CA:1
Smoothing: 12
Face 664: A:332 B:333 C:341 AB:1 BC:1 CA:0
Smoothing: 13
Face 665: A:332 B:341 C:340 AB:0 BC:1 CA:1
Smoothing: 13
Face 666: A:333 B:334 C:342 AB:1 BC:1 CA:0
Smoothing: 14
Face 667: A:333 B:342 C:341 AB:0 BC:1 CA:1
Smoothing: 14
Face 668: A:334 B:335 C:343 AB:1 BC:1 CA:0
Smoothing: 15
Face 669: A:334 B:343 C:342 AB:0 BC:1 CA:1
Smoothing: 15
Face 670: A:335 B:328 C:336 AB:1 BC:1 CA:0
Smoothing: 16
Face 671: A:335 B:336 C:343 AB:0 BC:1 CA:1
Smoothing: 16
Face 672: A:336 B:337 C:345 AB:1 BC:1 CA:0
Smoothing: 17
Face 673: A:336 B:345 C:344 AB:0 BC:1 CA:1
Smoothing: 17
Face 674: A:337 B:338 C:346 AB:1 BC:1 CA:0
Smoothing: 18
Face 675: A:337 B:346 C:345 AB:0 BC:1 CA:1
Smoothing: 18
Face 676: A:338 B:339 C:347 AB:1 BC:1 CA:0
Smoothing: 19
Face 677: A:338 B:347 C:346 AB:0 BC:1 CA:1
Smoothing: 19
Face 678: A:339 B:340 C:348 AB:1 BC:1 CA:0
Smoothing: 20
Face 679: A:339 B:348 C:347 AB:0 BC:1 CA:1
Smoothing: 20
Face 680: A:340 B:341 C:349 AB:1 BC:1 CA:0
Smoothing: 21
Face 681: A:340 B:349 C:348 AB:0 BC:1 CA:1
Smoothing: 21
Face 682: A:341 B:342 C:350 AB:1 BC:1 CA:0
Smoothing: 22
Face 683: A:341 B:350 C:349 AB:0 BC:1 CA:1
Smoothing: 22
Face 684: A:342 B:343 C:351 AB:1 BC:1 CA:0
Smoothing: 23
Face 685: A:342 B:351 C:350 AB:0 BC:1 CA:1
Smoothing: 23
Face 686: A:343 B:336 C:344 AB:1 BC:1 CA:0
Smoothing: 24
Face 687: A:343 B:344 C:351 AB:0 BC:1 CA:1
Smoothing: 24
Face 688: A:344 B:345 C:353 AB:1 BC:1 CA:0
Smoothing: 25
Face 689: A:344 B:353 C:352 AB:0 BC:1 CA:1
 
Page 29
 
 
 
Smoothing: 25
Face 690: A:345 B:346 C:354 AB:1 BC:1 CA:0
Smoothing: 26
Face 691: A:345 B:354 C:353 AB:0 BC:1 CA:1
Smoothing: 26
Face 692: A:346 B:347 C:355 AB:1 BC:1 CA:0
Smoothing: 27
Face 693: A:346 B:355 C:354 AB:0 BC:1 CA:1
Smoothing: 27
Face 694: A:347 B:348 C:356 AB:1 BC:1 CA:0
Smoothing: 28
Face 695: A:347 B:356 C:355 AB:0 BC:1 CA:1
Smoothing: 28
Face 696: A:348 B:349 C:357 AB:1 BC:1 CA:0
Smoothing: 29
Face 697: A:348 B:357 C:356 AB:0 BC:1 CA:1
Smoothing: 29
Face 698: A:349 B:350 C:358 AB:1 BC:1 CA:0
Smoothing: 30
Face 699: A:349 B:358 C:357 AB:0 BC:1 CA:1
Smoothing: 30
Face 700: A:350 B:351 C:359 AB:1 BC:1 CA:0
Smoothing: 31
Face 701: A:350 B:359 C:358 AB:0 BC:1 CA:1
Smoothing: 31
Face 702: A:351 B:344 C:352 AB:1 BC:1 CA:0
Smoothing: 32
Face 703: A:351 B:352 C:359 AB:0 BC:1 CA:1
Smoothing: 32
Face 704: A:352 B:353 C:361 AB:1 BC:1 CA:0
Smoothing: 1
Face 705: A:352 B:361 C:360 AB:0 BC:1 CA:1
Smoothing: 1
Face 706: A:353 B:354 C:362 AB:1 BC:1 CA:0
Smoothing: 2
Face 707: A:353 B:362 C:361 AB:0 BC:1 CA:1
Smoothing: 2
Face 708: A:354 B:355 C:363 AB:1 BC:1 CA:0
Smoothing: 3
Face 709: A:354 B:363 C:362 AB:0 BC:1 CA:1
Smoothing: 3
Face 710: A:355 B:356 C:364 AB:1 BC:1 CA:0
Smoothing: 4
Face 711: A:355 B:364 C:363 AB:0 BC:1 CA:1
Smoothing: 4
Face 712: A:356 B:357 C:365 AB:1 BC:1 CA:0
Smoothing: 5
Face 713: A:356 B:365 C:364 AB:0 BC:1 CA:1
Smoothing: 5
Face 714: A:357 B:358 C:366 AB:1 BC:1 CA:0
Smoothing: 6
Face 715: A:357 B:366 C:365 AB:0 BC:1 CA:1
Smoothing: 6
Face 716: A:358 B:359 C:367 AB:1 BC:1 CA:0
Smoothing: 7
Face 717: A:358 B:367 C:366 AB:0 BC:1 CA:1
Smoothing: 7
Face 718: A:359 B:352 C:360 AB:1 BC:1 CA:0
Smoothing: 8
Face 719: A:359 B:360 C:367 AB:0 BC:1 CA:1
Smoothing: 8
 
Page 30
 
 
 
Face 720: A:360 B:361 C:369 AB:1 BC:1 CA:0
Smoothing: 9
Face 721: A:360 B:369 C:368 AB:0 BC:1 CA:1
Smoothing: 9
Face 722: A:361 B:362 C:370 AB:1 BC:1 CA:0
Smoothing: 10
Face 723: A:361 B:370 C:369 AB:0 BC:1 CA:1
Smoothing: 10
Face 724: A:362 B:363 C:371 AB:1 BC:1 CA:0
Smoothing: 11
Face 725: A:362 B:371 C:370 AB:0 BC:1 CA:1
Smoothing: 11
Face 726: A:363 B:364 C:372 AB:1 BC:1 CA:0
Smoothing: 12
Face 727: A:363 B:372 C:371 AB:0 BC:1 CA:1
Smoothing: 12
Face 728: A:364 B:365 C:373 AB:1 BC:1 CA:0
Smoothing: 13
Face 729: A:364 B:373 C:372 AB:0 BC:1 CA:1
Smoothing: 13
Face 730: A:365 B:366 C:374 AB:1 BC:1 CA:0
Smoothing: 14
Face 731: A:365 B:374 C:373 AB:0 BC:1 CA:1
Smoothing: 14
Face 732: A:366 B:367 C:375 AB:1 BC:1 CA:0
Smoothing: 15
Face 733: A:366 B:375 C:374 AB:0 BC:1 CA:1
Smoothing: 15
Face 734: A:367 B:360 C:368 AB:1 BC:1 CA:0
Smoothing: 16
Face 735: A:367 B:368 C:375 AB:0 BC:1 CA:1
Smoothing: 16
Face 736: A:368 B:369 C:377 AB:1 BC:1 CA:0
Smoothing: 17
Face 737: A:368 B:377 C:376 AB:0 BC:1 CA:1
Smoothing: 17
Face 738: A:369 B:370 C:378 AB:1 BC:1 CA:0
Smoothing: 18
Face 739: A:369 B:378 C:377 AB:0 BC:1 CA:1
Smoothing: 18
Face 740: A:370 B:371 C:379 AB:1 BC:1 CA:0
Smoothing: 19
Face 741: A:370 B:379 C:378 AB:0 BC:1 CA:1
Smoothing: 19
Face 742: A:371 B:372 C:380 AB:1 BC:1 CA:0
Smoothing: 20
Face 743: A:371 B:380 C:379 AB:0 BC:1 CA:1
Smoothing: 20
Face 744: A:372 B:373 C:381 AB:1 BC:1 CA:0
Smoothing: 21
Face 745: A:372 B:381 C:380 AB:0 BC:1 CA:1
Smoothing: 21
Face 746: A:373 B:374 C:382 AB:1 BC:1 CA:0
Smoothing: 22
Face 747: A:373 B:382 C:381 AB:0 BC:1 CA:1
Smoothing: 22
Face 748: A:374 B:375 C:383 AB:1 BC:1 CA:0
Smoothing: 23
Face 749: A:374 B:383 C:382 AB:0 BC:1 CA:1
Smoothing: 23
Face 750: A:375 B:368 C:376 AB:1 BC:1 CA:0
 
Page 31
 
 
 
Smoothing: 24
Face 751: A:375 B:376 C:383 AB:0 BC:1 CA:1
Smoothing: 24
Face 752: A:376 B:377 C:257 AB:1 BC:1 CA:0
Smoothing: 25
Face 753: A:376 B:257 C:256 AB:0 BC:1 CA:1
Smoothing: 25
Face 754: A:377 B:378 C:258 AB:1 BC:1 CA:0
Smoothing: 26
Face 755: A:377 B:258 C:257 AB:0 BC:1 CA:1
Smoothing: 26
Face 756: A:378 B:379 C:259 AB:1 BC:1 CA:0
Smoothing: 27
Face 757: A:378 B:259 C:258 AB:0 BC:1 CA:1
Smoothing: 27
Face 758: A:379 B:380 C:260 AB:1 BC:1 CA:0
Smoothing: 28
Face 759: A:379 B:260 C:259 AB:0 BC:1 CA:1
Smoothing: 28
Face 760: A:380 B:381 C:261 AB:1 BC:1 CA:0
Smoothing: 29
Face 761: A:380 B:261 C:260 AB:0 BC:1 CA:1
Smoothing: 29
Face 762: A:381 B:382 C:262 AB:1 BC:1 CA:0
Smoothing: 30
Face 763: A:381 B:262 C:261 AB:0 BC:1 CA:1
Smoothing: 30
Face 764: A:382 B:383 C:263 AB:1 BC:1 CA:0
Smoothing: 31
Face 765: A:382 B:263 C:262 AB:0 BC:1 CA:1
Smoothing: 31
Face 766: A:383 B:376 C:256 AB:1 BC:1 CA:0
Smoothing: 32
Face 767: A:383 B:256 C:263 AB:0 BC:1 CA:1
Smoothing: 32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Page 32
 
 
 
/programs/demos/view3ds/asc_objects/AR2.ASC
0,0 → 1,594
Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
 
Named object: "Object"
Tri-mesh, Vertices: 72 Faces: 140
Vertex list:
Vertex 0: X: 20.130791 Y: -174.628616 Z: -26.846941
Vertex 1: X: -17.812012 Y: -194.765305 Z: -26.846941
Vertex 2: X: -22.554863 Y: -197.282394 Z: -21.477539
Vertex 3: X: -22.554855 Y: -197.282379 Z: 21.47757
Vertex 4: X: -17.812008 Y: -194.765289 Z: 26.846968
Vertex 5: X: 20.130791 Y: -174.628601 Z: 26.846968
Vertex 6: X: 24.873642 Y: -172.111542 Z: 21.477566
Vertex 7: X: 24.873634 Y: -172.111526 Z: -21.477543
Vertex 8: X: -47.800331 Y: -58.31171 Z: -26.846952
Vertex 9: X: -89.500107 Y: -48.002941 Z: -26.846952
Vertex 10: X: -94.712585 Y: -46.71434 Z: -21.477552
Vertex 11: X: -94.712585 Y: -46.714348 Z: 21.477556
Vertex 12: X: -89.500114 Y: -48.002941 Z: 26.846956
Vertex 13: X: -47.800335 Y: -58.31171 Z: 26.846956
Vertex 14: X: -42.587864 Y: -59.600311 Z: 21.477556
Vertex 15: X: -42.58786 Y: -59.600304 Z: -21.477552
Vertex 16: X: -11.645042 Y: -39.661633 Z: -26.846954
Vertex 17: X: -43.064949 Y: -10.371157 Z: -26.846956
Vertex 18: X: -46.992439 Y: -6.70985 Z: -21.477556
Vertex 19: X: -46.992439 Y: -6.709852 Z: 21.477552
Vertex 20: X: -43.064957 Y: -10.371161 Z: 26.846952
Vertex 21: X: -11.64505 Y: -39.661633 Z: 26.846954
Vertex 22: X: -7.71756 Y: -43.322945 Z: 21.477556
Vertex 23: X: -7.71756 Y: -43.322937 Z: -21.477552
Vertex 24: X: 18.267815 Y: 13.389006 Z: -26.846958
Vertex 25: X: -24.121857 Y: 20.335791 Z: -26.846958
Vertex 26: X: -29.420563 Y: 21.204142 Z: -21.477558
Vertex 27: X: -29.420563 Y: 21.204138 Z: 21.477551
Vertex 28: X: -24.121857 Y: 20.335787 Z: 26.846951
Vertex 29: X: 18.267815 Y: 13.389002 Z: 26.846951
Vertex 30: X: 23.566521 Y: 12.520655 Z: 21.477551
Vertex 31: X: 23.566521 Y: 12.520658 Z: -21.477558
Vertex 32: X: 5.648056 Y: 76.711929 Z: -26.846964
Vertex 33: X: -31.843674 Y: 55.747364 Z: -26.846962
Vertex 34: X: -36.530136 Y: 53.126801 Z: -21.477562
Vertex 35: X: -36.530132 Y: 53.126793 Z: 21.477547
Vertex 36: X: -31.843666 Y: 55.747364 Z: 26.846947
Vertex 37: X: 5.648064 Y: 76.711922 Z: 26.846945
Vertex 38: X: 10.334526 Y: 79.332489 Z: 21.477545
Vertex 39: X: 10.334526 Y: 79.332497 Z: -21.477564
Vertex 40: X: -40.5429 Y: 120.083321 Z: -26.846968
Vertex 41: X: -59.010536 Y: 81.300743 Z: -26.846964
Vertex 42: X: -61.318993 Y: 76.452927 Z: -21.477564
Vertex 43: X: -61.318985 Y: 76.452919 Z: 21.477545
Vertex 44: X: -59.010529 Y: 81.300743 Z: 26.846945
Vertex 45: X: -40.542892 Y: 120.083321 Z: 26.846941
Vertex 46: X: -38.234436 Y: 124.931145 Z: 21.477541
Vertex 47: X: -38.234444 Y: 124.931145 Z: -21.477568
Vertex 48: X: -93.261726 Y: 127.39135 Z: -26.846968
Vertex 49: X: -86.911591 Y: 84.908218 Z: -26.846964
Vertex 50: X: -86.117828 Y: 79.597824 Z: -21.477564
Vertex 51: X: -86.117821 Y: 79.597824 Z: 21.477545
Vertex 52: X: -86.911583 Y: 84.908218 Z: 26.846945
Vertex 53: X: -93.261719 Y: 127.39135 Z: 26.846941
Vertex 54: X: -94.055481 Y: 132.701752 Z: 21.477539
Vertex 55: X: -94.055489 Y: 132.701736 Z: -21.47757
 
Page 1
 
 
 
Vertex 56: X: -161.929184 Y: 93.003784 Z: -26.846966
Vertex 57: X: -125.776421 Y: 69.806366 Z: -26.846964
Vertex 58: X: -121.257324 Y: 66.906685 Z: -21.477564
Vertex 59: X: -121.257324 Y: 66.906693 Z: 21.477545
Vertex 60: X: -125.776413 Y: 69.806366 Z: 26.846945
Vertex 61: X: -161.929184 Y: 93.003784 Z: 26.846943
Vertex 62: X: -166.448273 Y: 95.903465 Z: 21.477543
Vertex 63: X: -166.448273 Y: 95.903465 Z: -21.477566
Vertex 64: X: -165.741531 Y: -193.219131 Z: -26.846941
Vertex 65: X: -122.786453 Y: -193.283432 Z: -26.846941
Vertex 66: X: -117.417076 Y: -193.291489 Z: -21.477541
Vertex 67: X: -117.417076 Y: -193.291443 Z: 21.477568
Vertex 68: X: -122.786453 Y: -193.283417 Z: 26.846968
Vertex 69: X: -165.741531 Y: -193.219116 Z: 26.846968
Vertex 70: X: -171.110901 Y: -193.21109 Z: 21.477568
Vertex 71: X: -171.110901 Y: -193.211105 Z: -21.477541
Face list:
Face 0: A:6 B:5 C:4 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 17
Face 1: A:7 B:6 C:4 AB:1 BC:0 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 17
Face 2: A:7 B:4 C:3 AB:0 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 17
Face 3: A:7 B:3 C:2 AB:0 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 17
Face 4: A:7 B:2 C:1 AB:0 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 17
Face 5: A:7 B:1 C:0 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 17
Face 6: A:0 B:1 C:9 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 7: A:0 B:9 C:8 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 8: A:1 B:2 C:10 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 9: A:1 B:10 C:9 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 10: A:2 B:3 C:11 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 11: A:2 B:11 C:10 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 12: A:3 B:4 C:12 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 13: A:3 B:12 C:11 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 14: A:4 B:5 C:13 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
 
Page 2
 
 
 
Smoothing: 1, 10
Face 15: A:4 B:13 C:12 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 16: A:5 B:6 C:14 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 17: A:5 B:14 C:13 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 18: A:6 B:7 C:15 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 19: A:6 B:15 C:14 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 20: A:7 B:0 C:8 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 3, 12
Face 21: A:7 B:8 C:15 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 3, 12
Face 22: A:8 B:9 C:17 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 23: A:8 B:17 C:16 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 24: A:9 B:10 C:18 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 25: A:9 B:18 C:17 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 26: A:10 B:11 C:19 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 27: A:10 B:19 C:18 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 28: A:11 B:12 C:20 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 29: A:11 B:20 C:19 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 30: A:12 B:13 C:21 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 31: A:12 B:21 C:20 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 32: A:13 B:14 C:22 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 33: A:13 B:22 C:21 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 34: A:14 B:15 C:23 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
 
Page 3
 
 
 
Face 35: A:14 B:23 C:22 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 36: A:15 B:8 C:16 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 6, 12
Face 37: A:15 B:16 C:23 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 6, 12
Face 38: A:16 B:17 C:25 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 39: A:16 B:25 C:24 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 40: A:17 B:18 C:26 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 41: A:17 B:26 C:25 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 42: A:18 B:19 C:27 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 43: A:18 B:27 C:26 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 44: A:19 B:20 C:28 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 45: A:19 B:28 C:27 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 46: A:20 B:21 C:29 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 47: A:20 B:29 C:28 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 48: A:21 B:22 C:30 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 49: A:21 B:30 C:29 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 50: A:22 B:23 C:31 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 51: A:22 B:31 C:30 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 52: A:23 B:16 C:24 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 3, 12
Face 53: A:23 B:24 C:31 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 3, 12
Face 54: A:24 B:25 C:33 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 55: A:24 B:33 C:32 AB:0 BC:1 CA:1
 
Page 4
 
 
 
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 56: A:25 B:26 C:34 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 57: A:25 B:34 C:33 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 58: A:26 B:27 C:35 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 59: A:26 B:35 C:34 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 60: A:27 B:28 C:36 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 61: A:27 B:36 C:35 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 62: A:28 B:29 C:37 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 63: A:28 B:37 C:36 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 64: A:29 B:30 C:38 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 65: A:29 B:38 C:37 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 66: A:30 B:31 C:39 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 67: A:30 B:39 C:38 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 68: A:31 B:24 C:32 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 6, 12
Face 69: A:31 B:32 C:39 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 6, 12
Face 70: A:32 B:33 C:41 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 71: A:32 B:41 C:40 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 72: A:33 B:34 C:42 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 73: A:33 B:42 C:41 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 74: A:34 B:35 C:43 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 75: A:34 B:43 C:42 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
 
Page 5
 
 
 
Smoothing: 1, 10
Face 76: A:35 B:36 C:44 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 77: A:35 B:44 C:43 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 78: A:36 B:37 C:45 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 79: A:36 B:45 C:44 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 80: A:37 B:38 C:46 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 81: A:37 B:46 C:45 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 82: A:38 B:39 C:47 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 83: A:38 B:47 C:46 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 84: A:39 B:32 C:40 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 3, 12
Face 85: A:39 B:40 C:47 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 3, 12
Face 86: A:40 B:41 C:49 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 87: A:40 B:49 C:48 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 88: A:41 B:42 C:50 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 89: A:41 B:50 C:49 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 90: A:42 B:43 C:51 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 91: A:42 B:51 C:50 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 92: A:43 B:44 C:52 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 93: A:43 B:52 C:51 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 94: A:44 B:45 C:53 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 95: A:44 B:53 C:52 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
 
Page 6
 
 
 
Face 96: A:45 B:46 C:54 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 97: A:45 B:54 C:53 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 98: A:46 B:47 C:55 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 99: A:46 B:55 C:54 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 100: A:47 B:40 C:48 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 6, 12
Face 101: A:47 B:48 C:55 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 6, 12
Face 102: A:48 B:49 C:57 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 103: A:48 B:57 C:56 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 104: A:49 B:50 C:58 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 105: A:49 B:58 C:57 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 106: A:50 B:51 C:59 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 107: A:50 B:59 C:58 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 108: A:51 B:52 C:60 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 109: A:51 B:60 C:59 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 110: A:52 B:53 C:61 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 111: A:52 B:61 C:60 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 112: A:53 B:54 C:62 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 113: A:53 B:62 C:61 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 2, 11
Face 114: A:54 B:55 C:63 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 115: A:54 B:63 C:62 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 1, 10
Face 116: A:55 B:48 C:56 AB:1 BC:1 CA:0
 
Page 7
 
 
 
Material:"YELLOW PLASTIC"
Smoothing: 3, 12
Face 117: A:55 B:56 C:63 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 3, 12
Face 118: A:56 B:57 C:65 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 119: A:56 B:65 C:64 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 120: A:57 B:58 C:66 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 121: A:57 B:66 C:65 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 122: A:58 B:59 C:67 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 123: A:58 B:67 C:66 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 124: A:59 B:60 C:68 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 125: A:59 B:68 C:67 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 126: A:60 B:61 C:69 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 127: A:60 B:69 C:68 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 128: A:61 B:62 C:70 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 129: A:61 B:70 C:69 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 5, 11
Face 130: A:62 B:63 C:71 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 131: A:62 B:71 C:70 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 4, 10
Face 132: A:63 B:56 C:64 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 6, 12
Face 133: A:63 B:64 C:71 AB:0 BC:1 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 6, 12
Face 134: A:68 B:69 C:70 AB:1 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 17
Face 135: A:68 B:70 C:71 AB:0 BC:1 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 17
Face 136: A:67 B:68 C:71 AB:1 BC:0 CA:0
Material:"YELLOW PLASTIC"
 
Page 8
 
 
 
Smoothing: 17
Face 137: A:66 B:67 C:71 AB:1 BC:0 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 17
Face 138: A:65 B:66 C:71 AB:1 BC:0 CA:0
Material:"YELLOW PLASTIC"
Smoothing: 17
Face 139: A:64 B:65 C:71 AB:1 BC:0 CA:1
Material:"YELLOW PLASTIC"
Smoothing: 17
 
Named object: "Light01"
Direct light
Position: X:-85.351791 Y:9.227221 Z:73.817757
Light color: Red=0.705882 Green=0.705882 Blue=0.705882
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Page 9
 
 
 
/programs/demos/view3ds/asc_objects/ARCEE.ASC
0,0 → 1,660
Ambient light color: Red=0.686275 Green=0.686275 Blue=0.686275
 
Named object: "Object"
Tri-mesh, Vertices: 86 Faces: 168
Mapped
Vertex list:
Vertex 0: X:-50.249485 Y:0.000003 Z:-14.896361 U:0.257762 V:0.426883
Vertex 1: X:-61.036736 Y:0.000003 Z:-14.896361 U:0.202294 V:0.426883
Vertex 2: X:-61.036736 Y:0.000001 Z:-70.569664 U:0.202294 V:0.15362
Vertex 3: X:-57.213406 Y:0.000003 Z:-100.362404 U:0.221953 V:0.007387
Vertex 4: X:-99.406586 Y:0.000006 Z:-100.362404 U:0.004993 V:0.007387
Vertex 5: X:-95.58326 Y:0.000001 Z:-70.569664 U:0.024653 V:0.15362
Vertex 6: X:-95.58326 Y:0.000006 Z:70.569695 U:0.024653 V:0.846381
Vertex 7: X:-99.406586 Y:0.000005 Z:100.362434 U:0.004993 V:0.992614
Vertex 8: X:-24.442005 Y:0.000001 Z:100.362434 U:0.390466 V:0.992614
Vertex 9: X:-6.008092 Y:0 Z:90.431519 U:0.485255 V:0.943869
Vertex 10: X:-0.273097 Y:0.000001 Z:58.532211 U:0.514745 V:0.787296
Vertex 11: X:-0.273097 Y:-0.000002 Z:15.498254 U:0.514745 V:0.576071
Vertex 12: X:-1.911667 Y:-0 Z:-4.363575 U:0.506319 V:0.478582
Vertex 13: X:-13.654753 Y:0.000002 Z:-15.197298 U:0.445935 V:0.425406
Vertex 14: X:0.819283 Y:0 Z:-82.607132 U:0.520362 V:0.094536
Vertex 15: X:5.734993 Y:-0.000001 Z:-100.362404 U:0.545639 V:0.007387
Vertex 16: X:-34.273426 Y:0.000003 Z:-100.362404 U:0.339913 V:0.007387
Vertex 17: X:-61.036736 Y:0.000005 Z:18.206682 U:0.202294 V:0.589365
Vertex 18: X:-41.646992 Y:0.000005 Z:18.206682 U:0.301997 V:0.589365
Vertex 19: X:-36.32164 Y:0.000006 Z:20.614178 U:0.32938 V:0.601182
Vertex 20: X:-34.54652 Y:0.000003 Z:35.661018 U:0.338508 V:0.675037
Vertex 21: X:-34.54652 Y:0 Z:45.59193 U:0.338508 V:0.723781
Vertex 22: X:-36.048542 Y:0.000002 Z:63.949074 U:0.330785 V:0.813884
Vertex 23: X:-42.602825 Y:0.000002 Z:67.259384 U:0.297082 V:0.830132
Vertex 24: X:-61.036736 Y:0.000002 Z:67.259384 U:0.202294 V:0.830132
Vertex 25: X:88.755875 Y:-0.000003 Z:100.362434 U:0.972539 V:0.992614
Vertex 26: X:92.03302 Y:-0.000006 Z:58.833149 U:0.98939 V:0.788773
Vertex 27: X:74.964577 Y:-0.000002 Z:67.259384 U:0.901623 V:0.830132
Vertex 28: X:55.984474 Y:-0.000002 Z:67.259384 U:0.804026 V:0.830132
Vertex 29: X:47.518528 Y:-0.000002 Z:63.046265 U:0.760493 V:0.809453
Vertex 30: X:45.743412 Y:-0 Z:41.679752 U:0.751365 V:0.704579
Vertex 31: X:45.743412 Y:-0.000004 Z:-43.184422 U:0.751365 V:0.288036
Vertex 32: X:48.747456 Y:-0.000002 Z:-63.046249 U:0.766812 V:0.190547
Vertex 33: X:57.759594 Y:-0.000002 Z:-67.259354 U:0.813154 V:0.169868
Vertex 34: X:75.783867 Y:-0.000002 Z:-67.259354 U:0.905836 V:0.169868
Vertex 35: X:93.125397 Y:-0.000009 Z:-60.939693 U:0.995007 V:0.200887
Vertex 36: X:90.394447 Y:-0.000005 Z:-100.362404 U:0.980964 V:0.007387
Vertex 37: X:34.546516 Y:-0.000001 Z:-100.362404 U:0.69379 V:0.007387
Vertex 38: X:16.795341 Y:-0.000004 Z:-84.111816 U:0.602512 V:0.08715
Vertex 39: X:11.196893 Y:0 Z:-42.883484 U:0.573724 V:0.289513
Vertex 40: X:11.196893 Y:-0 Z:42.883499 U:0.573724 V:0.710487
Vertex 41: X:16.795341 Y:-0 Z:84.111847 U:0.602512 V:0.91285
Vertex 42: X:34.546516 Y:-0.000003 Z:100.362434 U:0.69379 V:0.992614
Vertex 43: X:-50.249485 Y:100.000008 Z:-14.89638 U:0.257762 V:0.426883
Vertex 44: X:-61.036736 Y:100.000008 Z:-14.89638 U:0.202294 V:0.426883
Vertex 45: X:-61.036736 Y:100 Z:-70.569695 U:0.202294 V:0.153619
Vertex 46: X:-57.213406 Y:100.000008 Z:-100.362434 U:0.221953 V:0.007386
Vertex 47: X:-99.406586 Y:100.000008 Z:-100.362434 U:0.004993 V:0.007386
Vertex 48: X:-95.58326 Y:100 Z:-70.569695 U:0.024653 V:0.153619
Vertex 49: X:-95.58326 Y:100.000008 Z:70.569664 U:0.024653 V:0.84638
Vertex 50: X:-99.406586 Y:100 Z:100.362404 U:0.004993 V:0.992613
Vertex 51: X:-24.442005 Y:100 Z:100.362404 U:0.390466 V:0.992613
Vertex 52: X:-6.008092 Y:100 Z:90.431488 U:0.485255 V:0.943869
Vertex 53: X:-0.273097 Y:100.000008 Z:58.532196 U:0.514745 V:0.787296
Vertex 54: X:-0.273097 Y:100 Z:15.498236 U:0.514745 V:0.576071
 
Page 1
 
 
 
Vertex 55: X:-1.911667 Y:100 Z:-4.363592 U:0.506319 V:0.478582
Vertex 56: X:-13.654753 Y:100 Z:-15.197317 U:0.445935 V:0.425406
Vertex 57: X:0.819283 Y:100 Z:-82.607162 U:0.520362 V:0.094535
Vertex 58: X:5.734993 Y:100 Z:-100.362434 U:0.545639 V:0.007386
Vertex 59: X:-34.273426 Y:100 Z:-100.362434 U:0.339913 V:0.007386
Vertex 60: X:-61.036736 Y:100 Z:18.206667 U:0.202294 V:0.589365
Vertex 61: X:-41.646992 Y:100 Z:18.206667 U:0.301997 V:0.589365
Vertex 62: X:-36.32164 Y:100 Z:20.614162 U:0.32938 V:0.601181
Vertex 63: X:-34.54652 Y:99.999992 Z:35.661003 U:0.338508 V:0.675037
Vertex 64: X:-34.54652 Y:100.000008 Z:45.591915 U:0.338508 V:0.723781
Vertex 65: X:-36.048542 Y:100.000008 Z:63.949059 U:0.330785 V:0.813884
Vertex 66: X:-42.602825 Y:100.000008 Z:67.259354 U:0.297082 V:0.830132
Vertex 67: X:-61.036736 Y:100.000008 Z:67.259354 U:0.202294 V:0.830132
Vertex 68: X:88.755875 Y:99.999992 Z:100.362404 U:0.972539 V:0.992613
Vertex 69: X:92.03302 Y:100 Z:58.833134 U:0.98939 V:0.788773
Vertex 70: X:74.964577 Y:100 Z:67.259354 U:0.901623 V:0.830132
Vertex 71: X:55.984474 Y:100 Z:67.259354 U:0.804026 V:0.830132
Vertex 72: X:47.518528 Y:100 Z:63.046249 U:0.760493 V:0.809453
Vertex 73: X:45.743412 Y:99.999992 Z:41.679737 U:0.751365 V:0.704579
Vertex 74: X:45.743412 Y:100.000008 Z:-43.184437 U:0.751365 V:0.288036
Vertex 75: X:48.747456 Y:99.999992 Z:-63.046265 U:0.766812 V:0.190547
Vertex 76: X:57.759594 Y:99.999992 Z:-67.259384 U:0.813154 V:0.169868
Vertex 77: X:75.783867 Y:99.999992 Z:-67.259384 U:0.905836 V:0.169868
Vertex 78: X:93.125397 Y:99.999992 Z:-60.939709 U:0.995007 V:0.200887
Vertex 79: X:90.394447 Y:100 Z:-100.362434 U:0.980964 V:0.007386
Vertex 80: X:34.546516 Y:100 Z:-100.362434 U:0.69379 V:0.007386
Vertex 81: X:16.795341 Y:100 Z:-84.111847 U:0.602512 V:0.08715
Vertex 82: X:11.196893 Y:100.000008 Z:-42.883499 U:0.573724 V:0.289513
Vertex 83: X:11.196893 Y:99.999992 Z:42.883484 U:0.573724 V:0.710487
Vertex 84: X:16.795341 Y:100 Z:84.111816 U:0.602512 V:0.91285
Vertex 85: X:34.546516 Y:100 Z:100.362404 U:0.69379 V:0.992613
Face list:
Face 0: A:1 B:0 C:17 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 1: A:18 B:17 C:0 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 2: A:16 B:15 C:14 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 3: A:0 B:16 C:14 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 4: A:0 B:14 C:13 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 5: A:18 B:0 C:13 AB:0 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 6: A:19 B:18 C:13 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 7: A:19 B:13 C:12 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 8: A:19 B:12 C:11 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 9: A:19 B:11 C:10 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
 
Page 2
 
 
 
Smoothing: 17
Face 10: A:20 B:19 C:10 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 11: A:21 B:20 C:10 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 12: A:22 B:21 C:10 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 13: A:22 B:10 C:9 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 14: A:22 B:9 C:8 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 15: A:22 B:8 C:7 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 16: A:23 B:22 C:7 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 17: A:24 B:23 C:7 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 18: A:24 B:7 C:6 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 19: A:4 B:3 C:2 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 20: A:5 B:4 C:2 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 21: A:24 B:6 C:5 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 22: A:17 B:24 C:5 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 23: A:1 B:17 C:5 AB:0 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 24: A:2 B:1 C:5 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 25: A:27 B:26 C:25 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 26: A:36 B:35 C:34 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 27: A:37 B:36 C:34 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 28: A:37 B:34 C:33 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 29: A:27 B:25 C:42 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
 
Page 3
 
 
 
Face 30: A:28 B:27 C:42 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 31: A:37 B:33 C:32 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 32: A:38 B:37 C:32 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 33: A:39 B:38 C:32 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 34: A:39 B:32 C:31 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 35: A:28 B:42 C:41 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 36: A:29 B:28 C:41 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 37: A:29 B:41 C:40 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 38: A:30 B:29 C:40 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 39: A:30 B:40 C:39 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 40: A:31 B:30 C:39 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 41: A:0 B:1 C:44 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 42: A:0 B:44 C:43 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 43: A:1 B:2 C:45 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 44: A:1 B:45 C:44 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 45: A:2 B:3 C:46 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 46: A:2 B:46 C:45 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 47: A:3 B:4 C:47 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 48: A:3 B:47 C:46 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 49: A:4 B:5 C:48 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 50: A:4 B:48 C:47 AB:0 BC:1 CA:1
 
Page 4
 
 
 
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 51: A:5 B:6 C:49 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 52: A:5 B:49 C:48 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 53: A:6 B:7 C:50 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 54: A:6 B:50 C:49 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 55: A:7 B:8 C:51 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 56: A:7 B:51 C:50 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 57: A:8 B:9 C:52 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 58: A:8 B:52 C:51 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 59: A:9 B:10 C:53 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 60: A:9 B:53 C:52 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 61: A:10 B:11 C:54 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 62: A:10 B:54 C:53 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 63: A:11 B:12 C:55 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 64: A:11 B:55 C:54 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 65: A:12 B:13 C:56 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 66: A:12 B:56 C:55 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 67: A:13 B:14 C:57 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 68: A:13 B:57 C:56 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 69: A:14 B:15 C:58 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 70: A:14 B:58 C:57 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
 
Page 5
 
 
 
Smoothing: 1, 10
Face 71: A:15 B:16 C:59 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 72: A:15 B:59 C:58 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 73: A:16 B:0 C:43 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 3, 12
Face 74: A:16 B:43 C:59 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 3, 12
Face 75: A:17 B:18 C:61 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 76: A:17 B:61 C:60 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 77: A:18 B:19 C:62 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 78: A:18 B:62 C:61 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 79: A:19 B:20 C:63 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 80: A:19 B:63 C:62 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 81: A:20 B:21 C:64 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 82: A:20 B:64 C:63 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 83: A:21 B:22 C:65 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 84: A:21 B:65 C:64 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 85: A:22 B:23 C:66 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 86: A:22 B:66 C:65 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 87: A:23 B:24 C:67 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 88: A:23 B:67 C:66 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 89: A:24 B:17 C:60 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 3, 12
Face 90: A:24 B:60 C:67 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 3, 12
 
Page 6
 
 
 
Face 91: A:25 B:26 C:69 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 92: A:25 B:69 C:68 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 93: A:26 B:27 C:70 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 94: A:26 B:70 C:69 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 95: A:27 B:28 C:71 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 96: A:27 B:71 C:70 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 97: A:28 B:29 C:72 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 98: A:28 B:72 C:71 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 99: A:29 B:30 C:73 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 100: A:29 B:73 C:72 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 101: A:30 B:31 C:74 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 102: A:30 B:74 C:73 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 103: A:31 B:32 C:75 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 104: A:31 B:75 C:74 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 105: A:32 B:33 C:76 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 106: A:32 B:76 C:75 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 107: A:33 B:34 C:77 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 108: A:33 B:77 C:76 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 109: A:34 B:35 C:78 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 110: A:34 B:78 C:77 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 111: A:35 B:36 C:79 AB:1 BC:1 CA:0
 
Page 7
 
 
 
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 112: A:35 B:79 C:78 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 113: A:36 B:37 C:80 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 114: A:36 B:80 C:79 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 115: A:37 B:38 C:81 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 116: A:37 B:81 C:80 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 117: A:38 B:39 C:82 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 118: A:38 B:82 C:81 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 119: A:39 B:40 C:83 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 120: A:39 B:83 C:82 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 121: A:40 B:41 C:84 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 122: A:40 B:84 C:83 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 2, 11
Face 123: A:41 B:42 C:85 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 124: A:41 B:85 C:84 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 1, 10
Face 125: A:42 B:25 C:68 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 3, 12
Face 126: A:42 B:68 C:85 AB:0 BC:1 CA:1
Material:"AMOEBA PATTERN"
Smoothing: 3, 12
Face 127: A:60 B:43 C:44 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 128: A:43 B:60 C:61 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 129: A:57 B:58 C:59 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 130: A:57 B:59 C:43 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 131: A:56 B:57 C:43 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
 
Page 8
 
 
 
Smoothing: 17
Face 132: A:56 B:43 C:61 AB:0 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 133: A:56 B:61 C:62 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 134: A:55 B:56 C:62 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 135: A:54 B:55 C:62 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 136: A:53 B:54 C:62 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 137: A:53 B:62 C:63 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 138: A:53 B:63 C:64 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 139: A:53 B:64 C:65 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 140: A:52 B:53 C:65 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 141: A:51 B:52 C:65 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 142: A:50 B:51 C:65 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 143: A:50 B:65 C:66 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 144: A:50 B:66 C:67 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 145: A:49 B:50 C:67 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 146: A:45 B:46 C:47 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 147: A:45 B:47 C:48 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 148: A:48 B:49 C:67 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 149: A:48 B:67 C:60 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 150: A:48 B:60 C:44 AB:0 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 151: A:48 B:44 C:45 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
 
Page 9
 
 
 
Face 152: A:68 B:69 C:70 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 153: A:77 B:78 C:79 AB:1 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 154: A:77 B:79 C:80 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 155: A:76 B:77 C:80 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 156: A:85 B:68 C:70 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 157: A:85 B:70 C:71 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 158: A:75 B:76 C:80 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 159: A:75 B:80 C:81 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 160: A:75 B:81 C:82 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 161: A:74 B:75 C:82 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 162: A:84 B:85 C:71 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 163: A:84 B:71 C:72 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 164: A:83 B:84 C:72 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 165: A:83 B:72 C:73 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 166: A:82 B:83 C:73 AB:1 BC:0 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
Face 167: A:82 B:73 C:74 AB:0 BC:1 CA:0
Material:"AMOEBA PATTERN"
Smoothing: 17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Page 10
 
 
 
/programs/demos/view3ds/asc_objects/PALLERO.ASC
0,0 → 1,462
Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
 
Named object: "Object01"
Tri-mesh, Vertices: 130 Faces: 256
Vertex list:
Vertex 0: X: 0 Y: 0.00003 Z: 200.692032
Vertex 1: X: -94.60714 Y: -163.86438 Z: -66.897331
Vertex 2: X: 189.214264 Y: -0.00001 Z: -66.897346
Vertex 3: X: -94.60714 Y: 163.864365 Z: -66.897369
Vertex 4: X: -23.738377 Y: -41.116043 Z: 194.995529
Vertex 5: X: -46.129154 Y: -79.89801 Z: 178.229355
Vertex 6: X: -65.901245 Y: -114.144272 Z: 151.345322
Vertex 7: X: -81.93219 Y: -141.91069 Z: 115.869629
Vertex 8: X: -93.311951 Y: -161.621033 Z: 73.816139
Vertex 9: X: -99.394508 Y: -172.156342 Z: 27.572216
Vertex 10: X: -99.834572 Y: -172.918549 Z: -20.236956
Vertex 11: X: 47.476753 Y: 0.000029 Z: 194.995514
Vertex 12: X: 92.258308 Y: 0.000026 Z: 178.22934
Vertex 13: X: 131.80249 Y: 0.000022 Z: 151.345306
Vertex 14: X: 163.86438 Y: 0.000017 Z: 115.869606
Vertex 15: X: 186.623901 Y: 0.000011 Z: 73.816116
Vertex 16: X: 198.789001 Y: 0.000004 Z: 27.572191
Vertex 17: X: 199.669128 Y: -0.000003 Z: -20.23698
Vertex 18: X: -23.738377 Y: 41.116104 Z: 194.995514
Vertex 19: X: -46.129154 Y: 79.898064 Z: 178.22934
Vertex 20: X: -65.901245 Y: 114.144318 Z: 151.345291
Vertex 21: X: -81.93219 Y: 141.910721 Z: 115.869591
Vertex 22: X: -93.311951 Y: 161.621048 Z: 73.816101
Vertex 23: X: -99.394508 Y: 172.156357 Z: 27.572166
Vertex 24: X: -99.834572 Y: 172.918533 Z: -20.237007
Vertex 25: X: -52.357815 Y: -172.918549 Z: -87.379234
Vertex 26: X: -7.136202 Y: -172.156357 Z: -102.900742
Vertex 27: X: 38.490532 Y: -161.621048 Z: -112.580704
Vertex 28: X: 81.93219 Y: -141.910721 Z: -115.869591
Vertex 29: X: 120.722664 Y: -114.14431 Z: -112.580711
Vertex 30: X: 152.659851 Y: -79.898056 Z: -102.900757
Vertex 31: X: 175.930756 Y: -41.1161 Z: -87.379265
Vertex 32: X: 175.930756 Y: 41.116062 Z: -87.379265
Vertex 33: X: 152.659851 Y: 79.898026 Z: -102.90078
Vertex 34: X: 120.722664 Y: 114.144279 Z: -112.580742
Vertex 35: X: 81.93219 Y: 141.91069 Z: -115.869629
Vertex 36: X: 38.490532 Y: 161.621017 Z: -112.58075
Vertex 37: X: -7.13619 Y: 172.156326 Z: -102.900787
Vertex 38: X: -52.357796 Y: 172.918533 Z: -87.379288
Vertex 39: X: -123.572952 Y: 131.80246 Z: -87.37928
Vertex 40: X: -145.523682 Y: 92.258286 Z: -102.90078
Vertex 41: X: -159.213196 Y: 47.476727 Z: -112.580734
Vertex 42: X: -163.86438 Y: -0.000017 Z: -115.869606
Vertex 43: X: -159.213196 Y: -47.476757 Z: -112.580719
Vertex 44: X: -145.523682 Y: -92.258308 Z: -102.900757
Vertex 45: X: -123.572952 Y: -131.80246 Z: -87.37925
Vertex 46: X: 25.142982 Y: -43.548893 Z: 194.290039
Vertex 47: X: 4.436438 Y: -88.080978 Z: 180.275772
Vertex 48: X: 74.062164 Y: -47.882549 Z: 180.275772
Vertex 49: X: -12.987289 Y: -131.108368 Z: 151.390976
Vertex 50: X: 57.934807 Y: -100.346008 Z: 163.864395
Vertex 51: X: 120.036842 Y: -54.306858 Z: 151.390961
Vertex 52: X: -25.971127 Y: -168.813553 Z: 105.379234
Vertex 53: X: 44.969498 Y: -152.607208 Z: 122.335945
Vertex 54: X: 109.67701 Y: -115.248314 Z: 122.335938
Vertex 55: X: 159.182404 Y: -61.915108 Z: 105.379219
 
Page 1
 
 
 
Vertex 56: X: -35.535969 Y: -193.119415 Z: 41.465549
Vertex 57: X: 32.47847 Y: -191.49736 Z: 50.509529
Vertex 58: X: 96.694572 Y: -167.479904 Z: 53.646473
Vertex 59: X: 149.602356 Y: -123.875839 Z: 50.509518
Vertex 60: X: 185.014313 Y: -65.784615 Z: 41.465527
Vertex 61: X: -44.907486 Y: -193.381699 Z: -29.396215
Vertex 62: X: 13.943819 Y: -196.946274 Z: -35.986694
Vertex 63: X: 71.576653 Y: -183.300751 Z: -39.432495
Vertex 64: X: 122.954781 Y: -153.637573 Z: -39.432499
Vertex 65: X: 163.588531 Y: -110.548843 Z: -35.986713
Vertex 66: X: 189.927216 Y: -57.799828 Z: -29.396236
Vertex 67: X: 25.142982 Y: 43.548954 Z: 194.290024
Vertex 68: X: 74.062172 Y: 47.882603 Z: 180.275757
Vertex 69: X: 4.436449 Y: 88.081017 Z: 180.275757
Vertex 70: X: 120.036858 Y: 54.306904 Z: 151.390945
Vertex 71: X: 57.934807 Y: 100.346054 Z: 163.864365
Vertex 72: X: -12.987283 Y: 131.108414 Z: 151.39093
Vertex 73: X: 159.182404 Y: 61.915146 Z: 105.379204
Vertex 74: X: 109.676987 Y: 115.24836 Z: 122.335907
Vertex 75: X: 44.969475 Y: 152.607254 Z: 122.335899
Vertex 76: X: -25.971138 Y: 168.813583 Z: 105.379189
Vertex 77: X: 185.014282 Y: 65.78466 Z: 41.465511
Vertex 78: X: 149.602356 Y: 123.87587 Z: 50.509483
Vertex 79: X: 96.694572 Y: 167.479919 Z: 53.64642
Vertex 80: X: 32.478443 Y: 191.497391 Z: 50.509468
Vertex 81: X: -35.536003 Y: 193.119415 Z: 41.465488
Vertex 82: X: 189.927216 Y: 57.79982 Z: -29.396252
Vertex 83: X: 163.588531 Y: 110.548828 Z: -35.98674
Vertex 84: X: 122.954781 Y: 153.637558 Z: -39.432549
Vertex 85: X: 71.576653 Y: 183.300735 Z: -39.432552
Vertex 86: X: 13.943819 Y: 196.946259 Z: -35.986755
Vertex 87: X: -44.907486 Y: 193.381683 Z: -29.396273
Vertex 88: X: -50.285965 Y: 0.000029 Z: 194.290024
Vertex 89: X: -78.498611 Y: 40.198463 Z: 180.275757
Vertex 90: X: -78.498611 Y: -40.198395 Z: 180.275772
Vertex 91: X: -107.049568 Y: 76.801544 Z: 151.390945
Vertex 92: X: -115.869614 Y: 0.000024 Z: 163.86438
Vertex 93: X: -107.049568 Y: -76.801498 Z: 151.390961
Vertex 94: X: -133.211304 Y: 106.89846 Z: 105.379204
Vertex 95: X: -154.646515 Y: 37.358913 Z: 122.335922
Vertex 96: X: -154.646515 Y: -37.358879 Z: 122.335938
Vertex 97: X: -133.211304 Y: -106.89843 Z: 105.379234
Vertex 98: X: -149.478363 Y: 127.334778 Z: 41.465508
Vertex 99: X: -182.080841 Y: 67.621529 Z: 50.509502
Vertex 100: X: -193.389191 Y: 0.000032 Z: 53.646461
Vertex 101: X: -182.080841 Y: -67.621498 Z: 50.509521
Vertex 102: X: -149.478363 Y: -127.334755 Z: 41.465546
Vertex 103: X: -145.019745 Y: 135.581863 Z: -29.396265
Vertex 104: X: -177.532379 Y: 86.397423 Z: -35.986736
Vertex 105: X: -194.531433 Y: 29.66317 Z: -39.432526
Vertex 106: X: -194.531433 Y: -29.663181 Z: -39.432518
Vertex 107: X: -177.532379 Y: -86.39743 Z: -35.986713
Vertex 108: X: -145.019745 Y: -135.581879 Z: -29.396225
Vertex 109: X: -83.208214 Y: -144.12085 Z: -112.173386
Vertex 110: X: -106.712585 Y: -104.434761 Z: -134.10112
Vertex 111: X: -37.086857 Y: -144.633194 Z: -134.101105
Vertex 112: X: -120.036858 Y: -54.306904 Z: -151.390945
Vertex 113: X: -57.934807 Y: -100.346054 Z: -163.864365
Vertex 114: X: 12.987283 Y: -131.108414 Z: -151.39093
Vertex 115: X: -120.05114 Y: 5.86221 Z: -160.719208
Vertex 116: X: -64.249054 Y: -36.564857 Z: -186.58075
 
Page 2
 
 
 
Vertex 117: X: 0.458444 Y: -73.923752 Z: -186.58075
Vertex 118: X: 65.102394 Y: -101.036232 Z: -160.719193
Vertex 119: X: -104.909103 Y: 72.961594 Z: -154.751358
Vertex 120: X: -52.025539 Y: 45.132103 Z: -188.503937
Vertex 121: X: 6.942347 Y: 12.024473 Z: -200.211166
Vertex 122: X: 65.098351 Y: -22.489416 Z: -188.503922
Vertex 123: X: 115.641174 Y: -54.373196 Z: -154.751328
Vertex 124: X: -79.38987 Y: 133.656448 Z: -126.927155
Vertex 125: X: -28.269325 Y: 123.830917 Z: -155.383545
Vertex 126: X: 25.321518 Y: 103.184486 Z: -170.26181
Vertex 127: X: 76.699654 Y: 73.521301 Z: -170.26181
Vertex 128: X: 121.375412 Y: 37.433491 Z: -155.383545
Vertex 129: X: 155.444824 Y: -1.925431 Z: -126.927147
Face list:
Face 0: A:0 B:4 C:11 AB:1 BC:1 CA:1
Face 1: A:4 B:5 C:46 AB:1 BC:1 CA:1
Face 2: A:4 B:46 C:11 AB:1 BC:1 CA:1
Face 3: A:11 B:46 C:12 AB:1 BC:1 CA:1
Face 4: A:5 B:6 C:47 AB:1 BC:1 CA:1
Face 5: A:5 B:47 C:46 AB:1 BC:1 CA:1
Face 6: A:46 B:47 C:48 AB:1 BC:1 CA:1
Face 7: A:46 B:48 C:12 AB:1 BC:1 CA:1
Face 8: A:12 B:48 C:13 AB:1 BC:1 CA:1
Face 9: A:6 B:7 C:49 AB:1 BC:1 CA:1
Face 10: A:6 B:49 C:47 AB:1 BC:1 CA:1
Face 11: A:47 B:49 C:50 AB:1 BC:1 CA:1
Face 12: A:47 B:50 C:48 AB:1 BC:1 CA:1
Face 13: A:48 B:50 C:51 AB:1 BC:1 CA:1
Face 14: A:48 B:51 C:13 AB:1 BC:1 CA:1
Face 15: A:13 B:51 C:14 AB:1 BC:1 CA:1
Face 16: A:7 B:8 C:52 AB:1 BC:1 CA:1
Face 17: A:7 B:52 C:49 AB:1 BC:1 CA:1
Face 18: A:49 B:52 C:53 AB:1 BC:1 CA:1
Face 19: A:49 B:53 C:50 AB:1 BC:1 CA:1
Face 20: A:50 B:53 C:54 AB:1 BC:1 CA:1
Face 21: A:50 B:54 C:51 AB:1 BC:1 CA:1
Face 22: A:51 B:54 C:55 AB:1 BC:1 CA:1
Face 23: A:51 B:55 C:14 AB:1 BC:1 CA:1
Face 24: A:14 B:55 C:15 AB:1 BC:1 CA:1
Face 25: A:8 B:9 C:56 AB:1 BC:1 CA:1
Face 26: A:8 B:56 C:52 AB:1 BC:1 CA:1
Face 27: A:52 B:56 C:57 AB:1 BC:1 CA:1
Face 28: A:52 B:57 C:53 AB:1 BC:1 CA:1
Face 29: A:53 B:57 C:58 AB:1 BC:1 CA:1
Face 30: A:53 B:58 C:54 AB:1 BC:1 CA:1
Face 31: A:54 B:58 C:59 AB:1 BC:1 CA:1
Face 32: A:54 B:59 C:55 AB:1 BC:1 CA:1
Face 33: A:55 B:59 C:60 AB:1 BC:1 CA:1
Face 34: A:55 B:60 C:15 AB:1 BC:1 CA:1
Face 35: A:15 B:60 C:16 AB:1 BC:1 CA:1
Face 36: A:9 B:10 C:61 AB:1 BC:1 CA:1
Face 37: A:9 B:61 C:56 AB:1 BC:1 CA:1
Face 38: A:56 B:61 C:62 AB:1 BC:1 CA:1
Face 39: A:56 B:62 C:57 AB:1 BC:1 CA:1
Face 40: A:57 B:62 C:63 AB:1 BC:1 CA:1
Face 41: A:57 B:63 C:58 AB:1 BC:1 CA:1
Face 42: A:58 B:63 C:64 AB:1 BC:1 CA:1
Face 43: A:58 B:64 C:59 AB:1 BC:1 CA:1
Face 44: A:59 B:64 C:65 AB:1 BC:1 CA:1
Face 45: A:59 B:65 C:60 AB:1 BC:1 CA:1
Face 46: A:60 B:65 C:66 AB:1 BC:1 CA:1
 
Page 3
 
 
 
Face 47: A:60 B:66 C:16 AB:1 BC:1 CA:1
Face 48: A:16 B:66 C:17 AB:1 BC:1 CA:1
Face 49: A:10 B:1 C:25 AB:1 BC:1 CA:1
Face 50: A:10 B:25 C:61 AB:1 BC:1 CA:1
Face 51: A:61 B:25 C:26 AB:1 BC:1 CA:1
Face 52: A:61 B:26 C:62 AB:1 BC:1 CA:1
Face 53: A:62 B:26 C:27 AB:1 BC:1 CA:1
Face 54: A:62 B:27 C:63 AB:1 BC:1 CA:1
Face 55: A:63 B:27 C:28 AB:1 BC:1 CA:1
Face 56: A:63 B:28 C:64 AB:1 BC:1 CA:1
Face 57: A:64 B:28 C:29 AB:1 BC:1 CA:1
Face 58: A:64 B:29 C:65 AB:1 BC:1 CA:1
Face 59: A:65 B:29 C:30 AB:1 BC:1 CA:1
Face 60: A:65 B:30 C:66 AB:1 BC:1 CA:1
Face 61: A:66 B:30 C:31 AB:1 BC:1 CA:1
Face 62: A:66 B:31 C:17 AB:1 BC:1 CA:1
Face 63: A:17 B:31 C:2 AB:1 BC:1 CA:1
Face 64: A:0 B:11 C:18 AB:1 BC:1 CA:1
Face 65: A:11 B:12 C:67 AB:1 BC:1 CA:1
Face 66: A:11 B:67 C:18 AB:1 BC:1 CA:1
Face 67: A:18 B:67 C:19 AB:1 BC:1 CA:1
Face 68: A:12 B:13 C:68 AB:1 BC:1 CA:1
Face 69: A:12 B:68 C:67 AB:1 BC:1 CA:1
Face 70: A:67 B:68 C:69 AB:1 BC:1 CA:1
Face 71: A:67 B:69 C:19 AB:1 BC:1 CA:1
Face 72: A:19 B:69 C:20 AB:1 BC:1 CA:1
Face 73: A:13 B:14 C:70 AB:1 BC:1 CA:1
Face 74: A:13 B:70 C:68 AB:1 BC:1 CA:1
Face 75: A:68 B:70 C:71 AB:1 BC:1 CA:1
Face 76: A:68 B:71 C:69 AB:1 BC:1 CA:1
Face 77: A:69 B:71 C:72 AB:1 BC:1 CA:1
Face 78: A:69 B:72 C:20 AB:1 BC:1 CA:1
Face 79: A:20 B:72 C:21 AB:1 BC:1 CA:1
Face 80: A:14 B:15 C:73 AB:1 BC:1 CA:1
Face 81: A:14 B:73 C:70 AB:1 BC:1 CA:1
Face 82: A:70 B:73 C:74 AB:1 BC:1 CA:1
Face 83: A:70 B:74 C:71 AB:1 BC:1 CA:1
Face 84: A:71 B:74 C:75 AB:1 BC:1 CA:1
Face 85: A:71 B:75 C:72 AB:1 BC:1 CA:1
Face 86: A:72 B:75 C:76 AB:1 BC:1 CA:1
Face 87: A:72 B:76 C:21 AB:1 BC:1 CA:1
Face 88: A:21 B:76 C:22 AB:1 BC:1 CA:1
Face 89: A:15 B:16 C:77 AB:1 BC:1 CA:1
Face 90: A:15 B:77 C:73 AB:1 BC:1 CA:1
Face 91: A:73 B:77 C:78 AB:1 BC:1 CA:1
Face 92: A:73 B:78 C:74 AB:1 BC:1 CA:1
Face 93: A:74 B:78 C:79 AB:1 BC:1 CA:1
Face 94: A:74 B:79 C:75 AB:1 BC:1 CA:1
Face 95: A:75 B:79 C:80 AB:1 BC:1 CA:1
Face 96: A:75 B:80 C:76 AB:1 BC:1 CA:1
Face 97: A:76 B:80 C:81 AB:1 BC:1 CA:1
Face 98: A:76 B:81 C:22 AB:1 BC:1 CA:1
Face 99: A:22 B:81 C:23 AB:1 BC:1 CA:1
Face 100: A:16 B:17 C:82 AB:1 BC:1 CA:1
Face 101: A:16 B:82 C:77 AB:1 BC:1 CA:1
Face 102: A:77 B:82 C:83 AB:1 BC:1 CA:1
Face 103: A:77 B:83 C:78 AB:1 BC:1 CA:1
Face 104: A:78 B:83 C:84 AB:1 BC:1 CA:1
Face 105: A:78 B:84 C:79 AB:1 BC:1 CA:1
Face 106: A:79 B:84 C:85 AB:1 BC:1 CA:1
Face 107: A:79 B:85 C:80 AB:1 BC:1 CA:1
 
Page 4
 
 
 
Face 108: A:80 B:85 C:86 AB:1 BC:1 CA:1
Face 109: A:80 B:86 C:81 AB:1 BC:1 CA:1
Face 110: A:81 B:86 C:87 AB:1 BC:1 CA:1
Face 111: A:81 B:87 C:23 AB:1 BC:1 CA:1
Face 112: A:23 B:87 C:24 AB:1 BC:1 CA:1
Face 113: A:17 B:2 C:32 AB:1 BC:1 CA:1
Face 114: A:17 B:32 C:82 AB:1 BC:1 CA:1
Face 115: A:82 B:32 C:33 AB:1 BC:1 CA:1
Face 116: A:82 B:33 C:83 AB:1 BC:1 CA:1
Face 117: A:83 B:33 C:34 AB:1 BC:1 CA:1
Face 118: A:83 B:34 C:84 AB:1 BC:1 CA:1
Face 119: A:84 B:34 C:35 AB:1 BC:1 CA:1
Face 120: A:84 B:35 C:85 AB:1 BC:1 CA:1
Face 121: A:85 B:35 C:36 AB:1 BC:1 CA:1
Face 122: A:85 B:36 C:86 AB:1 BC:1 CA:1
Face 123: A:86 B:36 C:37 AB:1 BC:1 CA:1
Face 124: A:86 B:37 C:87 AB:1 BC:1 CA:1
Face 125: A:87 B:37 C:38 AB:1 BC:1 CA:1
Face 126: A:87 B:38 C:24 AB:1 BC:1 CA:1
Face 127: A:24 B:38 C:3 AB:1 BC:1 CA:1
Face 128: A:0 B:18 C:4 AB:1 BC:1 CA:1
Face 129: A:18 B:19 C:88 AB:1 BC:1 CA:1
Face 130: A:18 B:88 C:4 AB:1 BC:1 CA:1
Face 131: A:4 B:88 C:5 AB:1 BC:1 CA:1
Face 132: A:19 B:20 C:89 AB:1 BC:1 CA:1
Face 133: A:19 B:89 C:88 AB:1 BC:1 CA:1
Face 134: A:88 B:89 C:90 AB:1 BC:1 CA:1
Face 135: A:88 B:90 C:5 AB:1 BC:1 CA:1
Face 136: A:5 B:90 C:6 AB:1 BC:1 CA:1
Face 137: A:20 B:21 C:91 AB:1 BC:1 CA:1
Face 138: A:20 B:91 C:89 AB:1 BC:1 CA:1
Face 139: A:89 B:91 C:92 AB:1 BC:1 CA:1
Face 140: A:89 B:92 C:90 AB:1 BC:1 CA:1
Face 141: A:90 B:92 C:93 AB:1 BC:1 CA:1
Face 142: A:90 B:93 C:6 AB:1 BC:1 CA:1
Face 143: A:6 B:93 C:7 AB:1 BC:1 CA:1
Face 144: A:21 B:22 C:94 AB:1 BC:1 CA:1
Face 145: A:21 B:94 C:91 AB:1 BC:1 CA:1
Face 146: A:91 B:94 C:95 AB:1 BC:1 CA:1
Face 147: A:91 B:95 C:92 AB:1 BC:1 CA:1
Face 148: A:92 B:95 C:96 AB:1 BC:1 CA:1
Face 149: A:92 B:96 C:93 AB:1 BC:1 CA:1
Face 150: A:93 B:96 C:97 AB:1 BC:1 CA:1
Face 151: A:93 B:97 C:7 AB:1 BC:1 CA:1
Face 152: A:7 B:97 C:8 AB:1 BC:1 CA:1
Face 153: A:22 B:23 C:98 AB:1 BC:1 CA:1
Face 154: A:22 B:98 C:94 AB:1 BC:1 CA:1
Face 155: A:94 B:98 C:99 AB:1 BC:1 CA:1
Face 156: A:94 B:99 C:95 AB:1 BC:1 CA:1
Face 157: A:95 B:99 C:100 AB:1 BC:1 CA:1
Face 158: A:95 B:100 C:96 AB:1 BC:1 CA:1
Face 159: A:96 B:100 C:101 AB:1 BC:1 CA:1
Face 160: A:96 B:101 C:97 AB:1 BC:1 CA:1
Face 161: A:97 B:101 C:102 AB:1 BC:1 CA:1
Face 162: A:97 B:102 C:8 AB:1 BC:1 CA:1
Face 163: A:8 B:102 C:9 AB:1 BC:1 CA:1
Face 164: A:23 B:24 C:103 AB:1 BC:1 CA:1
Face 165: A:23 B:103 C:98 AB:1 BC:1 CA:1
Face 166: A:98 B:103 C:104 AB:1 BC:1 CA:1
Face 167: A:98 B:104 C:99 AB:1 BC:1 CA:1
Face 168: A:99 B:104 C:105 AB:1 BC:1 CA:1
 
Page 5
 
 
 
Face 169: A:99 B:105 C:100 AB:1 BC:1 CA:1
Face 170: A:100 B:105 C:106 AB:1 BC:1 CA:1
Face 171: A:100 B:106 C:101 AB:1 BC:1 CA:1
Face 172: A:101 B:106 C:107 AB:1 BC:1 CA:1
Face 173: A:101 B:107 C:102 AB:1 BC:1 CA:1
Face 174: A:102 B:107 C:108 AB:1 BC:1 CA:1
Face 175: A:102 B:108 C:9 AB:1 BC:1 CA:1
Face 176: A:9 B:108 C:10 AB:1 BC:1 CA:1
Face 177: A:24 B:3 C:39 AB:1 BC:1 CA:1
Face 178: A:24 B:39 C:103 AB:1 BC:1 CA:1
Face 179: A:103 B:39 C:40 AB:1 BC:1 CA:1
Face 180: A:103 B:40 C:104 AB:1 BC:1 CA:1
Face 181: A:104 B:40 C:41 AB:1 BC:1 CA:1
Face 182: A:104 B:41 C:105 AB:1 BC:1 CA:1
Face 183: A:105 B:41 C:42 AB:1 BC:1 CA:1
Face 184: A:105 B:42 C:106 AB:1 BC:1 CA:1
Face 185: A:106 B:42 C:43 AB:1 BC:1 CA:1
Face 186: A:106 B:43 C:107 AB:1 BC:1 CA:1
Face 187: A:107 B:43 C:44 AB:1 BC:1 CA:1
Face 188: A:107 B:44 C:108 AB:1 BC:1 CA:1
Face 189: A:108 B:44 C:45 AB:1 BC:1 CA:1
Face 190: A:108 B:45 C:10 AB:1 BC:1 CA:1
Face 191: A:10 B:45 C:1 AB:1 BC:1 CA:1
Face 192: A:1 B:45 C:25 AB:1 BC:1 CA:1
Face 193: A:45 B:44 C:109 AB:1 BC:1 CA:1
Face 194: A:45 B:109 C:25 AB:1 BC:1 CA:1
Face 195: A:25 B:109 C:26 AB:1 BC:1 CA:1
Face 196: A:44 B:43 C:110 AB:1 BC:1 CA:1
Face 197: A:44 B:110 C:109 AB:1 BC:1 CA:1
Face 198: A:109 B:110 C:111 AB:1 BC:1 CA:1
Face 199: A:109 B:111 C:26 AB:1 BC:1 CA:1
Face 200: A:26 B:111 C:27 AB:1 BC:1 CA:1
Face 201: A:43 B:42 C:112 AB:1 BC:1 CA:1
Face 202: A:43 B:112 C:110 AB:1 BC:1 CA:1
Face 203: A:110 B:112 C:113 AB:1 BC:1 CA:1
Face 204: A:110 B:113 C:111 AB:1 BC:1 CA:1
Face 205: A:111 B:113 C:114 AB:1 BC:1 CA:1
Face 206: A:111 B:114 C:27 AB:1 BC:1 CA:1
Face 207: A:27 B:114 C:28 AB:1 BC:1 CA:1
Face 208: A:42 B:41 C:115 AB:1 BC:1 CA:1
Face 209: A:42 B:115 C:112 AB:1 BC:1 CA:1
Face 210: A:112 B:115 C:116 AB:1 BC:1 CA:1
Face 211: A:112 B:116 C:113 AB:1 BC:1 CA:1
Face 212: A:113 B:116 C:117 AB:1 BC:1 CA:1
Face 213: A:113 B:117 C:114 AB:1 BC:1 CA:1
Face 214: A:114 B:117 C:118 AB:1 BC:1 CA:1
Face 215: A:114 B:118 C:28 AB:1 BC:1 CA:1
Face 216: A:28 B:118 C:29 AB:1 BC:1 CA:1
Face 217: A:41 B:40 C:119 AB:1 BC:1 CA:1
Face 218: A:41 B:119 C:115 AB:1 BC:1 CA:1
Face 219: A:115 B:119 C:120 AB:1 BC:1 CA:1
Face 220: A:115 B:120 C:116 AB:1 BC:1 CA:1
Face 221: A:116 B:120 C:121 AB:1 BC:1 CA:1
Face 222: A:116 B:121 C:117 AB:1 BC:1 CA:1
Face 223: A:117 B:121 C:122 AB:1 BC:1 CA:1
Face 224: A:117 B:122 C:118 AB:1 BC:1 CA:1
Face 225: A:118 B:122 C:123 AB:1 BC:1 CA:1
Face 226: A:118 B:123 C:29 AB:1 BC:1 CA:1
Face 227: A:29 B:123 C:30 AB:1 BC:1 CA:1
Face 228: A:40 B:39 C:124 AB:1 BC:1 CA:1
Face 229: A:40 B:124 C:119 AB:1 BC:1 CA:1
 
Page 6
 
 
 
Face 230: A:119 B:124 C:125 AB:1 BC:1 CA:1
Face 231: A:119 B:125 C:120 AB:1 BC:1 CA:1
Face 232: A:120 B:125 C:126 AB:1 BC:1 CA:1
Face 233: A:120 B:126 C:121 AB:1 BC:1 CA:1
Face 234: A:121 B:126 C:127 AB:1 BC:1 CA:1
Face 235: A:121 B:127 C:122 AB:1 BC:1 CA:1
Face 236: A:122 B:127 C:128 AB:1 BC:1 CA:1
Face 237: A:122 B:128 C:123 AB:1 BC:1 CA:1
Face 238: A:123 B:128 C:129 AB:1 BC:1 CA:1
Face 239: A:123 B:129 C:30 AB:1 BC:1 CA:1
Face 240: A:30 B:129 C:31 AB:1 BC:1 CA:1
Face 241: A:39 B:3 C:38 AB:1 BC:1 CA:1
Face 242: A:39 B:38 C:124 AB:1 BC:1 CA:1
Face 243: A:124 B:38 C:37 AB:1 BC:1 CA:1
Face 244: A:124 B:37 C:125 AB:1 BC:1 CA:1
Face 245: A:125 B:37 C:36 AB:1 BC:1 CA:1
Face 246: A:125 B:36 C:126 AB:1 BC:1 CA:1
Face 247: A:126 B:36 C:35 AB:1 BC:1 CA:1
Face 248: A:126 B:35 C:127 AB:1 BC:1 CA:1
Face 249: A:127 B:35 C:34 AB:1 BC:1 CA:1
Face 250: A:127 B:34 C:128 AB:1 BC:1 CA:1
Face 251: A:128 B:34 C:33 AB:1 BC:1 CA:1
Face 252: A:128 B:33 C:129 AB:1 BC:1 CA:1
Face 253: A:129 B:33 C:32 AB:1 BC:1 CA:1
Face 254: A:129 B:32 C:31 AB:1 BC:1 CA:1
Face 255: A:31 B:32 C:2 AB:1 BC:1 CA:1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Page 7
 
 
 
/programs/demos/view3ds/asc_objects/TOORUS.ASC
0,0 → 1,924
Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
 
Named object: "Object01"
Tri-mesh, Vertices: 168 Faces: 336
Vertex list:
Vertex 0: X: 101.499428 Y: -2.306819 Z: 0
Vertex 1: X: 98.385338 Y: -2.236042 Z: 11.624938
Vertex 2: X: 89.877487 Y: -2.04268 Z: 20.134983
Vertex 3: X: 78.255547 Y: -1.778542 Z: 23.249874
Vertex 4: X: 66.633614 Y: -1.514406 Z: 20.134981
Vertex 5: X: 58.125767 Y: -1.321046 Z: 11.624938
Vertex 6: X: 55.011677 Y: -1.250273 Z: 0.000004
Vertex 7: X: 58.125763 Y: -1.32105 Z: -11.624932
Vertex 8: X: 66.633606 Y: -1.514412 Z: -20.134977
Vertex 9: X: 78.255539 Y: -1.778549 Z: -23.249874
Vertex 10: X: 89.877472 Y: -2.042685 Z: -20.134989
Vertex 11: X: 98.38533 Y: -2.236045 Z: -11.62495
Vertex 12: X: 92.4487 Y: 41.96059 Z: -0.000006
Vertex 13: X: 89.612297 Y: 40.673206 Z: 11.624931
Vertex 14: X: 81.863098 Y: 37.156002 Z: 20.134977
Vertex 15: X: 71.277489 Y: 32.351406 Z: 23.24987
Vertex 16: X: 60.691883 Y: 27.546818 Z: 20.134977
Vertex 17: X: 52.94268 Y: 24.02961 Z: 11.624935
Vertex 18: X: 50.106274 Y: 22.742222 Z: 0
Vertex 19: X: 52.942677 Y: 24.029604 Z: -11.624936
Vertex 20: X: 60.691875 Y: 27.546808 Z: -20.134981
Vertex 21: X: 71.277481 Y: 32.351398 Z: -23.24988
Vertex 22: X: 81.863083 Y: 37.155991 Z: -20.134995
Vertex 23: X: 89.612289 Y: 40.673199 Z: -11.624957
Vertex 24: X: 65.087372 Y: 77.917183 Z: -0.000012
Vertex 25: X: 63.090431 Y: 75.526619 Z: 11.624927
Vertex 26: X: 57.634701 Y: 68.995476 Z: 20.134974
Vertex 27: X: 50.182037 Y: 60.073761 Z: 23.249866
Vertex 28: X: 42.72937 Y: 51.15205 Z: 20.134975
Vertex 29: X: 37.27364 Y: 44.620907 Z: 11.624931
Vertex 30: X: 35.276703 Y: 42.230335 Z: -0.000003
Vertex 31: X: 37.27364 Y: 44.620899 Z: -11.62494
Vertex 32: X: 42.729366 Y: 51.152039 Z: -20.134985
Vertex 33: X: 50.18203 Y: 60.073746 Z: -23.249884
Vertex 34: X: 57.634693 Y: 68.995461 Z: -20.134998
Vertex 35: X: 63.090427 Y: 75.526611 Z: -11.624962
Vertex 36: X: 24.834675 Y: 98.441322 Z: -0.000015
Vertex 37: X: 24.072725 Y: 95.421059 Z: 11.624924
Vertex 38: X: 21.991043 Y: 87.16954 Z: 20.134968
Vertex 39: X: 19.147409 Y: 75.897766 Z: 23.249863
Vertex 40: X: 16.303778 Y: 64.625992 Z: 20.134974
Vertex 41: X: 14.222095 Y: 56.374477 Z: 11.624929
Vertex 42: X: 13.460146 Y: 53.35421 Z: -0.000004
Vertex 43: X: 14.222095 Y: 56.37447 Z: -11.624941
Vertex 44: X: 16.303776 Y: 64.625977 Z: -20.134987
Vertex 45: X: 19.147408 Y: 75.897743 Z: -23.249887
Vertex 46: X: 21.991039 Y: 87.169518 Z: -20.135004
Vertex 47: X: 24.072723 Y: 95.421043 Z: -11.624965
Vertex 48: X: -20.336836 Y: 99.467918 Z: -0.000015
Vertex 49: X: -19.712885 Y: 96.416161 Z: 11.624924
Vertex 50: X: -18.008217 Y: 88.078598 Z: 20.134968
Vertex 51: X: -15.679599 Y: 76.68927 Z: 23.249863
Vertex 52: X: -13.350981 Y: 65.299942 Z: 20.134974
Vertex 53: X: -11.646314 Y: 56.962383 Z: 11.624929
Vertex 54: X: -11.022363 Y: 53.910618 Z: -0.000004
Vertex 55: X: -11.646314 Y: 56.962376 Z: -11.624941
 
Page 1
 
 
 
Vertex 56: X: -13.35098 Y: 65.299934 Z: -20.134987
Vertex 57: X: -15.679597 Y: 76.689247 Z: -23.249887
Vertex 58: X: -18.008215 Y: 88.078568 Z: -20.135004
Vertex 59: X: -19.712883 Y: 96.416145 Z: -11.624965
Vertex 60: X: -61.480385 Y: 80.793663 Z: -0.000012
Vertex 61: X: -59.594112 Y: 78.31485 Z: 11.624926
Vertex 62: X: -54.440727 Y: 71.542587 Z: 20.13497
Vertex 63: X: -47.40107 Y: 62.291512 Z: 23.249866
Vertex 64: X: -40.361412 Y: 53.040436 Z: 20.134975
Vertex 65: X: -35.208027 Y: 46.268181 Z: 11.624931
Vertex 66: X: -33.321754 Y: 43.789356 Z: -0.000003
Vertex 67: X: -35.208023 Y: 46.268173 Z: -11.62494
Vertex 68: X: -40.361408 Y: 53.040424 Z: -20.134985
Vertex 69: X: -47.401062 Y: 62.291496 Z: -23.249884
Vertex 70: X: -54.44072 Y: 71.542572 Z: -20.135
Vertex 71: X: -59.594109 Y: 78.314835 Z: -11.624962
Vertex 72: X: -90.446976 Y: 46.117218 Z: -0.000007
Vertex 73: X: -87.671989 Y: 44.702305 Z: 11.62493
Vertex 74: X: -80.090576 Y: 40.836685 Z: 20.134975
Vertex 75: X: -69.734169 Y: 35.556149 Z: 23.24987
Vertex 76: X: -59.377766 Y: 30.27561 Z: 20.134977
Vertex 77: X: -51.796352 Y: 26.40999 Z: 11.624935
Vertex 78: X: -49.021362 Y: 24.995071 Z: -0
Vertex 79: X: -51.796349 Y: 26.409985 Z: -11.624936
Vertex 80: X: -59.377758 Y: 30.275604 Z: -20.134983
Vertex 81: X: -69.734161 Y: 35.556137 Z: -23.24988
Vertex 82: X: -80.090561 Y: 40.836674 Z: -20.134995
Vertex 83: X: -87.671982 Y: 44.702297 Z: -11.624958
Vertex 84: X: -101.499428 Y: 2.306689 Z: -0
Vertex 85: X: -98.385338 Y: 2.23592 Z: 11.624937
Vertex 86: X: -89.877487 Y: 2.042571 Z: 20.134981
Vertex 87: X: -78.255547 Y: 1.778449 Z: 23.249874
Vertex 88: X: -66.633614 Y: 1.514327 Z: 20.134981
Vertex 89: X: -58.125767 Y: 1.320975 Z: 11.624938
Vertex 90: X: -55.011677 Y: 1.250203 Z: 0.000003
Vertex 91: X: -58.125763 Y: 1.320972 Z: -11.624932
Vertex 92: X: -66.633606 Y: 1.514321 Z: -20.134977
Vertex 93: X: -78.255539 Y: 1.778442 Z: -23.249874
Vertex 94: X: -89.877472 Y: 2.042564 Z: -20.134991
Vertex 95: X: -98.38533 Y: 2.235916 Z: -11.624951
Vertex 96: X: -92.448647 Y: -41.960709 Z: 0.000006
Vertex 97: X: -89.612244 Y: -40.673317 Z: 11.624944
Vertex 98: X: -81.863045 Y: -37.156101 Z: 20.134987
Vertex 99: X: -71.277443 Y: -32.351494 Z: 23.24988
Vertex 100: X: -60.691845 Y: -27.546888 Z: 20.134985
Vertex 101: X: -52.94265 Y: -24.029675 Z: 11.624942
Vertex 102: X: -50.106247 Y: -22.742285 Z: 0.000007
Vertex 103: X: -52.942646 Y: -24.029676 Z: -11.624929
Vertex 104: X: -60.691841 Y: -27.546892 Z: -20.134974
Vertex 105: X: -71.277435 Y: -32.351494 Z: -23.24987
Vertex 106: X: -81.863037 Y: -37.156101 Z: -20.134985
Vertex 107: X: -89.612236 Y: -40.673317 Z: -11.624945
Vertex 108: X: -65.087273 Y: -77.917267 Z: 0.000012
Vertex 109: X: -63.09034 Y: -75.526695 Z: 11.624949
Vertex 110: X: -57.634617 Y: -68.995544 Z: 20.134991
Vertex 111: X: -50.181961 Y: -60.073822 Z: 23.249884
Vertex 112: X: -42.729305 Y: -51.1521 Z: 20.134989
Vertex 113: X: -37.273586 Y: -44.620949 Z: 11.624946
Vertex 114: X: -35.276653 Y: -42.230381 Z: 0.00001
Vertex 115: X: -37.273582 Y: -44.620953 Z: -11.624926
Vertex 116: X: -42.729301 Y: -51.1521 Z: -20.134972
 
Page 2
 
 
 
Vertex 117: X: -50.181953 Y: -60.073822 Z: -23.249866
Vertex 118: X: -57.634609 Y: -68.995544 Z: -20.134981
Vertex 119: X: -63.090332 Y: -75.526695 Z: -11.62494
Vertex 120: X: -24.834549 Y: -98.441345 Z: 0.000015
Vertex 121: X: -24.072605 Y: -95.421074 Z: 11.624951
Vertex 122: X: -21.990931 Y: -87.169556 Z: 20.134996
Vertex 123: X: -19.147314 Y: -75.897774 Z: 23.249887
Vertex 124: X: -16.303696 Y: -64.625999 Z: 20.134991
Vertex 125: X: -14.222023 Y: -56.374493 Z: 11.624947
Vertex 126: X: -13.460078 Y: -53.354225 Z: 0.000011
Vertex 127: X: -14.222022 Y: -56.374493 Z: -11.624924
Vertex 128: X: -16.303694 Y: -64.625999 Z: -20.13497
Vertex 129: X: -19.14731 Y: -75.897781 Z: -23.249863
Vertex 130: X: -21.990929 Y: -87.169556 Z: -20.134975
Vertex 131: X: -24.072603 Y: -95.421074 Z: -11.624937
Vertex 132: X: 20.336964 Y: -99.467896 Z: 0.000015
Vertex 133: X: 19.713007 Y: -96.41613 Z: 11.624951
Vertex 134: X: 18.008329 Y: -88.07856 Z: 20.134996
Vertex 135: X: 15.679697 Y: -76.68924 Z: 23.249887
Vertex 136: X: 13.351064 Y: -65.299919 Z: 20.134991
Vertex 137: X: 11.646387 Y: -56.962364 Z: 11.624947
Vertex 138: X: 11.022431 Y: -53.910606 Z: 0.000011
Vertex 139: X: 11.646386 Y: -56.962364 Z: -11.624924
Vertex 140: X: 13.351063 Y: -65.299927 Z: -20.13497
Vertex 141: X: 15.679695 Y: -76.68924 Z: -23.249863
Vertex 142: X: 18.008327 Y: -88.07856 Z: -20.134975
Vertex 143: X: 19.713007 Y: -96.41613 Z: -11.624937
Vertex 144: X: 61.480488 Y: -80.793579 Z: 0.000012
Vertex 145: X: 59.594212 Y: -78.314766 Z: 11.624949
Vertex 146: X: 54.440815 Y: -71.542511 Z: 20.134993
Vertex 147: X: 47.401146 Y: -62.291443 Z: 23.249884
Vertex 148: X: 40.361477 Y: -53.040379 Z: 20.134989
Vertex 149: X: 35.208084 Y: -46.268131 Z: 11.624946
Vertex 150: X: 33.321812 Y: -43.789314 Z: 0.00001
Vertex 151: X: 35.208084 Y: -46.268131 Z: -11.624926
Vertex 152: X: 40.361473 Y: -53.040379 Z: -20.134972
Vertex 153: X: 47.401142 Y: -62.291443 Z: -23.249866
Vertex 154: X: 54.440811 Y: -71.542511 Z: -20.134977
Vertex 155: X: 59.594208 Y: -78.314766 Z: -11.624939
Vertex 156: X: 90.447037 Y: -46.117104 Z: 0.000007
Vertex 157: X: 87.67205 Y: -44.70219 Z: 11.624945
Vertex 158: X: 80.09063 Y: -40.836578 Z: 20.134987
Vertex 159: X: 69.734215 Y: -35.556053 Z: 23.24988
Vertex 160: X: 59.377804 Y: -30.27553 Z: 20.134987
Vertex 161: X: 51.796387 Y: -26.40992 Z: 11.624942
Vertex 162: X: 49.021393 Y: -24.99501 Z: 0.000007
Vertex 163: X: 51.796383 Y: -26.409922 Z: -11.624929
Vertex 164: X: 59.3778 Y: -30.275532 Z: -20.134974
Vertex 165: X: 69.734207 Y: -35.556053 Z: -23.24987
Vertex 166: X: 80.090614 Y: -40.836578 Z: -20.134983
Vertex 167: X: 87.672043 Y: -44.70219 Z: -11.624944
Face list:
Face 0: A:0 B:13 C:1 AB:0 BC:1 CA:1
Smoothing: 1
Face 1: A:0 B:12 C:13 AB:1 BC:1 CA:0
Smoothing: 1
Face 2: A:1 B:14 C:2 AB:0 BC:1 CA:1
Smoothing: 2
Face 3: A:1 B:13 C:14 AB:1 BC:1 CA:0
Smoothing: 2
Face 4: A:2 B:15 C:3 AB:0 BC:1 CA:1
 
Page 3
 
 
 
Smoothing: 3
Face 5: A:2 B:14 C:15 AB:1 BC:1 CA:0
Smoothing: 3
Face 6: A:3 B:16 C:4 AB:0 BC:1 CA:1
Smoothing: 4
Face 7: A:3 B:15 C:16 AB:1 BC:1 CA:0
Smoothing: 4
Face 8: A:4 B:17 C:5 AB:0 BC:1 CA:1
Smoothing: 5
Face 9: A:4 B:16 C:17 AB:1 BC:1 CA:0
Smoothing: 5
Face 10: A:5 B:18 C:6 AB:0 BC:1 CA:1
Smoothing: 6
Face 11: A:5 B:17 C:18 AB:1 BC:1 CA:0
Smoothing: 6
Face 12: A:6 B:19 C:7 AB:0 BC:1 CA:1
Smoothing: 7
Face 13: A:6 B:18 C:19 AB:1 BC:1 CA:0
Smoothing: 7
Face 14: A:7 B:20 C:8 AB:0 BC:1 CA:1
Smoothing: 8
Face 15: A:7 B:19 C:20 AB:1 BC:1 CA:0
Smoothing: 8
Face 16: A:8 B:21 C:9 AB:0 BC:1 CA:1
Smoothing: 9
Face 17: A:8 B:20 C:21 AB:1 BC:1 CA:0
Smoothing: 9
Face 18: A:9 B:22 C:10 AB:0 BC:1 CA:1
Smoothing: 10
Face 19: A:9 B:21 C:22 AB:1 BC:1 CA:0
Smoothing: 10
Face 20: A:10 B:23 C:11 AB:0 BC:1 CA:1
Smoothing: 11
Face 21: A:10 B:22 C:23 AB:1 BC:1 CA:0
Smoothing: 11
Face 22: A:11 B:12 C:0 AB:0 BC:1 CA:1
Smoothing: 12
Face 23: A:11 B:23 C:12 AB:1 BC:1 CA:0
Smoothing: 12
Face 24: A:12 B:25 C:13 AB:0 BC:1 CA:1
Smoothing: 13
Face 25: A:12 B:24 C:25 AB:1 BC:1 CA:0
Smoothing: 13
Face 26: A:13 B:26 C:14 AB:0 BC:1 CA:1
Smoothing: 14
Face 27: A:13 B:25 C:26 AB:1 BC:1 CA:0
Smoothing: 14
Face 28: A:14 B:27 C:15 AB:0 BC:1 CA:1
Smoothing: 15
Face 29: A:14 B:26 C:27 AB:1 BC:1 CA:0
Smoothing: 15
Face 30: A:15 B:28 C:16 AB:0 BC:1 CA:1
Smoothing: 16
Face 31: A:15 B:27 C:28 AB:1 BC:1 CA:0
Smoothing: 16
Face 32: A:16 B:29 C:17 AB:0 BC:1 CA:1
Smoothing: 17
Face 33: A:16 B:28 C:29 AB:1 BC:1 CA:0
Smoothing: 17
Face 34: A:17 B:30 C:18 AB:0 BC:1 CA:1
Smoothing: 18
 
Page 4
 
 
 
Face 35: A:17 B:29 C:30 AB:1 BC:1 CA:0
Smoothing: 18
Face 36: A:18 B:31 C:19 AB:0 BC:1 CA:1
Smoothing: 19
Face 37: A:18 B:30 C:31 AB:1 BC:1 CA:0
Smoothing: 19
Face 38: A:19 B:32 C:20 AB:0 BC:1 CA:1
Smoothing: 20
Face 39: A:19 B:31 C:32 AB:1 BC:1 CA:0
Smoothing: 20
Face 40: A:20 B:33 C:21 AB:0 BC:1 CA:1
Smoothing: 21
Face 41: A:20 B:32 C:33 AB:1 BC:1 CA:0
Smoothing: 21
Face 42: A:21 B:34 C:22 AB:0 BC:1 CA:1
Smoothing: 22
Face 43: A:21 B:33 C:34 AB:1 BC:1 CA:0
Smoothing: 22
Face 44: A:22 B:35 C:23 AB:0 BC:1 CA:1
Smoothing: 23
Face 45: A:22 B:34 C:35 AB:1 BC:1 CA:0
Smoothing: 23
Face 46: A:23 B:24 C:12 AB:0 BC:1 CA:1
Smoothing: 24
Face 47: A:23 B:35 C:24 AB:1 BC:1 CA:0
Smoothing: 24
Face 48: A:24 B:37 C:25 AB:0 BC:1 CA:1
Smoothing: 25
Face 49: A:24 B:36 C:37 AB:1 BC:1 CA:0
Smoothing: 25
Face 50: A:25 B:38 C:26 AB:0 BC:1 CA:1
Smoothing: 26
Face 51: A:25 B:37 C:38 AB:1 BC:1 CA:0
Smoothing: 26
Face 52: A:26 B:39 C:27 AB:0 BC:1 CA:1
Smoothing: 27
Face 53: A:26 B:38 C:39 AB:1 BC:1 CA:0
Smoothing: 27
Face 54: A:27 B:40 C:28 AB:0 BC:1 CA:1
Smoothing: 28
Face 55: A:27 B:39 C:40 AB:1 BC:1 CA:0
Smoothing: 28
Face 56: A:28 B:41 C:29 AB:0 BC:1 CA:1
Smoothing: 29
Face 57: A:28 B:40 C:41 AB:1 BC:1 CA:0
Smoothing: 29
Face 58: A:29 B:42 C:30 AB:0 BC:1 CA:1
Smoothing: 30
Face 59: A:29 B:41 C:42 AB:1 BC:1 CA:0
Smoothing: 30
Face 60: A:30 B:43 C:31 AB:0 BC:1 CA:1
Smoothing: 31
Face 61: A:30 B:42 C:43 AB:1 BC:1 CA:0
Smoothing: 31
Face 62: A:31 B:44 C:32 AB:0 BC:1 CA:1
Smoothing: 32
Face 63: A:31 B:43 C:44 AB:1 BC:1 CA:0
Smoothing: 32
Face 64: A:32 B:45 C:33 AB:0 BC:1 CA:1
Smoothing: 1
Face 65: A:32 B:44 C:45 AB:1 BC:1 CA:0
 
Page 5
 
 
 
Smoothing: 1
Face 66: A:33 B:46 C:34 AB:0 BC:1 CA:1
Smoothing: 2
Face 67: A:33 B:45 C:46 AB:1 BC:1 CA:0
Smoothing: 2
Face 68: A:34 B:47 C:35 AB:0 BC:1 CA:1
Smoothing: 3
Face 69: A:34 B:46 C:47 AB:1 BC:1 CA:0
Smoothing: 3
Face 70: A:35 B:36 C:24 AB:0 BC:1 CA:1
Smoothing: 4
Face 71: A:35 B:47 C:36 AB:1 BC:1 CA:0
Smoothing: 4
Face 72: A:36 B:49 C:37 AB:0 BC:1 CA:1
Smoothing: 5
Face 73: A:36 B:48 C:49 AB:1 BC:1 CA:0
Smoothing: 5
Face 74: A:37 B:50 C:38 AB:0 BC:1 CA:1
Smoothing: 6
Face 75: A:37 B:49 C:50 AB:1 BC:1 CA:0
Smoothing: 6
Face 76: A:38 B:51 C:39 AB:0 BC:1 CA:1
Smoothing: 7
Face 77: A:38 B:50 C:51 AB:1 BC:1 CA:0
Smoothing: 7
Face 78: A:39 B:52 C:40 AB:0 BC:1 CA:1
Smoothing: 8
Face 79: A:39 B:51 C:52 AB:1 BC:1 CA:0
Smoothing: 8
Face 80: A:40 B:53 C:41 AB:0 BC:1 CA:1
Smoothing: 9
Face 81: A:40 B:52 C:53 AB:1 BC:1 CA:0
Smoothing: 9
Face 82: A:41 B:54 C:42 AB:0 BC:1 CA:1
Smoothing: 10
Face 83: A:41 B:53 C:54 AB:1 BC:1 CA:0
Smoothing: 10
Face 84: A:42 B:55 C:43 AB:0 BC:1 CA:1
Smoothing: 11
Face 85: A:42 B:54 C:55 AB:1 BC:1 CA:0
Smoothing: 11
Face 86: A:43 B:56 C:44 AB:0 BC:1 CA:1
Smoothing: 12
Face 87: A:43 B:55 C:56 AB:1 BC:1 CA:0
Smoothing: 12
Face 88: A:44 B:57 C:45 AB:0 BC:1 CA:1
Smoothing: 13
Face 89: A:44 B:56 C:57 AB:1 BC:1 CA:0
Smoothing: 13
Face 90: A:45 B:58 C:46 AB:0 BC:1 CA:1
Smoothing: 14
Face 91: A:45 B:57 C:58 AB:1 BC:1 CA:0
Smoothing: 14
Face 92: A:46 B:59 C:47 AB:0 BC:1 CA:1
Smoothing: 15
Face 93: A:46 B:58 C:59 AB:1 BC:1 CA:0
Smoothing: 15
Face 94: A:47 B:48 C:36 AB:0 BC:1 CA:1
Smoothing: 16
Face 95: A:47 B:59 C:48 AB:1 BC:1 CA:0
Smoothing: 16
 
Page 6
 
 
 
Face 96: A:48 B:61 C:49 AB:0 BC:1 CA:1
Smoothing: 17
Face 97: A:48 B:60 C:61 AB:1 BC:1 CA:0
Smoothing: 17
Face 98: A:49 B:62 C:50 AB:0 BC:1 CA:1
Smoothing: 18
Face 99: A:49 B:61 C:62 AB:1 BC:1 CA:0
Smoothing: 18
Face 100: A:50 B:63 C:51 AB:0 BC:1 CA:1
Smoothing: 19
Face 101: A:50 B:62 C:63 AB:1 BC:1 CA:0
Smoothing: 19
Face 102: A:51 B:64 C:52 AB:0 BC:1 CA:1
Smoothing: 20
Face 103: A:51 B:63 C:64 AB:1 BC:1 CA:0
Smoothing: 20
Face 104: A:52 B:65 C:53 AB:0 BC:1 CA:1
Smoothing: 21
Face 105: A:52 B:64 C:65 AB:1 BC:1 CA:0
Smoothing: 21
Face 106: A:53 B:66 C:54 AB:0 BC:1 CA:1
Smoothing: 22
Face 107: A:53 B:65 C:66 AB:1 BC:1 CA:0
Smoothing: 22
Face 108: A:54 B:67 C:55 AB:0 BC:1 CA:1
Smoothing: 23
Face 109: A:54 B:66 C:67 AB:1 BC:1 CA:0
Smoothing: 23
Face 110: A:55 B:68 C:56 AB:0 BC:1 CA:1
Smoothing: 24
Face 111: A:55 B:67 C:68 AB:1 BC:1 CA:0
Smoothing: 24
Face 112: A:56 B:69 C:57 AB:0 BC:1 CA:1
Smoothing: 25
Face 113: A:56 B:68 C:69 AB:1 BC:1 CA:0
Smoothing: 25
Face 114: A:57 B:70 C:58 AB:0 BC:1 CA:1
Smoothing: 26
Face 115: A:57 B:69 C:70 AB:1 BC:1 CA:0
Smoothing: 26
Face 116: A:58 B:71 C:59 AB:0 BC:1 CA:1
Smoothing: 27
Face 117: A:58 B:70 C:71 AB:1 BC:1 CA:0
Smoothing: 27
Face 118: A:59 B:60 C:48 AB:0 BC:1 CA:1
Smoothing: 28
Face 119: A:59 B:71 C:60 AB:1 BC:1 CA:0
Smoothing: 28
Face 120: A:60 B:73 C:61 AB:0 BC:1 CA:1
Smoothing: 29
Face 121: A:60 B:72 C:73 AB:1 BC:1 CA:0
Smoothing: 29
Face 122: A:61 B:74 C:62 AB:0 BC:1 CA:1
Smoothing: 30
Face 123: A:61 B:73 C:74 AB:1 BC:1 CA:0
Smoothing: 30
Face 124: A:62 B:75 C:63 AB:0 BC:1 CA:1
Smoothing: 31
Face 125: A:62 B:74 C:75 AB:1 BC:1 CA:0
Smoothing: 31
Face 126: A:63 B:76 C:64 AB:0 BC:1 CA:1
 
Page 7
 
 
 
Smoothing: 32
Face 127: A:63 B:75 C:76 AB:1 BC:1 CA:0
Smoothing: 32
Face 128: A:64 B:77 C:65 AB:0 BC:1 CA:1
Smoothing: 1
Face 129: A:64 B:76 C:77 AB:1 BC:1 CA:0
Smoothing: 1
Face 130: A:65 B:78 C:66 AB:0 BC:1 CA:1
Smoothing: 2
Face 131: A:65 B:77 C:78 AB:1 BC:1 CA:0
Smoothing: 2
Face 132: A:66 B:79 C:67 AB:0 BC:1 CA:1
Smoothing: 3
Face 133: A:66 B:78 C:79 AB:1 BC:1 CA:0
Smoothing: 3
Face 134: A:67 B:80 C:68 AB:0 BC:1 CA:1
Smoothing: 4
Face 135: A:67 B:79 C:80 AB:1 BC:1 CA:0
Smoothing: 4
Face 136: A:68 B:81 C:69 AB:0 BC:1 CA:1
Smoothing: 5
Face 137: A:68 B:80 C:81 AB:1 BC:1 CA:0
Smoothing: 5
Face 138: A:69 B:82 C:70 AB:0 BC:1 CA:1
Smoothing: 6
Face 139: A:69 B:81 C:82 AB:1 BC:1 CA:0
Smoothing: 6
Face 140: A:70 B:83 C:71 AB:0 BC:1 CA:1
Smoothing: 7
Face 141: A:70 B:82 C:83 AB:1 BC:1 CA:0
Smoothing: 7
Face 142: A:71 B:72 C:60 AB:0 BC:1 CA:1
Smoothing: 8
Face 143: A:71 B:83 C:72 AB:1 BC:1 CA:0
Smoothing: 8
Face 144: A:72 B:85 C:73 AB:0 BC:1 CA:1
Smoothing: 9
Face 145: A:72 B:84 C:85 AB:1 BC:1 CA:0
Smoothing: 9
Face 146: A:73 B:86 C:74 AB:0 BC:1 CA:1
Smoothing: 10
Face 147: A:73 B:85 C:86 AB:1 BC:1 CA:0
Smoothing: 10
Face 148: A:74 B:87 C:75 AB:0 BC:1 CA:1
Smoothing: 11
Face 149: A:74 B:86 C:87 AB:1 BC:1 CA:0
Smoothing: 11
Face 150: A:75 B:88 C:76 AB:0 BC:1 CA:1
Smoothing: 12
Face 151: A:75 B:87 C:88 AB:1 BC:1 CA:0
Smoothing: 12
Face 152: A:76 B:89 C:77 AB:0 BC:1 CA:1
Smoothing: 13
Face 153: A:76 B:88 C:89 AB:1 BC:1 CA:0
Smoothing: 13
Face 154: A:77 B:90 C:78 AB:0 BC:1 CA:1
Smoothing: 14
Face 155: A:77 B:89 C:90 AB:1 BC:1 CA:0
Smoothing: 14
Face 156: A:78 B:91 C:79 AB:0 BC:1 CA:1
Smoothing: 15
 
Page 8
 
 
 
Face 157: A:78 B:90 C:91 AB:1 BC:1 CA:0
Smoothing: 15
Face 158: A:79 B:92 C:80 AB:0 BC:1 CA:1
Smoothing: 16
Face 159: A:79 B:91 C:92 AB:1 BC:1 CA:0
Smoothing: 16
Face 160: A:80 B:93 C:81 AB:0 BC:1 CA:1
Smoothing: 17
Face 161: A:80 B:92 C:93 AB:1 BC:1 CA:0
Smoothing: 17
Face 162: A:81 B:94 C:82 AB:0 BC:1 CA:1
Smoothing: 18
Face 163: A:81 B:93 C:94 AB:1 BC:1 CA:0
Smoothing: 18
Face 164: A:82 B:95 C:83 AB:0 BC:1 CA:1
Smoothing: 19
Face 165: A:82 B:94 C:95 AB:1 BC:1 CA:0
Smoothing: 19
Face 166: A:83 B:84 C:72 AB:0 BC:1 CA:1
Smoothing: 20
Face 167: A:83 B:95 C:84 AB:1 BC:1 CA:0
Smoothing: 20
Face 168: A:84 B:97 C:85 AB:0 BC:1 CA:1
Smoothing: 21
Face 169: A:84 B:96 C:97 AB:1 BC:1 CA:0
Smoothing: 21
Face 170: A:85 B:98 C:86 AB:0 BC:1 CA:1
Smoothing: 22
Face 171: A:85 B:97 C:98 AB:1 BC:1 CA:0
Smoothing: 22
Face 172: A:86 B:99 C:87 AB:0 BC:1 CA:1
Smoothing: 23
Face 173: A:86 B:98 C:99 AB:1 BC:1 CA:0
Smoothing: 23
Face 174: A:87 B:100 C:88 AB:0 BC:1 CA:1
Smoothing: 24
Face 175: A:87 B:99 C:100 AB:1 BC:1 CA:0
Smoothing: 24
Face 176: A:88 B:101 C:89 AB:0 BC:1 CA:1
Smoothing: 25
Face 177: A:88 B:100 C:101 AB:1 BC:1 CA:0
Smoothing: 25
Face 178: A:89 B:102 C:90 AB:0 BC:1 CA:1
Smoothing: 26
Face 179: A:89 B:101 C:102 AB:1 BC:1 CA:0
Smoothing: 26
Face 180: A:90 B:103 C:91 AB:0 BC:1 CA:1
Smoothing: 27
Face 181: A:90 B:102 C:103 AB:1 BC:1 CA:0
Smoothing: 27
Face 182: A:91 B:104 C:92 AB:0 BC:1 CA:1
Smoothing: 28
Face 183: A:91 B:103 C:104 AB:1 BC:1 CA:0
Smoothing: 28
Face 184: A:92 B:105 C:93 AB:0 BC:1 CA:1
Smoothing: 29
Face 185: A:92 B:104 C:105 AB:1 BC:1 CA:0
Smoothing: 29
Face 186: A:93 B:106 C:94 AB:0 BC:1 CA:1
Smoothing: 30
Face 187: A:93 B:105 C:106 AB:1 BC:1 CA:0
 
Page 9
 
 
 
Smoothing: 30
Face 188: A:94 B:107 C:95 AB:0 BC:1 CA:1
Smoothing: 31
Face 189: A:94 B:106 C:107 AB:1 BC:1 CA:0
Smoothing: 31
Face 190: A:95 B:96 C:84 AB:0 BC:1 CA:1
Smoothing: 32
Face 191: A:95 B:107 C:96 AB:1 BC:1 CA:0
Smoothing: 32
Face 192: A:96 B:109 C:97 AB:0 BC:1 CA:1
Smoothing: 1
Face 193: A:96 B:108 C:109 AB:1 BC:1 CA:0
Smoothing: 1
Face 194: A:97 B:110 C:98 AB:0 BC:1 CA:1
Smoothing: 2
Face 195: A:97 B:109 C:110 AB:1 BC:1 CA:0
Smoothing: 2
Face 196: A:98 B:111 C:99 AB:0 BC:1 CA:1
Smoothing: 3
Face 197: A:98 B:110 C:111 AB:1 BC:1 CA:0
Smoothing: 3
Face 198: A:99 B:112 C:100 AB:0 BC:1 CA:1
Smoothing: 4
Face 199: A:99 B:111 C:112 AB:1 BC:1 CA:0
Smoothing: 4
Face 200: A:100 B:113 C:101 AB:0 BC:1 CA:1
Smoothing: 5
Face 201: A:100 B:112 C:113 AB:1 BC:1 CA:0
Smoothing: 5
Face 202: A:101 B:114 C:102 AB:0 BC:1 CA:1
Smoothing: 6
Face 203: A:101 B:113 C:114 AB:1 BC:1 CA:0
Smoothing: 6
Face 204: A:102 B:115 C:103 AB:0 BC:1 CA:1
Smoothing: 7
Face 205: A:102 B:114 C:115 AB:1 BC:1 CA:0
Smoothing: 7
Face 206: A:103 B:116 C:104 AB:0 BC:1 CA:1
Smoothing: 8
Face 207: A:103 B:115 C:116 AB:1 BC:1 CA:0
Smoothing: 8
Face 208: A:104 B:117 C:105 AB:0 BC:1 CA:1
Smoothing: 9
Face 209: A:104 B:116 C:117 AB:1 BC:1 CA:0
Smoothing: 9
Face 210: A:105 B:118 C:106 AB:0 BC:1 CA:1
Smoothing: 10
Face 211: A:105 B:117 C:118 AB:1 BC:1 CA:0
Smoothing: 10
Face 212: A:106 B:119 C:107 AB:0 BC:1 CA:1
Smoothing: 11
Face 213: A:106 B:118 C:119 AB:1 BC:1 CA:0
Smoothing: 11
Face 214: A:107 B:108 C:96 AB:0 BC:1 CA:1
Smoothing: 12
Face 215: A:107 B:119 C:108 AB:1 BC:1 CA:0
Smoothing: 12
Face 216: A:108 B:121 C:109 AB:0 BC:1 CA:1
Smoothing: 13
Face 217: A:108 B:120 C:121 AB:1 BC:1 CA:0
Smoothing: 13
 
Page 10
 
 
 
Face 218: A:109 B:122 C:110 AB:0 BC:1 CA:1
Smoothing: 14
Face 219: A:109 B:121 C:122 AB:1 BC:1 CA:0
Smoothing: 14
Face 220: A:110 B:123 C:111 AB:0 BC:1 CA:1
Smoothing: 15
Face 221: A:110 B:122 C:123 AB:1 BC:1 CA:0
Smoothing: 15
Face 222: A:111 B:124 C:112 AB:0 BC:1 CA:1
Smoothing: 16
Face 223: A:111 B:123 C:124 AB:1 BC:1 CA:0
Smoothing: 16
Face 224: A:112 B:125 C:113 AB:0 BC:1 CA:1
Smoothing: 17
Face 225: A:112 B:124 C:125 AB:1 BC:1 CA:0
Smoothing: 17
Face 226: A:113 B:126 C:114 AB:0 BC:1 CA:1
Smoothing: 18
Face 227: A:113 B:125 C:126 AB:1 BC:1 CA:0
Smoothing: 18
Face 228: A:114 B:127 C:115 AB:0 BC:1 CA:1
Smoothing: 19
Face 229: A:114 B:126 C:127 AB:1 BC:1 CA:0
Smoothing: 19
Face 230: A:115 B:128 C:116 AB:0 BC:1 CA:1
Smoothing: 20
Face 231: A:115 B:127 C:128 AB:1 BC:1 CA:0
Smoothing: 20
Face 232: A:116 B:129 C:117 AB:0 BC:1 CA:1
Smoothing: 21
Face 233: A:116 B:128 C:129 AB:1 BC:1 CA:0
Smoothing: 21
Face 234: A:117 B:130 C:118 AB:0 BC:1 CA:1
Smoothing: 22
Face 235: A:117 B:129 C:130 AB:1 BC:1 CA:0
Smoothing: 22
Face 236: A:118 B:131 C:119 AB:0 BC:1 CA:1
Smoothing: 23
Face 237: A:118 B:130 C:131 AB:1 BC:1 CA:0
Smoothing: 23
Face 238: A:119 B:120 C:108 AB:0 BC:1 CA:1
Smoothing: 24
Face 239: A:119 B:131 C:120 AB:1 BC:1 CA:0
Smoothing: 24
Face 240: A:120 B:133 C:121 AB:0 BC:1 CA:1
Smoothing: 25
Face 241: A:120 B:132 C:133 AB:1 BC:1 CA:0
Smoothing: 25
Face 242: A:121 B:134 C:122 AB:0 BC:1 CA:1
Smoothing: 26
Face 243: A:121 B:133 C:134 AB:1 BC:1 CA:0
Smoothing: 26
Face 244: A:122 B:135 C:123 AB:0 BC:1 CA:1
Smoothing: 27
Face 245: A:122 B:134 C:135 AB:1 BC:1 CA:0
Smoothing: 27
Face 246: A:123 B:136 C:124 AB:0 BC:1 CA:1
Smoothing: 28
Face 247: A:123 B:135 C:136 AB:1 BC:1 CA:0
Smoothing: 28
Face 248: A:124 B:137 C:125 AB:0 BC:1 CA:1
 
Page 11
 
 
 
Smoothing: 29
Face 249: A:124 B:136 C:137 AB:1 BC:1 CA:0
Smoothing: 29
Face 250: A:125 B:138 C:126 AB:0 BC:1 CA:1
Smoothing: 30
Face 251: A:125 B:137 C:138 AB:1 BC:1 CA:0
Smoothing: 30
Face 252: A:126 B:139 C:127 AB:0 BC:1 CA:1
Smoothing: 31
Face 253: A:126 B:138 C:139 AB:1 BC:1 CA:0
Smoothing: 31
Face 254: A:127 B:140 C:128 AB:0 BC:1 CA:1
Smoothing: 32
Face 255: A:127 B:139 C:140 AB:1 BC:1 CA:0
Smoothing: 32
Face 256: A:128 B:141 C:129 AB:0 BC:1 CA:1
Smoothing: 1
Face 257: A:128 B:140 C:141 AB:1 BC:1 CA:0
Smoothing: 1
Face 258: A:129 B:142 C:130 AB:0 BC:1 CA:1
Smoothing: 2
Face 259: A:129 B:141 C:142 AB:1 BC:1 CA:0
Smoothing: 2
Face 260: A:130 B:143 C:131 AB:0 BC:1 CA:1
Smoothing: 3
Face 261: A:130 B:142 C:143 AB:1 BC:1 CA:0
Smoothing: 3
Face 262: A:131 B:132 C:120 AB:0 BC:1 CA:1
Smoothing: 4
Face 263: A:131 B:143 C:132 AB:1 BC:1 CA:0
Smoothing: 4
Face 264: A:132 B:145 C:133 AB:0 BC:1 CA:1
Smoothing: 5
Face 265: A:132 B:144 C:145 AB:1 BC:1 CA:0
Smoothing: 5
Face 266: A:133 B:146 C:134 AB:0 BC:1 CA:1
Smoothing: 6
Face 267: A:133 B:145 C:146 AB:1 BC:1 CA:0
Smoothing: 6
Face 268: A:134 B:147 C:135 AB:0 BC:1 CA:1
Smoothing: 7
Face 269: A:134 B:146 C:147 AB:1 BC:1 CA:0
Smoothing: 7
Face 270: A:135 B:148 C:136 AB:0 BC:1 CA:1
Smoothing: 8
Face 271: A:135 B:147 C:148 AB:1 BC:1 CA:0
Smoothing: 8
Face 272: A:136 B:149 C:137 AB:0 BC:1 CA:1
Smoothing: 9
Face 273: A:136 B:148 C:149 AB:1 BC:1 CA:0
Smoothing: 9
Face 274: A:137 B:150 C:138 AB:0 BC:1 CA:1
Smoothing: 10
Face 275: A:137 B:149 C:150 AB:1 BC:1 CA:0
Smoothing: 10
Face 276: A:138 B:151 C:139 AB:0 BC:1 CA:1
Smoothing: 11
Face 277: A:138 B:150 C:151 AB:1 BC:1 CA:0
Smoothing: 11
Face 278: A:139 B:152 C:140 AB:0 BC:1 CA:1
Smoothing: 12
 
Page 12
 
 
 
Face 279: A:139 B:151 C:152 AB:1 BC:1 CA:0
Smoothing: 12
Face 280: A:140 B:153 C:141 AB:0 BC:1 CA:1
Smoothing: 13
Face 281: A:140 B:152 C:153 AB:1 BC:1 CA:0
Smoothing: 13
Face 282: A:141 B:154 C:142 AB:0 BC:1 CA:1
Smoothing: 14
Face 283: A:141 B:153 C:154 AB:1 BC:1 CA:0
Smoothing: 14
Face 284: A:142 B:155 C:143 AB:0 BC:1 CA:1
Smoothing: 15
Face 285: A:142 B:154 C:155 AB:1 BC:1 CA:0
Smoothing: 15
Face 286: A:143 B:144 C:132 AB:0 BC:1 CA:1
Smoothing: 16
Face 287: A:143 B:155 C:144 AB:1 BC:1 CA:0
Smoothing: 16
Face 288: A:144 B:157 C:145 AB:0 BC:1 CA:1
Smoothing: 17
Face 289: A:144 B:156 C:157 AB:1 BC:1 CA:0
Smoothing: 17
Face 290: A:145 B:158 C:146 AB:0 BC:1 CA:1
Smoothing: 18
Face 291: A:145 B:157 C:158 AB:1 BC:1 CA:0
Smoothing: 18
Face 292: A:146 B:159 C:147 AB:0 BC:1 CA:1
Smoothing: 19
Face 293: A:146 B:158 C:159 AB:1 BC:1 CA:0
Smoothing: 19
Face 294: A:147 B:160 C:148 AB:0 BC:1 CA:1
Smoothing: 20
Face 295: A:147 B:159 C:160 AB:1 BC:1 CA:0
Smoothing: 20
Face 296: A:148 B:161 C:149 AB:0 BC:1 CA:1
Smoothing: 21
Face 297: A:148 B:160 C:161 AB:1 BC:1 CA:0
Smoothing: 21
Face 298: A:149 B:162 C:150 AB:0 BC:1 CA:1
Smoothing: 22
Face 299: A:149 B:161 C:162 AB:1 BC:1 CA:0
Smoothing: 22
Face 300: A:150 B:163 C:151 AB:0 BC:1 CA:1
Smoothing: 23
Face 301: A:150 B:162 C:163 AB:1 BC:1 CA:0
Smoothing: 23
Face 302: A:151 B:164 C:152 AB:0 BC:1 CA:1
Smoothing: 24
Face 303: A:151 B:163 C:164 AB:1 BC:1 CA:0
Smoothing: 24
Face 304: A:152 B:165 C:153 AB:0 BC:1 CA:1
Smoothing: 25
Face 305: A:152 B:164 C:165 AB:1 BC:1 CA:0
Smoothing: 25
Face 306: A:153 B:166 C:154 AB:0 BC:1 CA:1
Smoothing: 26
Face 307: A:153 B:165 C:166 AB:1 BC:1 CA:0
Smoothing: 26
Face 308: A:154 B:167 C:155 AB:0 BC:1 CA:1
Smoothing: 27
Face 309: A:154 B:166 C:167 AB:1 BC:1 CA:0
 
Page 13
 
 
 
Smoothing: 27
Face 310: A:155 B:156 C:144 AB:0 BC:1 CA:1
Smoothing: 28
Face 311: A:155 B:167 C:156 AB:1 BC:1 CA:0
Smoothing: 28
Face 312: A:156 B:1 C:157 AB:0 BC:1 CA:1
Smoothing: 29
Face 313: A:156 B:0 C:1 AB:1 BC:1 CA:0
Smoothing: 29
Face 314: A:157 B:2 C:158 AB:0 BC:1 CA:1
Smoothing: 30
Face 315: A:157 B:1 C:2 AB:1 BC:1 CA:0
Smoothing: 30
Face 316: A:158 B:3 C:159 AB:0 BC:1 CA:1
Smoothing: 31
Face 317: A:158 B:2 C:3 AB:1 BC:1 CA:0
Smoothing: 31
Face 318: A:159 B:4 C:160 AB:0 BC:1 CA:1
Smoothing: 32
Face 319: A:159 B:3 C:4 AB:1 BC:1 CA:0
Smoothing: 32
Face 320: A:160 B:5 C:161 AB:0 BC:1 CA:1
Smoothing: 1
Face 321: A:160 B:4 C:5 AB:1 BC:1 CA:0
Smoothing: 1
Face 322: A:161 B:6 C:162 AB:0 BC:1 CA:1
Smoothing: 2
Face 323: A:161 B:5 C:6 AB:1 BC:1 CA:0
Smoothing: 2
Face 324: A:162 B:7 C:163 AB:0 BC:1 CA:1
Smoothing: 3
Face 325: A:162 B:6 C:7 AB:1 BC:1 CA:0
Smoothing: 3
Face 326: A:163 B:8 C:164 AB:0 BC:1 CA:1
Smoothing: 4
Face 327: A:163 B:7 C:8 AB:1 BC:1 CA:0
Smoothing: 4
Face 328: A:164 B:9 C:165 AB:0 BC:1 CA:1
Smoothing: 5
Face 329: A:164 B:8 C:9 AB:1 BC:1 CA:0
Smoothing: 5
Face 330: A:165 B:10 C:166 AB:0 BC:1 CA:1
Smoothing: 6
Face 331: A:165 B:9 C:10 AB:1 BC:1 CA:0
Smoothing: 6
Face 332: A:166 B:11 C:167 AB:0 BC:1 CA:1
Smoothing: 7
Face 333: A:166 B:10 C:11 AB:1 BC:1 CA:0
Smoothing: 7
Face 334: A:167 B:0 C:156 AB:0 BC:1 CA:1
Smoothing: 8
Face 335: A:167 B:11 C:0 AB:1 BC:1 CA:0
Smoothing: 8
 
 
 
 
 
 
 
 
 
Page 14
 
 
 
/programs/demos/view3ds/asc_objects/box.asc
0,0 → 1,38
Ambient light color: Red=0.3 Green=0.3 Blue=0.3
 
Named Object: "Box01"
Tri-mesh, Vertices: 8 Faces: 12
Vertex list:
Vertex 0: X: -34.615379 Y: -21.005919 Z: 0.000000
Vertex 1: X: 42.899406 Y: -21.005919 Z: 0.000000
Vertex 2: X: -34.615379 Y: 54.142014 Z: 0.000000
Vertex 3: X: 42.899406 Y: 54.142014 Z: 0.000000
Vertex 4: X: -34.615379 Y: -21.005919 Z: 66.272186
Vertex 5: X: 42.899406 Y: -21.005919 Z: 66.272186
Vertex 6: X: -34.615379 Y: 54.142014 Z: 66.272186
Vertex 7: X: 42.899406 Y: 54.142014 Z: 66.272186
Face list:
Face 0: A: 0 B: 2 C: 3 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 1: A: 3 B: 1 C: 0 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 2: A: 4 B: 5 C: 7 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 3: A: 7 B: 6 C: 4 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 4: A: 0 B: 1 C: 5 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 5: A: 5 B: 4 C: 0 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 6: A: 1 B: 3 C: 7 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 7: A: 7 B: 5 C: 1 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 8: A: 3 B: 2 C: 6 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 9: A: 6 B: 7 C: 3 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 10: A: 2 B: 0 C: 4 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
Face 11: A: 4 B: 6 C: 2 AB:1 BC:1 CA:1
Material:"r0g0b255a255"
/programs/demos/view3ds/b_procs.inc
0,0 → 1,1336
;init_envmap_cub2:
; mov esi,envmap
; mov edi,envmap_cub ;take cubic env. map from
; xor eax,eax ;spherical env. map
; @@:
; add esi,eax
; movsd
; dec edi
; dec esi
; add esi,511*3
; add eax,3
; cmp eax,511*3
; jl @b
;ret
init_envmap_cub: ; create 512x512 env map
.temp equ word [ebp-2]
push ebp
mov ebp,esp
sub esp,2
mov edi,envmap_cub
fninit
 
mov cx,-256
.ie_hor:
mov .temp,cx
fild .temp
fabs
; fmul st,st0
; fsqrt
mov .temp,255
fisubr .temp
fmul [env_const]
fistp .temp
mov ax,.temp
 
or ax,ax
jge .ie_ok1
xor ax,ax
jmp .ie_ok2
.ie_ok1:
cmp ax,255
jle .ie_ok2
mov ax,255
.ie_ok2:
stosb
stosb
stosb
 
inc cx
cmp cx,256
jne .ie_hor
 
mov esp,ebp
pop ebp
ret
 
calc_one_col:
; procedure don't save registers !!!
; in - st - dot_product
; stack - other parameters
; out - eax - 0x00rrggbb
.dot_prd equ dword[ebp+4] ; dot product - cos x - not now
.min_col_r equ [ebp+8] ; minimum color - ambient
.min_col_g equ word[ebp+10]
.min_col_b equ word[ebp+12]
.max_col_r equ [ebp+14] ; maximum color - specular
.max_col_g equ word[ebp+16]
.max_col_b equ word[ebp+18]
.org_col_r equ [ebp+20] ; orginal color - diffuse
.org_col_g equ word[ebp+22]
.org_col_b equ word[ebp+24]
.n equ word[ebp+26] ; shines - not implemented
.temp equ word[ebp-2]
.color_sum_r equ [ebp-6]
.color_sum_g equ [ebp-10]
.color_sum_b equ [ebp-14]
; color = ambient+cos(x)*diffuse+(cos(x)^n)*specular
mov ebp,esp
sub esp,14
 
 
mov ax,.min_col_r
add ax,.max_col_r
add ax,.org_col_r
cwde
mov .color_sum_r,eax
 
mov ax,.min_col_g
add ax,.max_col_g
add ax,.org_col_g
cwde
mov .color_sum_g,eax
 
mov ax,.min_col_b
add ax,.max_col_b
add ax,.org_col_b
cwde
mov .color_sum_b,eax
if 0
 
 
movq xmm0,.min_col_r
movq xmm1,.max_col_r
movq xmm2,.org_col_r
packuswb xmm0,[the_zero]
packuswb xmm1,[the_zero]
packuswb xmm2,[the_zero]
punpcklbw xmm0,xmm1
punpcklbw xmm2,[the_zero]
packusdw xmm2,[the_zero]
cvtdq2ps xmm0,xmm0
cvtdq2ps xmm1,xmm1
cvtdq2ps xmm2,xmm2
haddps xmm0,xmm0
haddps xmm1,xmm1
haddps xmm2,xmm2
haddps xmm0,xmm0
haddps xmm1,xmm1
haddps xmm2,xmm2
 
cvtss2si eax,xmm0
cvtss2si ebx,xmm1
cvtss2si ecx,xmm2
mov .color_sum_r,eax
mov .color_sum_g,ebx
mov .color_sum_b,ecx
 
 
end if
 
; fld .dot_prd
; fild .n
; fxch st1
; fabs
; fyl2x ;
; f2xm1
; fld1
; faddp ; st = dot_product ^ n
 
fld st ; copy dot pr
fmul st,st0
fmul st,st0
fmul st,st0
cmp .n,255 ; .n = 255 -> spot light
jne @f
fmul st,st0
fmul st,st0
fmul st,st0
@@:
fld st ; st0=st1=dot_pr^n, st2=dot_pr
fimul .max_col_b
fild .org_col_b
fmul st,st3
faddp ; st0=first piece of col, st1=dot_pr^n..
fiadd .min_col_b
fimul .max_col_b
fidiv dword .color_sum_b
fistp .temp
movzx eax,.temp
shl eax,16
 
fld st
fimul .max_col_g
fild .org_col_g
fmul st,st3
faddp
fiadd .min_col_g
fimul .max_col_g
fidiv dword .color_sum_g
fistp .temp
mov ax,.temp
mov ah,al
shl eax,8
 
fimul word .max_col_r
fild word .org_col_r
fmulp st2,st
faddp
fiadd word .min_col_r
fimul word .max_col_r
fidiv dword .color_sum_r
fistp .temp
mov ax,.temp ;eax - 0xbbgg00rr
; mov ah,al
ror eax,16
xchg al,ah ; eax - 0x00rrggbb
mov esp,ebp
ret 24
 
calc_bumpmap: ; calculate random bumpmap
;--------------in edi _ pointer to TEX_X x TEX_Y bumpmap
 
push edi
 
cmp [bumps_flag],0
je .random_bump_map
; else bumps according to texture
mov esi,texmap
mov ecx,TEXTURE_SIZE
@@:
movzx ax,byte[esi]
movzx bx,byte[esi+1]
movzx dx,byte[esi+2]
add ax,bx
add ax,dx
cwd
div [i3]
stosb
add esi,3
loop @b
jmp .blur_map
; push ecx
; mov eax,0x88888888
; mov ecx,16/4
; rep stosd
; mov eax,0xffffffff
; mov ecx,16/4
; rep stosd
; pop ecx
; loop @b
.random_bump_map:
 
mov ecx,TEXTURE_SIZE
@@:
push ecx
xor ecx,ecx
mov edx,255
call random
stosb
pop ecx
loop @b
 
.blur_map:
pop edi
movzx ecx,[bumps_deep_flag]
inc cx
.blur:
xor esi,esi
mov edx,TEXTURE_SIZE
xor eax,eax
xor ebx,ebx
@@:
mov ebp,esi
dec ebp
and ebp,TEXTURE_SIZE
mov al,byte[ebp+edi]
 
mov ebp,esi
inc ebp
and ebp,TEXTURE_SIZE
mov bl,byte[ebp+edi]
add eax,ebx
 
mov ebp,esi
sub ebp,TEX_X
and ebp,TEXTURE_SIZE
mov bl,byte[ebp+edi]
add eax,ebx
 
mov ebp,esi
add ebp,TEX_X
and ebp,TEXTURE_SIZE
mov bl,byte[ebp+edi]
add eax,ebx
 
shr eax,2
mov byte[esi+edi],al
 
inc esi
dec edx
jnz @b
 
loop .blur
ret
random:
; in - ecx - min
; edx - max
; out - eax - random number
mov bx,[rand_seed]
add bx,0x9248
ror bx,3
mov [rand_seed],bx
 
mov ax,dx
sub ax,cx
mul bx
mov ax,dx
add ax,cx
cwde
ret
 
optimize_object1: ; setting point (0,0,0) in center of object
; recalculate all coords , scale object,
;the coords in <-1.0,1.0>
;in : real_points - table filled of real float dd coordinates (x,y,z), end mark dd -1
; _ global variable
; points_count_var - dw integer variable with exactly points count
; - global variable
; SIZE_X, SIZE_Y must be defined
 
.max equ dword[ebp-4]
.min equ dword[ebp-8]
.maxxx equ dword[ebp-12]
.center equ dword[ebp-16]
 
mov ebp,esp
sub esp,16
fninit
mov .maxxx,0
mov ecx,3
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 edx,[points_count_var]
fld dword[edi+ebx]
fst .max
fstp .min
add edi,12
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
fstsw ax
sahf
jbe @f ; jmp less equal
fstp .max ; new max_x,y,z
jmp .end_coords
@@:
fcom .min ; min_x,y,z
fstsw ax
sahf
jnbe @f ; jmp greater
fst .min ; new min_x
@@:
ffree st
.end_coords:
add edi,12
; cmp dword[edi],-1 ; cmp with end mark
dec edx
jnz .next_coord
; ok after this we found max_coord and min_coord
fld .max ; find center point
fadd .min
fld1
fld1
faddp
fdivp st1,st ; st0 - center coord
fstp .center
 
fld .max
fsub .center ; st = .max - .center
fcom .maxxx ; maximum of all .max
fstsw ax
sahf
jbe @f ; jmp lower
fst .maxxx ; new maxx
@@:
ffree st
mov edi,[points_ptr]
mov edx,[points_count_var] ; substraction all coords - center point
@@:
fld dword[edi+ebx]
fsub .center
fstp dword[edi+ebx]
add edi,12
; cmp dword[edi],-1
; jne @b
dec edx
jnz @b
 
add ebx,4 ; ebx - x,y,z cooficientes in list real_points
dec ecx
jnz .next_c
 
fld .maxxx
mov edi,[points_ptr] ; create all coords in <-1.0,1.0>
mov ecx,[points_count_var]
@@:
fld dword[edi]
fdiv .maxxx
fstp dword[edi]
fld dword[edi+4]
fdiv .maxxx
fstp dword[edi+4]
fld dword[edi+8]
fdiv .maxxx
fstp dword[edi+8]
add edi,12
loop @b
; cmp dword[edi],-1
 
; jne @b
 
mov esp,ebp
ret
 
generate_object: ; generate node
.N equ 32
.x equ word[ebp-2]
.Ndiv2 equ word[ebp-10]
.MthickSqr equ dword[ebp-14] ; diameter^2
.temp equ dword[ebp-18] ; variable for x <-1;1>
.Hthick equ dword[ebp-22]
.cos_temp equ dword[ebp-26]
.next_const equ dword[ebp-30]
.a equ dword[ebp-34]
.Pi2 equ ebp-38
 
 
 
mov ebp,esp
sub esp,42
 
mov .Ndiv2,.N/2
fninit
fldpi
fadd st,st
fst dword[.Pi2]
fidiv .Ndiv2
fst .a ; .Ndiv2*.a=2Pi => .a=2pi/.Ndiv2
 
fld [.Mthick] ; inside diameter, (outside daiameter = 1)
fmul st,st0
fstp .MthickSqr
fld1
 
fsub [.Mthick]
 
fst .Hthick ; Hthick = 1 - Mthick
fld st
fadd st,st
faddp
fstp .next_const ; next_const = Hthick * 3
 
 
;init triangles list
mov edi,[triangles_ptr]
 
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:
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,8
 
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 eax ; border of wave
dec ebx
dec ecx
dec edx
 
stosd ; first border
inc eax
stosd
mov dword[edi],edx
add edi,4
 
mov dword[edi],edx
add edi,4
stosd
inc edx
mov dword[edi],edx
 
mov dword[edi+4],ebx ; second border
mov dword[edi+8],ecx
inc ebx
mov dword[edi+12],ebx
 
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 esi
cmp esi,.N
jne .again_tri
 
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
 
; init real points list
mov .x,-(.N/2)
mov edi,[points_ptr]
lea esi,[edi+(12*(.N+1))]
mov eax,[points_ptr]
mov ebx,eax
add eax,2*12*(.N+1) ;---
add ebx,3*12*(.N+1) ;---
mov [points_count_var],0
 
 
.R_P4 equ edi+(4*12*(.N+1))
.R_P5 equ edi+(5*12*(.N+1))
.R_P6 equ edi+(6*12*(.N+1))
.R_P7 equ edi+(7*12*(.N+1))
 
.R_P8 equ edi+(8*12*(.N+1))
.R_P9 equ edi+(9*12*(.N+1))
.R_P10 equ edi+(10*12*(.N+1))
.R_P11 equ edi+(11*12*(.N+1))
 
.R_P12 equ edi+(12*12*(.N+1))
.R_P13 equ edi+(13*12*(.N+1))
.R_P14 equ edi+(14*12*(.N+1))
.R_P15 equ edi+(15*12*(.N+1))
 
@@:
; x coordinate
fild .x
fld st
;; fmul .a ; st = <-2pi;2pi> when mul .a
fidiv .Ndiv2
fst .temp ; temporary x in <-1.0;1.0>
 
fst dword[edi] ;x coordinate of point
fst dword[esi]
fst dword[eax] ;--
 
 
fst dword[.R_P4]
fst dword[.R_P5]
fst dword[.R_P6]
fst dword[.R_P7]
 
fst dword[.R_P8]
fst dword[.R_P9]
fst dword[.R_P10]
fst dword[.R_P11]
 
fst dword[.R_P12]
fst dword[.R_P13]
fst dword[.R_P14]
fst dword[.R_P15]
 
fstp dword[ebx] ;pop
;*******y coord dword[offset + 4]
fmul .a ; st = <-2pi;2pi>
fsincos
fmul .next_const
fst dword[edi+4] ; y coordinate of point
fst dword[esi+4]
fst dword[.R_P4+4]
fst dword[.R_P5+4]
fld .Hthick
faddp
fst dword[.R_P6+4]
fst dword[.R_P7+4]
fst dword[eax+4]
fst dword[ebx+4]
 
fchs
fst dword[.R_P10+4]
fst dword[.R_P11+4]
fst dword[.R_P14+4]
fst dword[.R_P15+4]
fadd .Hthick
fadd .Hthick
fst dword[.R_P8+4]
fst dword[.R_P9+4]
fst dword[.R_P12+4]
fstp dword[.R_P13+4]
 
 
fmul .Hthick
fmul .next_const
fstp .cos_temp ; cos_temp = Hthick^2 * 3
 
;***************z coord
fld .temp
fld st
fmul st,st0 ; z coords
fchs
fld1
faddp
fabs
fsqrt
; fld st
; fsub
fld st
fsub .cos_temp
fst dword[esi+8]
fstp dword[eax+8] ;--
fld st
fadd .cos_temp
fst dword[.R_P9+8]
fstp dword[.R_P10+8]
fchs
fld st
fsub .cos_temp
fst dword[.R_P6+8]
fstp dword[.R_P5+8]
fadd .cos_temp
fst dword[.R_P13+8]
fstp dword[.R_P14+8]
 
fmul [.Mthick]
fmul st,st0
fchs
fld .MthickSqr
faddp
fabs
fsqrt
fld st
fsub .cos_temp
fst dword[edi+8] ; z coordinate
fstp dword[ebx+8] ;--
fld st
fadd .cos_temp
fst dword[.R_P8+8]
fstp dword[.R_P11+8]
fchs
fld st
fsub .cos_temp
fst dword[.R_P7+8]
fstp dword[.R_P4+8]
fadd .cos_temp
fst dword[.R_P12+8]
fstp dword[.R_P15+8]
 
add edi,12
add esi,12
add eax,12 ;--
add ebx,12 ;---
add [points_count_var],24 ;16
inc .x
cmp .x,.N/2
jng @b
; mov dword[esi],-1 ; <-- end mark
mov [culling_flag],0
mov esp,ebp
ret
.Mthick dd 0.85 ; size-thickness
 
make_random_lights:
.temp1 equ ebp-4
.temp2 equ ebp-8 ; - light vector generate variables
.temp3 equ ebp-12
.max equ 800
RDTSC
mov [rand_seed],ax
push ebp
mov ebp,esp
sub esp,12
mov edi,lights
fninit
mov dword[.temp2],.max
mov dword[.temp3],.max/2
 
.again:
xor esi,esi
@@:
mov edx,.max
xor ecx,ecx
call random
sub eax,.max/2
mov dword[.temp1],eax
fild dword[.temp1]
fidiv dword[.temp3]
fstp dword[edi+esi*4]
inc esi
cmp esi,2
jne @b
 
.max1 equ 1000
mov dword[.temp2],.max1/2
mov edx,.max1
xor ecx,ecx
call random
mov dword[.temp1],eax
fild dword[.temp1]
fchs
fidiv dword[.temp2]
fstp dword[edi+8]
 
xor esi,esi
@@:
mov ecx,220 ; max colors and shine , ecx = 200 - more bright shading
mov edx,255
call random
mov byte[edi+18+esi],al
inc esi
cmp esi,4
jne @b
 
 
xor esi,esi
@@:
mov ecx,100 ; orginal colors
movzx edx,byte[edi+18+esi]
call random
mov byte[edi+12+esi],al
inc esi
cmp esi,3
jne @b
 
xor esi,esi
@@:
mov ecx,1 ; min cols
movzx edx,byte[edi+12+esi]
call random
mov byte[edi+15+esi],al
inc esi
cmp esi,3
jne @b
 
add edi,LIGHT_SIZE ;22
cmp edi,lightsend ; see file View3ds,asm
jne .again
 
mov esp,ebp
pop ebp
ret
 
generate_texture2:
.const equ 32
mov edi,texmap
xor bx,bx
.next_line:
xor dx,dx
.next2stripes:
mov eax,-1
mov ecx,(TEX_X/.const)*3/4
rep stosd
mov eax,0x00ff0000
mov ecx,(TEX_X/.const)
@@:
stosd
dec edi
loop @b
inc dx
cmp dx,.const/2
jl .next2stripes
inc bx
cmp bx,TEX_Y
jl .next_line
ret
 
blur_screen: ;blur n times ; blur or fire
;in - ecx times count
;.counter equ dword[esp-4]
.counter1 equ dword[esp-8]
if Ext>=SSE2
push ebp
mov ebp,esp
push dword 0x01010101
movss xmm5,[esp]
shufps xmm5,xmm5,0
.again_blur:
push ecx
mov edi,[screen_ptr]
movzx ecx,word[size_x_var] ;SIZE_X*3/4
 
cmp [dr_flag],12
jge @f
lea ecx,[ecx*3+1]
shr ecx,2
@@:
 
xor eax,eax
rep stosd
if 1
movzx ebx,word[size_x_var]
movzx ecx,word[size_y_var]
sub ecx,3
imul ecx,ebx
cmp [dr_flag],12 ; 32 bit per pix cause
jge @f
lea ecx,[ecx*3]
shr ecx,4
lea ebx,[ebx *3]
jmp .blr
@@:
 
shr ecx,2
shl ebx,2
; mov ecx,(SIZE_X*(SIZE_Y-3))*3/16
.blr:
@@:
push ecx
movups xmm0,[edi+ebx]
mov ecx,edi
sub ecx,ebx
movups xmm1,[ecx]
cmp [dr_flag],12
jge @f
movups xmm2,[edi-3]
movups xmm3,[edi+3]
jmp .f
@@:
movups xmm2,[edi-4]
movups xmm3,[edi+4]
.f:
pavgb xmm0,xmm1
pavgb xmm2,xmm3
pavgb xmm0,xmm2
psubusb xmm0,xmm5 ; importand if fire
movups [edi],xmm0
add edi,16
add esi,16
pop ecx
loop .blr
end if
xor eax,eax
movzx ecx,word[size_x_var]
cmp [dr_flag],12
jge @f
lea ecx,[ecx*3]
shr ecx,2
@@:
; mov ecx,SIZE_X*3/4
rep stosd
pop ecx
dec ecx
jnz .again_blur
mov esp,ebp
pop ebp
end if
 
if Ext=SSE
emms
push ebp
mov ebp,esp
push dword 0x01010101
push dword 0x01010101
movq mm4,[esp]
.again_blur:
push ecx
mov edi,[screen_ptr]
movzx ecx,word[size_x_var] ;SIZE_X*3/4
lea ecx,[ecx*3]
shr ecx,2
; pxor mm5,mm5
xor eax,eax
rep stosd
movzx ebx,word[size_x_var]
movzx ecx,word[size_y_var]
sub ecx,3
imul ecx,ebx
lea ecx,[ecx*3]
shr ecx,3
lea ebx,[ebx*3]
; mov ecx,(SIZE_X*(SIZE_Y-3))*3/8
.blr:
@@:
movq mm0,[edi+ebx]
movq mm1,[edi-ebx]
movq mm2,[edi-3]
movq mm3,[edi+3]
 
pavgb mm0,mm1
pavgb mm2,mm3
pavgb mm0,mm2
 
psubusb mm0,mm4 ; importand if fire
 
movq [edi],mm0
add edi,8
add esi,8
 
loop .blr
 
xor eax,eax
mov ecx,[size_x_var]
lea ecx,[ecx*3]
shr ecx,2
; SIZE_X*3/4
rep stosd
pop ecx
loop .again_blur
mov esp,ebp
pop ebp
end if
 
if Ext=MMX
emms
push ebp
mov ebp,esp
push dword 0x0
push dword 0x01010101
.again_blur:
push ecx
mov edi,[screen_ptr]
mov ecx,SIZE_X*3/4
pxor mm5,mm5
xor eax,eax
rep stosd
 
mov ecx,(SIZE_X*(SIZE_Y-3))*3/4
.blr:
@@:
 
movd mm0,[edi+SIZE_X*3]
movd mm1,[edi-SIZE_X*3]
movd mm2,[edi-3]
movd mm3,[edi+3]
 
punpcklbw mm0,mm5
punpcklbw mm1,mm5
punpcklbw mm2,mm5
punpcklbw mm3,mm5
paddw mm0,mm1
paddw mm0,mm2
paddw mm0,mm3
psrlw mm0,2
 
packuswb mm0,mm5
psubusb mm0,qword[esp] ; importand if fire
movd eax,mm0
stosd
 
loop .blr
 
xor eax,eax
mov ecx,SIZE_X*3/4
rep stosd
pop ecx
loop .again_blur
mov esp,ebp
pop ebp
end if
if Ext=NON
.blur:
push ecx
xor ecx,ecx
.next_col_coof:
xor esi,esi
xor eax,eax
xor ebx,ebx
mov edi,SIZE_X*SIZE_Y
.next:
mov ebp,esi
dec ebp
 
cmp ebp,SIZE_X*SIZE_Y-1 ; clipping
jl @f
mov ebp,SIZE_X*SIZE_Y-1
@@:
or ebp,ebp
jg @f
xor ebp,ebp
@@:
lea edx,[ebp*3+screen]
mov al,byte[edx+ecx]
 
mov ebp,esi
inc ebp
cmp ebp,SIZE_X*SIZE_Y-1 ; clipping
jl @f
mov ebp,SIZE_X*SIZE_Y-1
@@:
or ebp,ebp
jg @f
xor ebp,ebp
@@:
lea edx,[ebp*3+screen]
mov bl,byte[edx+ecx]
add eax,ebx
 
mov ebp,esi
sub ebp,SIZE_X
cmp ebp,SIZE_X*SIZE_Y-1 ; clipping
jl @f
mov ebp,SIZE_X*SIZE_Y-1
@@:
or ebp,ebp
jg @f
xor ebp,ebp
@@:
lea edx,[ebp*3+screen]
mov bl,byte[edx+ecx]
add eax,ebx
 
mov ebp,esi
add ebp,SIZE_X
cmp ebp,SIZE_X*SIZE_Y-1 ; clipping
jl @f
mov ebp,SIZE_X*SIZE_Y-1
@@:
or ebp,ebp
jg @f
xor ebp,ebp
@@:
lea edx,[ebp*3+screen]
mov bl,byte[edx+ecx]
add eax,ebx
 
shr eax,2
lea edx,[esi*3+screen]
or al,al
jz @f
dec al ; not importand if fire
mov byte[edx+ecx],al
@@:
 
inc esi
dec edi
jnz .next
 
inc ecx
cmp ecx,3
jne .next_col_coof
pop ecx
dec ecx
jnz .blur
end if
ret
 
mirror: ; mirror effect - loseless operation
; in ah - button id = 11, 12, 13
mov edi,[points_ptr] ; one real point - triple float
mov esi,[points_normals_ptr] ; one 3dvector - triple float dword x,y,z
fninit
mov ecx,[points_count_var]
 
cmp ah,11
je @f
cmp ah,12
je .yn
cmp ah,13
je .zn
 
@@: ; neg x
fld dword[edi] ;x
fchs
fstp dword[edi] ;x
fld dword[esi]
fchs
fstp dword[esi]
add edi,12
add esi,12
loop @b
ret
.yn:
fld dword[edi+4] ;y
fchs
fstp dword[edi+4] ;y
fld dword[esi+4]
fchs
fstp dword[esi+4]
 
add edi,12
add esi,12
loop .yn
ret
.zn:
fld dword[edi+8] ;z
fchs
fstp dword[edi+8] ;z
fld dword[esi+8]
fchs
fstp dword[esi+8]
 
add edi,12
add esi,12
loop .zn
ret
 
exchange: ; exchange some coords - loseless operation
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
mov ecx,[points_count_var]
 
cmp [xchg_flag],1
je @f
cmp [xchg_flag],2
je .zx
cmp [xchg_flag],3
je .yz
@@:
fld dword[edi] ;x
fld dword[edi+4] ;y
fstp dword[edi] ;x
fstp dword[edi+4] ;y
fld dword[esi] ;x
fld dword[esi+4] ;y
fstp dword[esi] ;x
fstp dword[esi+4] ;y
 
add esi,12
add edi,12
loop @b
ret
.zx:
fld dword[edi] ;x
fld dword[edi+8] ;z
fstp dword[edi] ;x
fstp dword[edi+8] ;z
fld dword[esi] ;x
fld dword[esi+8] ;y
fstp dword[esi] ;x
fstp dword[esi+8] ;y
 
add esi,12
add edi,12
loop .zx
ret
.yz:
fld dword[edi+8] ;z
fld dword[edi+4] ;y
fstp dword[edi+8] ;z
fstp dword[edi+4] ;y
fld dword[esi+8] ;x
fld dword[esi+4] ;y
fstp dword[esi+8] ;x
fstp dword[esi+4] ;y
 
add edi,12
add esi,12
loop .yz
ret
 
;#\\\\\\\\\\\\\\\\\\\\\\\\\comented///////////////////////////////
if 0
calc_attenuation_light: ;; calculate point to spot_light distance
; spot light with attenuation ;; and vector, normalize vector,
;; calc dot_pr and unlinear color according
;; to dot_product, write to color buff
.distance equ dword[ebp-4] ;; color buff in bumpmap for save the mem
.temp_col equ word[ebp-6]
.vector equ [ebp-20]
.spot_light_ptr equ dword [ebp-24]
mov ebp,esp
sub esp,24
mov edi,rotated_points_r ;points_rotated
mov edx,point_normals_rotated
mov ecx,bumpmap ; mem area with temp points color list
xor ax,ax ; counter
mov esi,spot_light_params
mov .spot_light_ptr,esi
.again_color:
push eax
lea ebx,.vector
mov esi,.spot_light_ptr ; calc vector fom light to every point
call make_vector_r
; ebx - ptr to result vector
fld dword [ebx]
fmul st, st
fld dword [ebx+4]
fmul st, st
fld dword [ebx+8]
fmul st, st
faddp st1, st
faddp st1, st
fsqrt
fstp .distance
push edi
mov edi,ebx
call normalize_vector
; edi - normalized distance vector
mov esi,edx
call dot_product ; esi first vector, edi second vector
; st0 - dot product
fabs ; why not ? - think about it
pop edi
fldz
fcomip st1
jbe @f ; st1>0
mov dword[ecx],0
mov word[ecx+4],0
add ecx,6
ffree st0
jmp .update_counters
@@:
; pop edi
 
; calc color(with atenuation), write to buff
; buff - color of points list
; color = ambient+cos(x)*diffuse+(cos(x)^n)*specular
 
push edx
push edi
 
push ecx
push ebp
 
; mov eax,spot_light_params
mov eax,.spot_light_ptr
movzx dx,byte[eax+15]
push dx ; shines
movzx dx,byte[eax+8] ; b
push dx ; orginal col
movzx dx,byte[eax+7] ; g
push dx
movzx dx,byte[eax+6] ; r
push dx
movzx dx,byte[eax+14] ; max col
push dx
movzx dx,byte[eax+13]
push dx
movzx dx,byte[eax+12]
push dx
movzx dx,byte[eax+11] ; min col
push dx
movzx dx,byte[eax+10]
push dx
movzx dx,byte[eax+9]
push dx
push eax ; dot pr. (in st0)
call calc_one_col
; eax - 0x00rrggbb
; brightness = 1 - (distance/light.fadezero)^fogness
; if brightness < 0, then brightness = 0
; attenuetion equation taken from 3dica tutorial - 1/d^2 isn't perfect
; color = color * brightness ; fogness = <0.5,2.0>
pop ebp
pop ecx
 
fld .distance
mov esi,.spot_light_ptr
; fidiv word[spot_light_params+16] ; fadezero
fidiv word[esi+16] ; fadezero
; fmul st,st0 ; fogness = 2
fabs ; to be sure
fchs
fld1
faddp
fld1
fcomip st1
jnbe @f
ffree st0
fld1
@@:
fld st ; st - brightness
ror eax,16
movzx bx,al ; al - r
mov .temp_col,bx
fimul .temp_col
fistp word[ecx]
cmp word[ecx],0
jge @f
mov word[ecx],0
@@:
; mov edx,dword[spot_light_params+12] ; max colors
mov edx,dword[esi+12] ; max colors
movzx bx,dl ; r max
cmp word[ecx],bx ; choose the brightest for r, g, b
jl @f
mov word[ecx],bx
@@:
 
add ecx,2
fld st
ror eax,16
movzx bx,ah ; g
mov .temp_col,bx
fimul .temp_col
fistp word[ecx]
cmp word[ecx],0
jg @f
mov word[ecx],0
@@:
movzx bx,dh ; g max
cmp word[ecx],bx
jle @f
mov word[ecx],bx
@@:
 
add ecx,2
movzx bx,al ; b
mov .temp_col,bx
fimul .temp_col
fistp word[ecx]
cmp word[ecx],0
jg @f
mov word[ecx],0
@@:
shr edx,16
movzx bx,dl ; b max
cmp word[ecx],bx
jle @f
mov word[ecx],bx
@@:
add ecx,2
;end if
; ror eax,16
; movzx bx,al
; mov word[ecx],bx
; ror eax,16
; movzx bx,ah
; mov word[ecx+2],bx
; xor ah,ah
; mov word[ecx+4],ax
; add ecx,6
 
pop edi
pop edx
 
.update_counters:
add edx,12 ; normal_size
add edi,12 ;6 ; 3d point_coord_size
 
pop eax
inc ax
cmp ax,[points_count_var]
jne .again_color
 
add .spot_light_ptr,18
cmp .spot_light_ptr,spot_l_end
jl .again_color
 
mov esp,ebp
ret
end if
;#\\\\\\\\\\\\\\\\\\\\\\\\\comented////////////////////////////////////
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/bump_cat.inc
0,0 → 1,1132
;SIZE_X equ 350
;SIZE_Y equ 350
ROUND equ 8
;TEX_X equ 512
;TEX_Y equ 512
;TEXTURE_SIZE EQU (512*512)-1
;TEX_SHIFT EQU 9
CATMULL_SHIFT equ 8
;TEXTURE_SIZE EQU (TEX_X * TEX_Y)-1
;Ext = NON
;MMX = 1
;NON = 0
;------- Big thanks to Majuma (www.majuma.xt.pl) for absolutely great---
;------- DOS 13h mode demos --------------------------------------------
;------- Procedure draws bump triangle using Catmull Z-buffer algorithm-
;------- (Z coordinate interpolation)-----------------------------------
bump_triangle_z:
;------------------in - eax - x1 shl 16 + y1 -----------
;---------------------- ebx - x2 shl 16 + y2 -----------
;---------------------- ecx - x3 shl 16 + y3 -----------
;---------------------- edx - pointer to bump map ------
;---------------------- esi - pointer to environment map
;---------------------- edi - pointer to screen buffer--
;---------------------- stack : bump coordinates--------
;---------------------- environment coordinates-
;---------------------- Z position coordinates--
;---------------------- pointer io Z buffer-----
;-- Z-buffer - filled with coordinates as dword --------
;-- (Z coor. as word) shl CATMULL_SHIFT ----------------
.b_x1 equ ebp+4 ; procedure don't save registers !!!
.b_y1 equ ebp+6 ; each coordinate as word
.b_x2 equ ebp+8
.b_y2 equ ebp+10
.b_x3 equ ebp+12
.b_y3 equ ebp+14
.e_x1 equ ebp+16
.e_y1 equ ebp+18
.e_x2 equ ebp+20
.e_y2 equ ebp+22
.e_x3 equ ebp+24
.e_y3 equ ebp+26
.z1 equ word[ebp+28]
.z2 equ word[ebp+30]
.z3 equ word[ebp+32]
.z_buff equ dword[ebp+34] ; pointer to Z-buffer
 
 
.t_bmap equ dword[ebp-4] ; pointer to bump map
.t_emap equ dword[ebp-8] ; pointer to e. map
.x1 equ word[ebp-10]
.y1 equ word[ebp-12]
.x2 equ word[ebp-14]
.y2 equ word[ebp-16]
.x3 equ word[ebp-18]
.y3 equ word[ebp-20]
 
.dx12 equ dword[ebp-24]
.dz12 equ [ebp-28]
.dbx12 equ dword[ebp-32]
.dby12 equ [ebp-36]
.dex12 equ dword[ebp-40]
.dey12 equ [ebp-44]
 
.dx13 equ dword[ebp-48]
.dz13 equ [ebp-52]
.dbx13 equ dword[ebp-56]
.dby13 equ [ebp-60]
.dex13 equ dword[ebp-64]
.dey13 equ [ebp-68]
 
.dx23 equ dword[ebp-72]
.dz23 equ [ebp-76]
.dbx23 equ dword[ebp-80]
.dby23 equ [ebp-84]
.dex23 equ dword[ebp-88]
.dey23 equ [ebp-92]
 
.cx1 equ dword[ebp-96] ; current variables
.cz1 equ [ebp-100]
.cx2 equ dword[ebp-104]
.cz2 equ [ebp-108]
.cbx1 equ dword[ebp-112]
.cby1 equ [ebp-116]
.cex1 equ dword[ebp-120]
.cey1 equ [ebp-124]
.cbx2 equ dword[ebp-128]
.cby2 equ [ebp-132]
.cex2 equ dword[ebp-136]
.cey2 equ [ebp-140]
 
mov ebp,esp
push edx ; store bump map
push esi ; store e. map
; sub esp,120
.sort3: ; sort triangle coordinates...
cmp ax,bx
jle .sort1
xchg eax,ebx
mov edx,dword[.b_x1]
xchg edx,dword[.b_x2]
mov dword[.b_x1],edx
mov edx,dword[.e_x1]
xchg edx,dword[.e_x2]
mov dword[.e_x1],edx
mov dx,.z1
xchg dx,.z2
mov .z1,dx
.sort1:
cmp bx,cx
jle .sort2
xchg ebx,ecx
mov edx,dword[.b_x2]
xchg edx,dword[.b_x3]
mov dword[.b_x2],edx
mov edx,dword[.e_x2]
xchg edx,dword[.e_x3]
mov dword[.e_x2],edx
mov dx,.z2
xchg dx,.z3
mov .z2,dx
jmp .sort3
.sort2:
push eax ; store triangle coords in variables
push ebx
push ecx
 
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
and edx,ebx ; if *all* of them are negative a sign flag is raised
and edx,ecx
and edx,eax
test edx,80008000h ; Check both X&Y at once
jne .loop23_done
; mov edx,eax ; eax,ebx,ecx are ORd together into edx which means that
; or edx,ebx ; if any *one* of them is negative a sign flag is raised
; or edx,ecx
; test edx,80000000h ; Check only X
; jne .loop23_done
 
; cmp .x1,SIZE_X ; {
; jg .loop23_done
; cmp .x2,SIZE_X ; This can be optimized with effort
; jg .loop23_done
; cmp .x3,SIZE_X
; jg .loop23_done ; {
 
 
mov bx,.y2 ; calc delta 12
sub bx,.y1
jnz .bt_dx12_make
mov ecx,6
xor edx,edx
@@:
push edx ;dword 0
loop @b
jmp .bt_dx12_done
.bt_dx12_make:
mov ax,.x2
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx12,eax
push eax
 
mov ax,.z2
sub ax,.z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
push eax
if Ext>=SSE
 
sub esp,16
cvtsi2ss xmm3,ebx ;rcps
; mov eax,255
cvtsi2ss xmm4,[i255d]
divss xmm3,xmm4
rcpss xmm3,xmm3
; mulss xmm3,xmm4
shufps xmm3,xmm3,0
 
movd mm0,[.b_x1]
movd mm1,[.b_x2]
movd mm2,[.e_x1]
movd mm3,[.e_x2]
pxor mm4,mm4
punpcklwd mm0,mm4
punpcklwd mm1,mm4
punpcklwd mm2,mm4
punpcklwd mm3,mm4
 
psubd mm1,mm0
psubd mm3,mm2
 
; cvtpi2ps xmm0,mm0
; movlhps xmm0,xmm0
; cvtpi2ps xmm0,mm2
cvtpi2ps xmm1,mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,mm3
; subps xmm1,xmm0
 
 
; cvtpi2ps xmm0,mm3
; divps xmm1,xmm3
mulps xmm1,xmm3
shufps xmm1,xmm1,10110001b
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dey12,mm0
movq .dby12,mm1
 
 
else
 
mov ax,word[.b_x2]
sub ax,word[.b_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dbx12,eax
push eax
 
mov ax,word[.b_y2]
sub ax,word[.b_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dby12,eax
push eax
 
mov ax,word[.e_x2]
sub ax,word[.e_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dex12,eax
push eax
 
mov ax,word[.e_y2]
sub ax,word[.e_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dey12,eax
push eax
 
end if
 
.bt_dx12_done:
 
mov bx,.y3 ; calc delta13
sub bx,.y1
jnz .bt_dx13_make
mov ecx,6
xor edx,edx
@@:
push edx ;dword 0
loop @b
jmp .bt_dx13_done
.bt_dx13_make:
mov ax,.x3
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx13,eax
push eax
 
mov ax,.z3
sub ax,.z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
; mov .dz13,eax
push eax
 
if Ext>=SSE
 
sub esp,16
cvtsi2ss xmm3,ebx ;rcps
; mov eax,255
cvtsi2ss xmm4,[i255d]
divss xmm3,xmm4
rcpss xmm3,xmm3
; mulss xmm3,xmm4
shufps xmm3,xmm3,0
 
movd mm0,[.b_x1]
movd mm1,[.b_x3]
movd mm2,[.e_x1]
movd mm3,[.e_x3]
pxor mm4,mm4
punpcklwd mm0,mm4
punpcklwd mm1,mm4
punpcklwd mm2,mm4
punpcklwd mm3,mm4
 
psubd mm1,mm0
psubd mm3,mm2
 
; cvtpi2ps xmm0,mm0
; movlhps xmm0,xmm0
; cvtpi2ps xmm0,mm2
cvtpi2ps xmm1,mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,mm3
; subps xmm1,xmm0
 
 
; cvtpi2ps xmm0,mm3
; divps xmm1,xmm3
mulps xmm1,xmm3
shufps xmm1,xmm1,10110001b
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dey13,mm0
movq .dby13,mm1
 
 
else
 
mov ax,word[.b_x3]
sub ax,word[.b_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dbx13,eax
push eax
 
mov ax,word[.b_y3]
sub ax,word[.b_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dby13,eax
push eax
 
mov ax,word[.e_x3]
sub ax,word[.e_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dex13,eax
push eax
 
mov ax,word[.e_y3]
sub ax,word[.e_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dey13,eax
push eax
end if
 
.bt_dx13_done:
 
mov bx,.y3 ; calc delta23
sub bx,.y2
jnz .bt_dx23_make
mov ecx,6
xor edx,edx
@@:
push edx ;dword 0
loop @b
jmp .bt_dx23_done
.bt_dx23_make:
mov ax,.x3
sub ax,.x2
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx23,eax
push eax
 
mov ax,.z3
sub ax,.z2
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
; mov .dz23,eax
push eax
; sub esp,40
if Ext>=SSE
 
sub esp,16
cvtsi2ss xmm3,ebx ;rcps
; mov eax,255
cvtsi2ss xmm4,[i255d]
divss xmm3,xmm4
rcpss xmm3,xmm3
; mulss xmm3,xmm4
shufps xmm3,xmm3,0
 
movd mm0,[.b_x2]
movd mm1,[.b_x3]
movd mm2,[.e_x2]
movd mm3,[.e_x3]
pxor mm4,mm4
punpcklwd mm0,mm4
punpcklwd mm1,mm4
punpcklwd mm2,mm4
punpcklwd mm3,mm4
 
psubd mm1,mm0
psubd mm3,mm2
 
; cvtpi2ps xmm0,mm0
; movlhps xmm0,xmm0
; cvtpi2ps xmm0,mm2
cvtpi2ps xmm1,mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,mm3
; subps xmm1,xmm0
 
 
; cvtpi2ps xmm0,mm3
; divps xmm1,xmm3
mulps xmm1,xmm3
shufps xmm1,xmm1,10110001b
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dey23,mm0
movq .dby23,mm1
 
else
 
mov ax,word[.b_x3]
sub ax,word[.b_x2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dbx23,eax
push eax
 
mov ax,word[.b_y3]
sub ax,word[.b_y2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dby23,eax
push eax
 
mov ax,word[.e_x3]
sub ax,word[.e_x2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dex23,eax
push eax
 
mov ax,word[.e_y3]
sub ax,word[.e_y2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dey23,eax
push eax
 
end if
 
.bt_dx23_done:
sub esp,48
 
movsx eax,.x1
shl eax,ROUND
mov .cx1,eax
mov .cx2,eax
; push eax
; push eax
 
movsx eax,word[.b_x1]
shl eax,ROUND
mov .cbx1,eax
mov .cbx2,eax
; push eax
; push eax
 
movsx eax,word[.b_y1]
shl eax,ROUND
mov .cby1,eax
mov .cby2,eax
; push eax
; push eax
 
movsx eax,word[.e_x1]
shl eax,ROUND
mov .cex1,eax
mov .cex2,eax
; push eax
; push eax
 
movsx eax,word[.e_y1]
shl eax,ROUND
mov .cey1,eax
mov .cey2,eax
; push eax
; push eax
 
movsx eax,.z1
shl eax,CATMULL_SHIFT
mov .cz1,eax
mov .cz2,eax
; push eax
; push eax
 
movsx ecx,.y1
cmp cx,.y2
jge .loop12_done
.loop12:
call .call_bump_line
if Ext >= SSE2
movups xmm0,.cey2
movups xmm1,.cey1
movups xmm2,.dey12
movups xmm3,.dey13
paddd xmm0,xmm2
paddd xmm1,xmm3
movups .cey2,xmm0
movups .cey1,xmm1
movq mm4,.cz1
movq mm5,.cz2
paddd mm4,.dz13
paddd mm5,.dz12
movq .cz1,mm4
movq .cz2,mm5
end if
 
 
if (Ext = MMX) | (Ext = SSE)
movq mm0,.cby2
movq mm1,.cby1
movq mm2,.cey2
movq mm3,.cey1
movq mm4,.cz1
movq mm5,.cz2
paddd mm0,.dby12
paddd mm1,.dby13
paddd mm2,.dey12
paddd mm3,.dey13
paddd mm4,.dz13
paddd mm5,.dz12
movq .cby2,mm0
movq .cby1,mm1
movq .cey1,mm3
movq .cey2,mm2
movq .cz1,mm4
movq .cz2,mm5
else if Ext = NON
mov edx,.dbx13
add .cbx1,edx
mov eax,.dbx12
add .cbx2,eax
mov ebx,.dby13
add .cby1,ebx
mov edx,.dby12
add .cby2,edx
 
mov eax,.dex13
add .cex1,eax
mov ebx,.dex12
add .cex2,ebx
mov edx,.dey13
add .cey1,edx
mov eax,.dey12
add .cey2,eax
 
mov eax,.dx13
add .cx1,eax
mov ebx,.dx12
add .cx2,ebx
 
mov ebx,.dz13
add .cz1,ebx
mov edx,.dz12
add .cz2,edx
end if
inc ecx
cmp cx,.y2
jl .loop12
.loop12_done:
 
movsx ecx,.y2
cmp cx,.y3
jge .loop23_done
 
movsx eax,.z2
shl eax,CATMULL_SHIFT
mov .cz2,eax
 
movsx eax,.x2
shl eax,ROUND
mov .cx2,eax
 
movzx eax,word[.b_x2]
shl eax,ROUND
mov .cbx2,eax
 
movzx eax,word[.b_y2]
shl eax,ROUND
mov .cby2,eax
 
movzx eax,word[.e_x2]
shl eax,ROUND
mov .cex2,eax
 
movzx eax,word[.e_y2]
shl eax,ROUND
mov .cey2,eax
 
.loop23:
call .call_bump_line
if Ext >= SSE2
movups xmm0,.cey2
movups xmm1,.cey1
movups xmm2,.dey23
movups xmm3,.dey13
paddd xmm0,xmm2
paddd xmm1,xmm3
movups .cey2,xmm0
movups .cey1,xmm1
movq mm4,.cz1
movq mm5,.cz2
paddd mm4,.dz13
paddd mm5,.dz23
movq .cz1,mm4
movq .cz2,mm5
end if
if (Ext = MMX) | (Ext = SSE)
movq mm0,.cby2
movq mm1,.cby1
movq mm2,.cey2
movq mm3,.cey1
movq mm4,.cz1
movq mm5,.cz2
paddd mm0,.dby23
paddd mm1,.dby13
paddd mm2,.dey23
paddd mm3,.dey13
paddd mm4,.dz13
paddd mm5,.dz23
movq .cby2,mm0
movq .cby1,mm1
movq .cey1,mm3
movq .cey2,mm2
movq .cz1,mm4
movq .cz2,mm5
else if Ext = NON
mov eax,.dx13
add .cx1,eax
mov ebx,.dx23
add .cx2,ebx
 
mov edx,.dbx13
add .cbx1,edx
mov eax,.dbx23
add .cbx2,eax
mov ebx,.dby13
add .cby1,ebx
mov edx,.dby23
add .cby2,edx
 
mov eax,.dex13
add .cex1,eax
mov ebx,.dex23
add .cex2,ebx
mov edx,.dey13
add .cey1,edx
mov eax,.dey23
add .cey2,eax
 
mov ebx,.dz13
add .cz1,ebx
mov edx,.dz23
add .cz2,edx
end if
inc ecx
cmp cx,.y3
jl .loop23
.loop23_done:
 
mov esp,ebp
ret 34
 
.call_bump_line:
 
; push ebp
; push ecx
pushad
 
push dword .cz1
push dword .cz2
push .z_buff
push .t_emap
push .t_bmap
push dword .cey2
push .cex2
push dword .cby2
push .cbx2
push dword .cey1
push .cex1
push dword .cby1
push .cbx1
push ecx
 
mov eax,.cx1
sar eax,ROUND
mov ebx,.cx2
sar ebx,ROUND
 
call bump_line_z
 
popad
ret
bump_line_z:
;--------------in: eax - x1
;-------------- ebx - x2
;-------------- edi - pointer to screen buffer
;stack - another parameters :
.y equ dword [ebp+4]
.bx1 equ [ebp+8] ; ---
.by1 equ dword [ebp+12] ; |
.ex1 equ [ebp+16] ; |
.ey1 equ dword [ebp+20] ; |> bump and env coords
.bx2 equ [ebp+24] ; |> shifted shl ROUND
.by2 equ dword [ebp+28] ; |
.ex2 equ [ebp+32] ; |
.ey2 equ dword [ebp+36] ; ---
.bmap equ dword [ebp+40]
.emap equ dword [ebp+44]
.z_buff equ dword [ebp+48]
.z2 equ dword [ebp+52] ; -- |> z coords shifted
.z1 equ dword [ebp+56] ; -- shl CATMULL_SHIFT
 
.x1 equ dword [ebp-4]
.x2 equ dword [ebp-8]
.dbx equ dword [ebp-12]
.dby equ [ebp-16]
.dex equ dword [ebp-20]
.dey equ [ebp-24]
.dz equ dword [ebp-28]
.cbx equ dword [ebp-32]
.cby equ [ebp-36]
.cex equ dword [ebp-40]
.cey equ [ebp-44]
.cz equ dword [ebp-48]
.czbuff equ dword [ebp-52]
.temp1 equ ebp-60
.temp2 equ ebp-68
.temp3 equ ebp-76
.temp4 equ ebp-84
.temp5 equ ebp-92
 
mov ebp,esp
 
mov ecx,.y
or ecx,ecx
jl .bl_end
; mov dx,[size_x_var]
; dec dx
cmp cx,[size_y_var] ;SIZE_Y
jge .bl_end
 
cmp eax,ebx
jl .bl_ok
je .bl_end
 
xchg eax,ebx
if Ext=NON
mov edx,.bx1
xchg edx,.bx2
mov .bx1,edx
mov edx,.by1
xchg edx,.by2
mov .by1,edx
 
mov edx,.ex1
xchg edx,.ex2
mov .ex1,edx
mov edx,.ey1
xchg edx,.ey2
mov .ey1,edx
end if
if Ext = MMX
movq mm0,.bx1
movq mm1,.ex1
movq mm2,.bx2
movq mm3,.ex2
movq .bx2,mm0
movq .ex2,mm1
movq .bx1,mm2
movq .ex1,mm3
end if
if Ext >= SSE
movups xmm0,.bx1
movups xmm1,.bx2
movups .bx2,xmm0
movups .bx1,xmm1
end if
 
mov edx,.z1
xchg edx,.z2
mov .z1,edx
 
.bl_ok:
 
push eax
push ebx ;store x1, x2
movzx edx,word[size_x_var]
dec edx
cmp .x1,edx ;SIZE_X
jge .bl_end
cmp .x2,0
jle .bl_end
 
mov ebx,.x2
sub ebx,.x1
 
if Ext >= SSE
 
sub esp,16
cvtsi2ss xmm3,ebx ;rcps
shufps xmm3,xmm3,0
 
cvtpi2ps xmm0,.bx1 ;mm0
movlhps xmm0,xmm0
cvtpi2ps xmm0,.ex1 ;mm2
cvtpi2ps xmm1,.bx2 ;mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,.ex2 ;mm3
subps xmm1,xmm0
 
divps xmm1,xmm3
 
shufps xmm1,xmm1,10110001b
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dey,mm0
movq .dby,mm1
 
else
 
mov eax,.bx2 ; calc .dbx
sub eax,.bx1
cdq
idiv ebx
push eax
 
mov eax,.by2 ; calc .dby
sub eax,.by1
cdq
idiv ebx
push eax
 
mov eax,.ex2 ; calc .dex
sub eax,.ex1
cdq
idiv ebx
push eax
 
mov eax,.ey2 ; calc .dey
sub eax,.ey1
cdq
idiv ebx
push eax
 
end if
 
mov eax,.z2 ; calc .dz
sub eax,.z1
cdq
idiv ebx
push eax
 
cmp .x1,0 ; set correctly begin variable
jge @f ; CLIPPING ON FUNCTION
; cutting triangle exceedes screen
mov ebx,.x1
neg ebx
imul ebx ; eax = .dz * abs(.x1)
add .z1,eax
mov .x1,0
 
mov eax,.dbx
imul ebx
add .bx1,eax
 
mov eax,.dby
imul ebx
add .by1,eax
 
mov eax,.dex
imul ebx
add .ex1,eax
 
mov eax,.dey
imul ebx
add .ey1,eax
@@:
movzx edx,word[size_x_var]
dec edx
cmp .x2,edx ;SIZE_X
jl @f
mov .x2,edx ;SIZE_X
@@:
movzx eax,word[size_x_var] ;SIZE_X ;calc memory begin in buffers
mov ebx,.y
mul ebx
mov ebx,.x1
add eax,ebx
mov ebx,eax
lea eax,[eax*3]
add edi,eax
mov esi,.z_buff ; z-buffer filled with dd variables
shl ebx,2
add esi,ebx
 
mov ecx,.x2
sub ecx,.x1
; init current variables
push dword .bx1
push .by1
push dword .ex1
push .ey1
 
push .z1 ; current z shl CATMULL_SHIFT
push esi
;if Ext = SSE2
; movups xmm1,.dey
;end if
if Ext>=MMX
movq mm0,.cby
movq mm1,.cey
movq mm2,.dby
movq mm3,.dey
end if
if Ext >= SSE2
mov eax,TEXTURE_SIZE
movd xmm1,eax
shufps xmm1,xmm1,0
push dword TEX_X
push dword -TEX_X
push dword 1
push dword -1
movups xmm2,[esp]
movd xmm3,.bmap
shufps xmm3,xmm3,0
end if
 
;align 16
.draw:
; if TEX = SHIFTING ;bump drawing only in shifting mode
mov esi,.czbuff ; .czbuff current address in buffer
mov ebx,.cz ; .cz - cur z position
cmp ebx,dword[esi]
jge .skip
 
if Ext>=MMX
movq mm6,mm0
psrld mm6,ROUND
movd eax,mm6
psrlq mm6,32
movd esi,mm6
else
mov eax,.cby
sar eax,ROUND
mov esi,.cbx
sar esi,ROUND
end if
shl eax,TEX_SHIFT ;-
add esi,eax ;- ; esi - current bump map index
 
if Ext = SSE2
movd xmm0,esi
shufps xmm0,xmm0,0
paddd xmm0,xmm2
pand xmm0,xmm1
paddd xmm0,xmm3
 
movd ebx,xmm0
movzx eax,byte[ebx]
;
; shufps xmm0,xmm0,11100001b
psrldq xmm0,4
movd ebx,xmm0
movzx ebx,byte[ebx]
sub eax,ebx
;
; shufps xmm0,xmm0,11111110b
psrldq xmm0,4
movd ebx,xmm0
movzx edx, byte [ebx]
;
; shufps xmm0,xmm0,11111111b
psrldq xmm0,4
movd ebx,xmm0
movzx ebx, byte [ebx]
sub edx,ebx
;
else
 
mov ebx,esi
dec ebx
and ebx,TEXTURE_SIZE
add ebx,.bmap
movzx eax,byte [ebx]
 
mov ebx,esi
inc ebx
and ebx,TEXTURE_SIZE
add ebx,.bmap
movzx ebx,byte [ebx]
 
sub eax,ebx
 
mov ebx,esi
sub ebx,TEX_X
and ebx,TEXTURE_SIZE
add ebx,.bmap
movzx edx,byte [ebx]
 
mov ebx,esi
add ebx,TEX_X
and ebx,TEXTURE_SIZE
add ebx,.bmap
movzx ebx,byte [ebx]
 
sub edx,ebx
end if
; eax - horizontal sub
; edx - vertical sub
if Ext = NON
mov ebx,.cex ;.cex - current env map X
sar ebx,ROUND
add eax,ebx ; eax - modified x coord
 
mov ebx,.cey ;.cey - current env map y
sar ebx,ROUND
add edx,ebx ; edx - modified y coord
else
movq mm6,mm1 ; mm5 - copy of cur env coords
psrld mm6,ROUND
movd ebx,mm6
psrlq mm6,32
add eax,ebx
movd ebx,mm6
add edx,ebx
end if
or eax,eax
jl .black
cmp eax,TEX_X
jg .black
or edx,edx
jl .black
cmp edx,TEX_Y
jg .black
 
shl edx,TEX_SHIFT
add edx,eax
lea esi,[edx*3]
add esi,.emap
lodsd
jmp .put_pixel
.black:
xor eax,eax
.put_pixel:
stosd
dec edi
mov ebx,.cz
mov esi,.czbuff
mov dword[esi],ebx
jmp .no_skip
.skip:
add edi,3
.no_skip:
add .czbuff,4
 
;if Ext = SSE2
; movups xmm0,.cey
; paddd xmm0,xmm1
; movups .cey,xmm0
;
;end if
if Ext >= MMX
paddd mm0,mm2
paddd mm1,mm3
end if
 
if Ext=NON
mov eax,.dbx
add .cbx,eax
mov eax,.dby
add .cby,eax
mov eax,.dex
add .cex,eax
mov eax,.dey
add .cey,eax
end if
mov eax,.dz
add .cz,eax
 
dec ecx
jnz .draw
; end if
.bl_end:
mov esp,ebp
ret 56
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/bump_tex.inc
0,0 → 1,1817
 
;CATMULL_SHIFT equ 8
;TEXTURE_SIZE EQU (TEX_X * TEX_Y)-1
;ROUND equ 8
;Ext = NON
;MMX = 1
;NON = 0
;------- Big thanks to Majuma (www.majuma.xt.pl) for absolutely great---
;------- DOS 13h mode demos --------------------------------------------
;------- Procedure draws bump triangle with texture, I use -------------
;--------Catmull Z-buffer algorithm- (Z coordinate interpolation)-------
;--------I calc texture pixel by this way: col1*col2/256 ---------------
bump_tex_triangle_z:
;------------------in - eax - x1 shl 16 + y1 -----------
;---------------------- ebx - x2 shl 16 + y2 -----------
;---------------------- ecx - x3 shl 16 + y3 -----------
;---------------------- edx - pointer to bump map-------
;---------------------- esi - pointer to env map--------
;---------------------- edi - pointer to screen buffer--
;---------------------- stack : bump coordinates--------
;---------------------- environment coordinates-
;---------------------- Z position coordinates--
;---------------------- pointer to Z buffer-----
;---------------------- pointer to texture------
;---------------------- texture coordinates-----
;-- Z-buffer - filled with coordinates as dword --------
;-- (Z coor. as word) shl CATMULL_SHIFT ----------------
.b_x1 equ ebp+4 ; procedure don't save registers !!!
.b_y1 equ ebp+6 ; each coordinate as word
.b_x2 equ ebp+8
.b_y2 equ ebp+10 ; b - bump map coords
.b_x3 equ ebp+12 ; e - env map coords
.b_y3 equ ebp+14
.e_x1 equ ebp+16
.e_y1 equ ebp+18
.e_x2 equ ebp+20
.e_y2 equ ebp+22
.e_x3 equ ebp+24
.e_y3 equ ebp+26
.z1 equ word[ebp+28]
.z2 equ word[ebp+30]
.z3 equ word[ebp+32]
.z_buff equ dword[ebp+34] ; pointer to Z-buffer
.tex_ptr equ dword[ebp+38] ; ptr to texture
.t_x1 equ ebp+42 ; texture coords
.t_y1 equ ebp+44
.t_x2 equ ebp+46
.t_y2 equ ebp+48
.t_x3 equ ebp+50
.t_y3 equ ebp+52
 
 
 
.t_bmap equ dword[ebp-4] ; pointer to bump map
.t_emap equ dword[ebp-8] ; pointer to env map
.x1 equ word[ebp-10]
.y1 equ word[ebp-12]
.x2 equ word[ebp-14]
.y2 equ word[ebp-16]
.x3 equ word[ebp-18]
.y3 equ word[ebp-20]
 
if 0 ;Ext <= SSE2
 
.dx12 equ dword[edi-4]
.dz12 equ [edi-8]
.dbx12 equ dword[edi-12]
.dby12 equ [edi-16]
.dex12 equ dword[edi-20]
.dey12 equ [edi-24]
.dtx12 equ dword[edi-28]
.dty12 equ [edi-32]
 
.dx13 equ dword[ebp-52-4*1]
.dz13 equ [ebp-52-4*2]
.dbx13 equ dword[ebp-52-4*3]
.dby13 equ [ebp-52-4*4]
.dex13 equ dword[ebp-52-4*5]
.dey13 equ [ebp-52-4*6]
.dtx13 equ dword[ebp-52-4*7]
.dty13 equ [ebp-52-4*8]
 
 
.dx23 equ dword[ebp-(52+4*9)]
.dz23 equ [ebp-(52+4*10)]
.dbx23 equ dword[ebp-(52+4*11)]
.dby23 equ [ebp-(52+4*12)]
.dex23 equ dword[ebp-(52+4*13)]
.dey23 equ [ebp-(52+4*14)]
.dtx23 equ dword[ebp-(52+4*15)]
.dty23 equ [ebp-(52+4*16)]
 
else
 
.dx12 equ dword[ebp-24]
.dz12 equ [ebp-28]
.dbx12 equ dword[ebp-32]
.dby12 equ [ebp-36]
.dex12 equ dword[ebp-40]
.dey12 equ [ebp-44]
.dtx12 equ dword[ebp-48]
.dty12 equ [ebp-52]
 
.dx13 equ dword[ebp-52-4*1]
.dz13 equ [ebp-52-4*2]
.dbx13 equ dword[ebp-52-4*3]
.dby13 equ [ebp-52-4*4]
.dex13 equ dword[ebp-52-4*5]
.dey13 equ [ebp-52-4*6]
.dtx13 equ dword[ebp-52-4*7]
.dty13 equ [ebp-52-4*8]
 
 
.dx23 equ dword[ebp-(52+4*9)]
.dz23 equ [ebp-(52+4*10)]
.dbx23 equ dword[ebp-(52+4*11)]
.dby23 equ [ebp-(52+4*12)]
.dex23 equ dword[ebp-(52+4*13)]
.dey23 equ [ebp-(52+4*14)]
.dtx23 equ dword[ebp-(52+4*15)]
.dty23 equ [ebp-(52+4*16)]
 
end if
 
if Ext < SSE
 
.cx1 equ dword[ebp-(52+4*17)] ; current variables
.cz1 equ [ebp-(52+4*18)]
.cx2 equ dword[ebp-(52+4*19)]
.cz2 equ [ebp-(52+4*20)]
.cbx1 equ dword[ebp-(52+4*21)]
.cby1 equ [ebp-(52+4*22)]
.cbx2 equ dword[ebp-(52+4*23)]
.cby2 equ [ebp-(52+4*24)]
.cex1 equ dword[ebp-(52+4*25)]
.cey1 equ [ebp-(52+4*26)]
.cex2 equ dword[ebp-(52+4*27)]
.cey2 equ [ebp-(52+4*28)]
 
.ctx1 equ dword[ebp-(52+4*29)]
.cty1 equ [ebp-(52+4*30)]
.ctx2 equ dword[ebp-(52+4*31)]
.cty2 equ [ebp-(52+4*32)]
 
else
 
.cx1 equ dword[ebp-(52+4*17)] ; current variables
.cz1 equ [ebp-(52+4*18)]
.cbx1 equ dword[ebp-(52+4*19)]
.cby1 equ [ebp-(52+4*20)]
.cex1 equ dword[ebp-(52+4*21)]
.cey1 equ [ebp-(52+4*22)]
.ctx1 equ dword[ebp-(52+4*23)]
.cty1 equ [ebp-(52+4*24)]
 
.cx2 equ dword[ebp-(52+4*25)]
.cz2 equ [ebp-(52+4*26)]
.cbx2 equ dword[ebp-(52+4*27)]
.cby2 equ [ebp-(52+4*28)]
.cex2 equ dword[ebp-(52+4*29)]
.cey2 equ [ebp-(52+4*30)]
.ctx2 equ dword[ebp-(52+4*31)]
.cty2 equ [ebp-(52+4*32)]
 
end if
cld
mov ebp,esp
push edx ; store bump map
push esi ; store e. map
; sub esp,120
.sort3: ; sort triangle coordinates...
cmp ax,bx
jle .sort1
xchg eax,ebx
mov edx,dword[.b_x1]
xchg edx,dword[.b_x2]
mov dword[.b_x1],edx
mov edx,dword[.e_x1]
xchg edx,dword[.e_x2]
mov dword[.e_x1],edx
mov edx,dword[.t_x1]
xchg edx,dword[.t_x2]
mov dword[.t_x1],edx
mov dx,.z1
xchg dx,.z2
mov .z1,dx
.sort1:
cmp bx,cx
jle .sort2
xchg ebx,ecx
mov edx,dword[.b_x2]
xchg edx,dword[.b_x3]
mov dword[.b_x2],edx
mov edx,dword[.e_x2]
xchg edx,dword[.e_x3]
mov dword[.e_x2],edx
mov edx,dword[.t_x2]
xchg edx,dword[.t_x3]
mov dword[.t_x2],edx
mov dx,.z2
xchg dx,.z3
mov .z2,dx
jmp .sort3
.sort2:
push eax ; store triangle coords in variables
push ebx
push ecx
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
and edx,ebx ; if *all* of them are negative a sign flag is raised
and edx,ecx
and edx,eax
test edx,80008000h ; Check both X&Y at once
jne .loop23_done
; mov edx,eax ; eax,ebx,ecx are ORd together into edx which means that
; or edx,ebx ; if any *one* of them is negative a sign flag is raised
; or edx,ecx
; test edx,80000000h ; Check only X
; jne .loop23_done
 
; cmp .x1,SIZE_X ; {
; jg .loop23_done
; cmp .x2,SIZE_X ; This can be optimized with effort
; jg .loop23_done
; cmp .x3,SIZE_X
; jg .loop23_done ; {
 
 
mov bx,.y2 ; calc delta 12
sub bx,.y1
jnz .bt_dx12_make
if 0 ;Ext >= SSE2
pxor xmm0,xmm0
movups .dty12,xmm0
movups .dey12,xmm0
sub esp,16
else
mov ecx,8
xor edx,edx
@@:
push edx ;dword 0
loop @b
end if
jmp .bt_dx12_done
.bt_dx12_make:
movsx ebx,bx
 
 
if Ext>=SSE
sub esp,32
; mov eax,256
cvtsi2ss xmm4,[i255d]
cvtsi2ss xmm3,ebx ;rcps
if 0 ;Ext >= SSE2
mov edi,ebp
sub edi,512
or edi,0x0000000f
end if
divss xmm3,xmm4
shufps xmm3,xmm3,0
 
movd mm0,[.b_x1]
movd mm1,[.b_x2]
movd mm2,[.e_x1]
movd mm3,[.e_x2]
 
pxor mm4,mm4
punpcklwd mm0,mm4
punpcklwd mm1,mm4
punpcklwd mm2,mm4
punpcklwd mm3,mm4
 
psubd mm1,mm0
psubd mm3,mm2
 
cvtpi2ps xmm1,mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,mm3
 
divps xmm1,xmm3 ;xmm1--> | dby | dbx | dey | dex |
 
shufps xmm1,xmm1,10110001b
;xmm1--> | dbx | dby | dex | dey |
;1 movups .dey12,xmm1
cvtps2pi mm0,xmm1 ;mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1 ;mm1,xmm1
movq .dey12,mm0
movq .dby12,mm1
;-------------
; pxor mm0,mm0
; pxor mm1,mm1
;/ pinsrw mm0,.z1,1
;/ pinsrw mm0,.x1,0
;/ pinsrw mm1,.z2,1
;/ pinsrw mm1,.x2,0
mov ax,.z2
sub ax,.z1
cwde
 
mov dx,.x2
sub dx,.x1
movsx edx,dx
 
;/ movd mm1,eax
 
;/ punpcklwd mm0,mm4
;/ punpcklwd mm1,mm4
 
; cvtpi2ps xmm1,mm1
; cvtpi2ps xmm2,mm0
; subps xmm1,xmm2
 
;/ psubd mm1,mm0
 
movd mm2,[.t_x1]
movd mm3,[.t_x2]
 
punpcklwd mm2,mm4
punpcklwd mm3,mm4
psubd mm3,mm2
 
;/ cvtpi2ps xmm1,mm1
cvtsi2ss xmm1,eax
movlhps xmm1,xmm1
cvtsi2ss xmm1,edx
; movss xmm1,xmm4
shufps xmm1,xmm1,00101111b
cvtpi2ps xmm1,mm3
 
divps xmm1,xmm3 ; xmm1--> | dx | dz | dty | dtx |
 
shufps xmm1,xmm1,11100001b
; xmm1--> | dx | dz | dtx | dty |
;1 movlps .dty12,xmm1
;1 movhps .dz12,xmm1
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords | dtx | dty |
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dty12,mm0
movq .dz12,mm1
;----
; mov ax,.z2
; sub ax,.z1
; cwde
; mov bx,.x2
; sub bx,.x1
; movsx ebx,bx
; movd mm1,eax
; psllq mm1,32
; movd mm1,ebx
 
;; push ebx
;; push eax
;; movq mm1,[esp]
;; add esp,8
;;; mov ax,.z1
;;; mov bx,.z2
;;; shl eax,16
;;; shl ebx,16
;;; mov ax,.x1
;;; mov bx,.x2
; movd mm2,[.t_x1]
; movd mm3,[.t_x2]
;; movd mm0,eax
;; movd mm1,ebx
 
; pxor mm4,mm4
;; punpcklwd mm0,mm4
;; punpcklwd mm1,mm4
; punpcklwd mm2,mm4
; punpcklwd mm3,mm4
 
;; psubd mm1,mm0
; psubd mm3,mm2
 
 
; cvtpi2ps xmm1,mm1
; movlhps xmm1,xmm1
; cvtpi2ps xmm1,mm3
 
; divps xmm1,xmm3 ; xmm1--> | dz | dx | dty | dtx |
 
; shufps xmm1,xmm1,10110001b
; xmm1--> | dx | dz | dtx | dty |
; cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords | dtx | dty |
; movhlps xmm1,xmm1
; cvtps2pi mm1,xmm1 ; mm1 --> 2 delta dwords | dx | dz |
; movq .dty12,mm0
; movq .dz12,mm1
else
mov ax,.x2
sub ax,.x1
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dx12,eax
push eax
 
mov ax,.z2
sub ax,.z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
push eax
 
mov ax,word[.b_x2]
sub ax,word[.b_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dbx12,eax
push eax
 
mov ax,word[.b_y2]
sub ax,word[.b_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dby12,eax
push eax
 
mov ax,word[.e_x2]
sub ax,word[.e_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dex12,eax
push eax
 
mov ax,word[.e_y2]
sub ax,word[.e_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dey12,eax
push eax
 
mov ax,word[.t_x2]
sub ax,word[.t_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dtx12,eax
push eax
 
mov ax,word[.t_y2]
sub ax,word[.t_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dty12,eax
push eax
end if
.bt_dx12_done:
 
mov bx,.y3 ; calc delta13
sub bx,.y1
jnz .bt_dx13_make
mov ecx,8
xor edx,edx
@@:
push edx ;dword 0
loop @b
jmp .bt_dx13_done
.bt_dx13_make:
movsx ebx,bx
 
if Ext>=SSE
 
sub esp,32
; mov eax,256
cvtsi2ss xmm4,[i255d]
cvtsi2ss xmm3,ebx ;rcps
divss xmm3,xmm4
shufps xmm3,xmm3,0
 
movd mm0,[.b_x1]
movd mm1,[.b_x3]
movd mm2,[.e_x1]
movd mm3,[.e_x3]
 
pxor mm4,mm4
punpcklwd mm0,mm4
punpcklwd mm1,mm4
punpcklwd mm2,mm4
punpcklwd mm3,mm4
 
psubd mm1,mm0
psubd mm3,mm2
 
cvtpi2ps xmm1,mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,mm3
 
divps xmm1,xmm3 ;xmm1--> | dby | dbx | dey | dex |
 
shufps xmm1,xmm1,10110001b
;xmm1--> | dbx | dby | dex | dey |
;1 movups .dey13,xmm1
 
cvtps2pi mm0,xmm1 ;mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1 ;mm1,xmm1
movq .dey13,mm0
movq .dby13,mm1
 
mov ax,.z3
sub ax,.z1
cwde
 
mov dx,.x3
sub dx,.x1
movsx edx,dx
 
movd mm2,[.t_x1]
movd mm3,[.t_x3]
 
punpcklwd mm2,mm4
punpcklwd mm3,mm4
psubd mm3,mm2
 
cvtsi2ss xmm1,eax
movlhps xmm1,xmm1
cvtsi2ss xmm1,edx
shufps xmm1,xmm1,00101111b
cvtpi2ps xmm1,mm3
 
divps xmm1,xmm3 ; xmm1--> | dx | dz | dty | dtx |
 
shufps xmm1,xmm1,11100001b
; xmm1--> | dx | dz | dtx | dty |
;1 movlps .dty13,xmm1
;1 movhps .dz13,xmm1
 
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords | dtx | dty |
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dty13,mm0
movq .dz13,mm1
 
else
 
mov ax,.x3
sub ax,.x1
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dx13,eax
push eax
 
mov ax,.z3
sub ax,.z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
; mov .dz13,eax
push eax
 
 
mov ax,word[.b_x3]
sub ax,word[.b_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dbx13,eax
push eax
 
mov ax,word[.b_y3]
sub ax,word[.b_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dby13,eax
push eax
 
mov ax,word[.e_x3]
sub ax,word[.e_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dex13,eax
push eax
 
mov ax,word[.e_y3]
sub ax,word[.e_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dey13,eax
push eax
 
mov ax,word[.t_x3]
sub ax,word[.t_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dtx13,eax
push eax
 
mov ax,word[.t_y3]
sub ax,word[.t_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dty13,eax
push eax
end if
.bt_dx13_done:
 
mov bx,.y3 ; calc delta23
sub bx,.y2
jnz .bt_dx23_make
mov ecx,8
xor edx,edx
@@:
push edx ;dword 0
loop @b
jmp .bt_dx23_done
.bt_dx23_make:
movsx ebx,bx
 
if Ext>=SSE
 
sub esp,32
; mov eax,256
cvtsi2ss xmm4,[i255d]
cvtsi2ss xmm3,ebx ;rcps
divss xmm3,xmm4
shufps xmm3,xmm3,0
 
movd mm0,[.b_x2]
movd mm1,[.b_x3]
movd mm2,[.e_x2]
movd mm3,[.e_x3]
 
pxor mm4,mm4
punpcklwd mm0,mm4
punpcklwd mm1,mm4
punpcklwd mm2,mm4
punpcklwd mm3,mm4
 
psubd mm1,mm0
psubd mm3,mm2
 
cvtpi2ps xmm1,mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,mm3
 
divps xmm1,xmm3 ;xmm1--> | dby | dbx | dey | dex |
 
shufps xmm1,xmm1,10110001b
;xmm1--> | dbx | dby | dex | dey |
;1 movups .dey23,xmm1
 
cvtps2pi mm0,xmm1 ;mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1 ;mm1,xmm1
movq .dey23,mm0
movq .dby23,mm1
 
mov ax,.z3
sub ax,.z2
cwde
 
mov dx,.x3
sub dx,.x2
movsx edx,dx
 
movd mm2,[.t_x2]
movd mm3,[.t_x3]
 
punpcklwd mm2,mm4
punpcklwd mm3,mm4
psubd mm3,mm2
 
cvtsi2ss xmm1,eax
movlhps xmm1,xmm1
cvtsi2ss xmm1,edx
shufps xmm1,xmm1,00101111b
cvtpi2ps xmm1,mm3
 
divps xmm1,xmm3 ; xmm1--> | dx | dz | dty | dtx |
 
shufps xmm1,xmm1,11100001b
; xmm1--> | dx | dz | dtx | dty |
; movlps .dty23,xmm1
; movhps .dz23,xmm1
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords | dtx | dty |
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1 ; mm1 --> 2 delta dwords | dx | dz |
movq .dty23,mm0
movq .dz23,mm1
 
 
else
mov ax,.x3
sub ax,.x2
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dx23,eax
push eax
 
mov ax,.z3
sub ax,.z2
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
; mov .dz23,eax
push eax
 
mov ax,word[.b_x3]
sub ax,word[.b_x2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dbx23,eax
push eax
 
mov ax,word[.b_y3]
sub ax,word[.b_y2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dby23,eax
push eax
 
mov ax,word[.e_x3]
sub ax,word[.e_x2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dex23,eax
push eax
 
mov ax,word[.e_y3]
sub ax,word[.e_y2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dey23,eax
push eax
 
 
mov ax,word[.t_x3]
sub ax,word[.t_x2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dtx23,eax
push eax
 
mov ax,word[.t_y3]
sub ax,word[.t_y2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dty23,eax
push eax
end if
; sub esp,40
.bt_dx23_done:
sub esp,64
 
movsx eax,.x1
shl eax,ROUND
mov .cx1,eax
mov .cx2,eax
; push eax
; push eax
 
movsx ebx,word[.b_x1]
shl ebx,ROUND
mov .cbx1,ebx
mov .cbx2,ebx
; push ebx
; push ebx
 
movsx ecx,word[.b_y1]
shl ecx,ROUND
mov .cby1,ecx
mov .cby2,ecx
; push ecx
; push ecx
 
movsx edx,word[.e_x1]
shl edx,ROUND
mov .cex1,edx
mov .cex2,edx
; push edx
; push edx
 
movsx eax,word[.e_y1]
shl eax,ROUND
mov .cey1,eax
mov .cey2,eax
; push eax
; push eax
 
movsx ebx,.z1
shl ebx,CATMULL_SHIFT
mov .cz1,ebx
mov .cz2,ebx
; push ebx
; push ebx
 
; sub esp,16
movsx ecx,word[.t_x1]
shl ecx,ROUND
mov .ctx1,ecx
mov .ctx2,ecx
;push ecx
;push ecx
 
movsx edx,word[.t_y1]
shl edx,ROUND
mov .cty1,edx
mov .cty2,edx
; push edx
; push edx
 
if Ext >= SSE2
movups xmm0,.cby1
movups xmm1,.cty1
movups xmm2,.cby2
movups xmm3,.cty2
movups xmm4,.dby13
movups xmm5,.dty13
movups xmm6,.dby12
movups xmm7,.dty12
.scby1 equ [edi]
.scty1 equ [edi+16]
.scby2 equ [edi+32]
.scty2 equ [edi+48]
.sdby13 equ [edi+64]
.sdty13 equ [edi+80]
.sdby12 equ [edi+96]
.sdty12 equ [edi+128]
push edi
mov edi,sse_repository
movaps .scby1,xmm0
movaps .scty1,xmm1
movaps .scby2,xmm2
movaps .scty2,xmm3
movaps .sdby13,xmm4
movaps .sdty13,xmm5
movaps .sdby12,xmm6
movaps .sdty12,xmm7
pop edi
 
end if
movsx ecx,.y1
cmp cx,.y2
jge .loop12_done
.loop12:
;if Ext >= SSE2
; fxsave [sse_repository]
;end if
call .call_line
if Ext >= SSE2
; fxrstor [sse_repository]
movups xmm0,.cby1
movups xmm1,.cty1
movups xmm2,.cby2
movups xmm3,.cty2
; movups xmm4,.dby13
; movups xmm5,.dty13
; movups xmm6,.dby12
; movups xmm7,.dty12
; paddd xmm0,xmm4
; paddd xmm1,xmm5
; paddd xmm2,xmm6
; paddd xmm3,xmm7
push edi
mov edi,sse_repository
paddd xmm0,.sdby13
paddd xmm1,.sdty13
paddd xmm2,.sdby12
paddd xmm3,.sdty12
pop edi
movups .cby1,xmm0
movups .cty1,xmm1
movups .cby2,xmm2
movups .cty2,xmm3
end if
 
if (Ext = MMX) | (Ext = SSE)
movq mm0,.cby2
movq mm1,.cby1
movq mm2,.cey2
movq mm3,.cey1
movq mm4,.cty1
movq mm5,.cty2
movq mm6,.cz1
movq mm7,.cz2
paddd mm0,.dby12
paddd mm1,.dby13
paddd mm2,.dey12
paddd mm3,.dey13
paddd mm4,.dty13
paddd mm5,.dty12
paddd mm6,.dz13
paddd mm7,.dz12
movq .cby2,mm0
movq .cby1,mm1
movq .cey1,mm3
movq .cey2,mm2
movq .cty1,mm4
movq .cty2,mm5
movq .cz1,mm6
movq .cz2,mm7
end if
if Ext = NON
mov edx,.dbx13
add .cbx1,edx
mov eax,.dbx12
add .cbx2,eax
mov ebx,.dby13
add .cby1,ebx
mov edx,.dby12
add .cby2,edx
 
mov eax,.dex13
add .cex1,eax
mov ebx,.dex12
add .cex2,ebx
mov edx,.dey13
add .cey1,edx
mov eax,.dey12
add .cey2,eax
 
mov eax,.dtx13
add .ctx1,eax
mov ebx,.dtx12
add .ctx2,ebx
mov edx,.dty13
add .cty1,edx
mov eax,.dty12
add .cty2,eax
 
mov eax,.dx13
add .cx1,eax
mov ebx,.dx12
add .cx2,ebx
mov ebx,.dz13
add .cz1,ebx
mov edx,.dz12
add .cz2,edx
end if
inc ecx
cmp cx,.y2
jl .loop12
.loop12_done:
 
movsx ecx,.y2
cmp cx,.y3
jge .loop23_done
 
 
movsx eax,.z2
shl eax,CATMULL_SHIFT
mov .cz2,eax
 
movsx ebx,.x2
shl ebx,ROUND
mov .cx2,ebx
 
movzx edx,word[.b_x2]
shl edx,ROUND
mov .cbx2,edx
 
movzx eax,word[.b_y2]
shl eax,ROUND
mov .cby2,eax
 
movzx ebx,word[.e_x2]
shl ebx,ROUND
mov .cex2,ebx
 
movzx edx,word[.e_y2]
shl edx,ROUND
mov .cey2,edx
 
movzx eax,word[.t_x2]
shl eax,ROUND
mov .ctx2,eax
 
movzx ebx,word[.t_y2]
shl ebx,ROUND
mov .cty2,ebx
if Ext >= SSE2
movups xmm2,.cby2
movups xmm3,.cty2
; movups xmm4,.dby13
; movups xmm5,.dty13
movups xmm6,.dby23
movups xmm7,.dty23
; .scby1 equ [edi]
; .scty1 equ [edi+16]
; .scby2 equ [edi+32]
; .scty2 equ [edi+48]
; .sdby13 equ [edi+64]
; .sdty13 equ [edi+80]
.sdby23 equ [edi+160]
.sdty23 equ [edi+192]
push edi
mov edi,sse_repository
; movaps .scby1,xmm0
; movaps .scty1,xmm1
movaps .scby2,xmm2
movaps .scty2,xmm3
; movaps .sdby13,xmm4
; movaps .sdty13,xmm5
movaps .sdby23,xmm6
movaps .sdty23,xmm7
pop edi
 
end if
 
.loop23:
;if Ext >= SSE2
; fxsave [sse_repository]
;end if
call .call_line
 
if Ext >= SSE2
 
movups xmm0,.cby1
movups xmm1,.cty1
movups xmm2,.cby2
movups xmm3,.cty2
 
 
push edi
mov edi,sse_repository
paddd xmm0,.sdby13
paddd xmm1,.sdty13
paddd xmm2,.sdby23
paddd xmm3,.sdty23
pop edi
movups .cby1,xmm0
movups .cty1,xmm1
movups .cby2,xmm2
movups .cty2,xmm3
 
 
 
 
; fxrstor [sse_repository]
; movups xmm0,.cby1
; movups xmm1,.cty1
; movups xmm2,.cby2
; movups xmm3,.cty2
; movups xmm4,.dby13
; movups xmm5,.dty13
; movups xmm6,.dby23
; movups xmm7,.dty23
; paddd xmm0,xmm4
; paddd xmm1,xmm5
; paddd xmm2,xmm6
; paddd xmm3,xmm7
; movups .cby1,xmm0
; movups .cty1,xmm1
; movups .cby2,xmm2
; movups .cty2,xmm3
;
end if
if (Ext = MMX) | (Ext = SSE)
movq mm0,.cby2
movq mm1,.cby1
movq mm2,.cey2
movq mm3,.cey1
movq mm4,.cty1
movq mm5,.cty2
movq mm6,.cz1
movq mm7,.cz2
paddd mm0,.dby23
paddd mm1,.dby13
paddd mm2,.dey23
paddd mm3,.dey13
paddd mm4,.dty13
paddd mm5,.dty23
paddd mm6,.dz13
paddd mm7,.dz23
movq .cby2,mm0
movq .cby1,mm1
movq .cey2,mm2
movq .cey1,mm3
movq .cty1,mm4
movq .cty2,mm5
movq .cz1,mm6
movq .cz2,mm7
end if
If Ext = NON
mov edx,.dbx13
add .cbx1,edx
mov eax,.dbx23
add .cbx2,eax
mov ebx,.dby13
add .cby1,ebx
mov edx,.dby23
add .cby2,edx
 
mov eax,.dex13
add .cex1,eax
mov ebx,.dex23
add .cex2,ebx
mov edx,.dey13
add .cey1,edx
mov eax,.dey23
add .cey2,eax
 
mov eax,.dx13
add .cx1,eax
mov ebx,.dx23
add .cx2,ebx
mov ebx,.dz13
add .cz1,ebx
mov edx,.dz23
add .cz2,edx
 
mov eax,.dtx13
add .ctx1,eax
mov ebx,.dtx23
add .ctx2,ebx
mov edx,.dty13
add .cty1,edx
mov eax,.dty23
add .cty2,eax
end if
inc ecx
cmp cx,.y3
jl .loop23
.loop23_done:
 
mov esp,ebp
ret 50
 
.call_line:
 
pushad
; xmm0= cby1,cbx1,cz1,cx1
; xmm1= cty1,ctx1,cey1,cex1
if Ext >= SSE2
sub esp,8
shufps xmm1,xmm1,10110001b
shufps xmm3,xmm3,10110001b
movlps [esp],xmm1
else
push dword .cty1
push .ctx1
end if
push dword .cz1
if Ext>=SSE2
sub esp,8
movlps [esp],xmm3
else
push dword .cty2
push .ctx2
end if
push dword .cz2
if Ext>=SSE2
sub esp,32
movhps [esp+24],xmm3
shufps xmm2,xmm2,10110001b
movlps [esp+16],xmm2
movhps [esp+8],xmm1
shufps xmm0,xmm0,10110001b
movlps [esp],xmm0 ;================================
 
else
push dword .cey2
push .cex2
push dword .cby2
push .cbx2
push dword .cey1
push .cex1
push dword .cby1
push .cbx1
end if
 
push .tex_ptr
push .z_buff
push .t_emap
push .t_bmap
 
push ecx
 
mov eax,.cx1
sar eax,ROUND
mov ebx,.cx2
sar ebx,ROUND
 
call bump_tex_line_z
 
popad
;end if
ret
bump_tex_line_z:
;--------------in: eax - x1
;-------------- ebx - x2
;-------------- edi - pointer to screen buffer
;stack - another parameters :
.y equ dword [ebp+4]
.bmap equ dword [ebp+8] ; bump map pointer
.emap equ dword [ebp+12] ; env map pointer
.z_buff equ dword [ebp+16] ; z buffer
.tex_map equ dword [ebp+20] ; texture pointer
 
.bx1 equ [ebp+24] ; ---
.by1 equ [ebp+28] ; |
.ex1 equ [ebp+32] ; |
.ey1 equ [ebp+36] ; |
.bx2 equ [ebp+40] ; |
.by2 equ [ebp+44] ; |> b. map and e. map coords
.ex2 equ [ebp+48] ; |> shifted shl ROUND
.ey2 equ [ebp+52] ; ---
.z2 equ [ebp+56]
.tx2 equ [ebp+60]
.ty2 equ [ebp+64]
.z1 equ [ebp+68]
.tx1 equ [ebp+72]
.ty1 equ [ebp+76]
 
 
 
.x1 equ [ebp-4]
.x2 equ [ebp-8]
.dbx equ [ebp-12]
.dby equ [ebp-16]
.dex equ [ebp-20]
.dey equ [ebp-24]
.dz equ [ebp-28]
.dtx equ [ebp-32]
.dty equ [ebp-36]
 
.cbx equ [ebp-40]
.cby equ [ebp-44]
.cex equ [ebp-48]
.cey equ [ebp-52]
.cz equ [ebp-56]
.czbuff equ [ebp-60]
.ctx equ [ebp-64]
.cty equ [ebp-68]
.c_scr equ [ebp-72]
 
.temp1 equ ebp-80
.temp2 equ ebp-88
.temp3 equ ebp-76
.temp4 equ ebp-84
.temp5 equ ebp-92
 
mov ebp,esp
 
mov ecx,.y
or ecx,ecx
jl .bl_end
movzx edx,word[size_y_var]
cmp ecx,edx ;SIZE_Y
jge .bl_end
 
cmp eax,ebx
jl .bl_ok
je .bl_end
 
 
if Ext=NON
mov edx,.bx1
xchg edx,.bx2
mov .bx1,edx
mov edx,.by1
xchg edx,.by2
mov .by1,edx
 
mov edx,.ex1
xchg edx,.ex2
mov .ex1,edx
mov edx,.ey1
xchg edx,.ey2
mov .ey1,edx
 
mov edx,.tx1
xchg edx,.tx2
mov .tx1,edx
mov edx,.ty1
xchg edx,.ty2
mov .ty1,edx
end if
if Ext = MMX
movq mm0,.bx1
movq mm1,.bx2
movq mm2,.ex1
movq mm3,.ex2
movq mm4,.tx1
movq mm5,.tx2
movq .bx2,mm0
movq .bx1,mm1
movq .ex1,mm3
movq .ex2,mm2
movq .tx1,mm5
movq .tx2,mm4
end if
if Ext>=SSE
movups xmm0,.bx1
movups xmm1,.bx2
movups .bx1,xmm1
movups .bx2,xmm0
movq mm0,.tx1
movq mm1,.tx2
movq .tx1,mm1
movq .tx2,mm0
end if
;if Ext>=SSE2
; movaps xmm4,xmm0
; movaps xmm0,xmm2
; movaps xmm2,xmm4
; movaps xmm5,xmm1
; movaps xmm1,xmm3
; movaps xmm3,xmm5
;else
 
xchg eax,ebx
mov edx,.z1
xchg edx,.z2
mov .z1,edx
;end if
.bl_ok:
;if Ext >= SSE2
; shufps xmm0,xmm0,11100001b
; shufps xmm2,xmm2,11100001b
; movlps .bx1,xmm0
; movlps .bx2,xmm2
 
 
; shufps xmm0,xmm0,00011011b
; shufps xmm2,xmm2,00011011b
; movd eax,xmm0
; movd ebx,xmm2
; shufps xmm0,xmm0,11000110b
; shufps xmm2,xmm2,11000110b
; movd .z1,xmm0
; movd .z2,xmm2
; shufps xmm1,xmm1,10110001b
; shufps xmm3,xmm3,10110001b
; movlps .ex1,xmm1
; movlps .ex2,xmm2
; movhps .tx1,xmm1
; movhps .tx2,xmm2
 
; xchg eax,ebx
; mov edx,.z1
; xchg edx,.z2
; mov .z1,edx
 
 
;end if
 
push eax
push ebx ;store x1, x2
movzx ebx,word[size_x_var]
; mov eax,.x1
cmp dword .x1,ebx ;dword .x1,SIZE_X
jge .bl_end
cmp dword .x2,0
jle .bl_end
 
mov ebx,.x2
sub ebx,.x1
 
if Ext>=SSE
 
sub esp,28
cvtsi2ss xmm3,ebx ;rcps
shufps xmm3,xmm3,0
; float using SSE variant ::-->
; movups xmm0,.bx1 ; new
; movups xmm1,.bx2 ; new
 
cvtpi2ps xmm0,.bx1 ;mm0 ; variant fixed point
movlhps xmm0,xmm0
cvtpi2ps xmm0,.ex1 ;mm2
cvtpi2ps xmm1,.bx2 ;mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,.ex2 ;mm3
subps xmm1,xmm0
 
divps xmm1,xmm3
 
shufps xmm1,xmm1,10110001b
; movups .dey,xmm1 ; new
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dey,mm0
movq .dby,mm1
 
movd mm2,.z1
movd mm3,.z2
 
cvtpi2ps xmm0,.tx1 ;mm0
movlhps xmm0,xmm0
cvtpi2ps xmm0,mm2
cvtpi2ps xmm1,.tx2 ;mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,mm3
; movups xmm0,,z1 ; new
; movups xmm1,.z2 ; new
subps xmm1,xmm0
 
divps xmm1,xmm3
 
; movups .dz,xmm1 ;new
 
shufps xmm1,xmm1,10110100b
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movd .dz,mm0
movq .dty,mm1
 
else
 
mov eax,.bx2 ; calc .dbx
sub eax,.bx1
cdq
idiv ebx
push eax
 
mov eax,.by2 ; calc .dby
sub eax,.by1
cdq
idiv ebx
push eax
 
mov eax,.ex2 ; calc .dex
sub eax,.ex1
cdq
idiv ebx
push eax
 
mov eax,.ey2 ; calc .dey
sub eax,.ey1
cdq
idiv ebx
push eax
 
 
mov eax,.z2 ; calc .dz
sub eax,.z1
cdq
idiv ebx
push eax
 
mov eax,.tx2 ; calc .dtx
sub eax,.tx1
cdq
idiv ebx
push eax
 
mov eax,.ty2 ; calc .dty
sub eax,.ty1
cdq
idiv ebx
push eax
 
end if
cmp dword .x1,0 ; set correctly begin variable
jge @f ; CLIPPING ON FUNCTION
; cutting triangle exceedes screen
mov ebx,.x1
neg ebx
 
;if Ext >= SSE
 
; cvtsi2ss xmm0,ebx
; shufps xmm0,xmm0,0
; movups xmm1,.dey
; mulps xmm1,xmm0
; shufps xmm1,xmm1,00011011b
; movups xmm2,.bx1
; addps xmm2,xmm1
; movups .bx1,xmm2
 
mov eax,.dz
imul ebx ; eax = .dz * abs(.x1)
add .z1,eax
mov dword .x1,0
 
mov eax,.dbx
imul ebx
add .bx1,eax
 
mov eax,.dby
imul ebx
add .by1,eax
 
mov eax,.dex
imul ebx
add .ex1,eax
 
mov eax,.dey
imul ebx
add .ey1,eax
 
mov eax,.dtx
imul ebx
add .tx1,eax
 
mov eax,.dty
imul ebx
add .ty1,eax
 
@@:
; mov ebx,.x2
movzx eax,word[size_x_var]
; cmp dword .x2,SIZE_X
cmp dword .x2,eax ; eax,ebx
jl @f
mov dword .x2,eax ;SIZE_X
@@:
movzx eax,word[size_x_var] ;SIZE_X ;calc memory begin in buffers
mul .y
add eax,.x1
lea esi,[4*eax]
add esi,.z_buff ; z-buffer filled with dd variables
lea eax,[eax*3]
add edi,eax
 
 
mov ecx,.x2
sub ecx,.x1
; init current variables
push dword .bx1 ; current b, e and t shifted shl ROUND .cbx
push dword .by1 ; .cby
push dword .ex1 ; .cex
push dword .ey1 ; .cey
 
push dword .z1 ; current z shl CATMULL_SHIFT ; .cz
push esi ; .czbuff
 
push dword .tx1 ; .ctx
push dword .ty1 ; .cty
push edi ; .c_scr
if Ext = SSE2
mov eax,TEXTURE_SIZE
movd xmm1,eax
shufps xmm1,xmm1,0
push dword TEX_X
push dword -TEX_X
push dword 1
push dword -1
movups xmm2,[esp]
movd xmm3,.bmap
shufps xmm3,xmm3,0
end if
 
if Ext>=MMX
movq mm7,.cty
movq mm6,.cby
movq mm5,.cey
; movq mm4,.dtyq
; movq mm3,.dbyq
end if
 
.draw:
; if TEX = SHIFTING ;bump drawing only in shifting mode
mov esi,.czbuff ; .czbuff current address in buffer
mov ebx,.cz ; .cz - cur z position
cmp ebx,dword[esi]
jge .skip
if Ext=NON
mov eax,.cby
shr eax,ROUND
mov esi,.cbx
shr esi,ROUND
else
movq mm1,mm6
psrld mm1,ROUND
movd eax,mm1
psrlq mm1,32
movd esi,mm1
end if
 
shl eax,TEX_SHIFT
add esi,eax ;- ; esi - current bump map index
 
if Ext = SSE2
 
movd xmm0,esi
shufps xmm0,xmm0,0
paddd xmm0,xmm2
pand xmm0,xmm1
paddd xmm0,xmm3
 
movd ebx,xmm0
movzx eax,byte[ebx]
;
; shufps xmm0,xmm0,11100001b
psrldq xmm0,4
movd ebx,xmm0
movzx ebx,byte[ebx]
sub eax,ebx
;
; shufps xmm0,xmm0,11111110b
psrldq xmm0,4
movd ebx,xmm0
movzx edx, byte [ebx]
;
; shufps xmm0,xmm0,11111111b
psrldq xmm0,4
movd ebx,xmm0
movzx ebx, byte [ebx]
sub edx,ebx
;
else
; mov ebx,esi
; dec ebx
lea ebx,[esi-1]
and ebx,TEXTURE_SIZE
add ebx,.bmap
movzx eax,byte [ebx]
 
; mov ebx,esi
; inc ebx
lea ebx,[esi+1]
and ebx,TEXTURE_SIZE
add ebx,.bmap
movzx ebx,byte [ebx]
sub eax,ebx
 
; mov ebx,esi
; sub ebx,TEX_X
lea ebx,[esi-TEX_X]
and ebx,TEXTURE_SIZE
add ebx,.bmap
movzx edx,byte [ebx]
 
; mov ebx,esi
; add ebx,TEX_X
lea ebx,[esi+TEX_X]
and ebx,TEXTURE_SIZE
add ebx,.bmap
movzx ebx,byte [ebx]
sub edx,ebx
end if
 
; eax - horizontal sub modificated x coord
; edx - vertical sub modificated y coord
if Ext=NON
mov ebx,.cex ;.cex - current env map X
shr ebx,ROUND
add eax,ebx
 
 
mov ebx,.cey ;.cey - current env map y
shr ebx,ROUND
add edx,ebx
 
else
movq mm1,mm5 ; mm5 - copy of cur env coords
psrld mm1,ROUND
movd ebx,mm1
psrlq mm1,32
add eax,ebx
movd ebx,mm1
add edx,ebx
; movq qword[.temp1],mm3
; add eax,dword [.temp1]
; add edx,dword [.temp1+4]
end if
 
or eax,eax
jl .black
cmp eax,TEX_X
jg .black
or edx,edx
jl .black
cmp edx,TEX_Y
jg .black
 
shl edx,TEX_SHIFT ; zaburzenie w emapie = zaburzenie w teksturze
add edx,eax ; proponuje nie stawiac czarnego pixela tylko
lea esi,[edx*3] ; niezaburzony.
add esi,.emap ;
lodsd
 
if Ext=NON
mov edx,.cty
shr edx,ROUND ; sar
 
mov edi,.ctx
shr edi,ROUND ; sar
else
movq mm1,mm7
psrld mm1,ROUND
movd edx,mm1
psrlq mm1,32
movd edi,mm1
 
end if
 
shl edx,TEX_SHIFT
add edi,edx
and edi,TEXTURE_SIZE
lea esi,[edi*3]
add esi,.tex_map
 
if Ext=NON
mov edx,eax
lodsd
push ax
mul dl
mov dl,ah
pop ax
shr ax,8
mul dh
mov al,dl
mov edi,.c_scr
stosw
shr edx,16
shr eax,16
mul dl
shr ax,8
stosb
else
movd mm0,eax
pxor mm1,mm1
punpcklbw mm0,mm1
movd mm2,[esi]
punpcklbw mm2,mm1
pmullw mm0,mm2
psrlw mm0,8
packuswb mm0,mm1
mov edi,.c_scr
movd [edi],mm0
 
end if
 
jmp .actual_zbuff ; actualize z buffer
@@:
.black:
xor eax,eax
mov edi,.c_scr
stosd
.actual_zbuff:
mov eax,.cz
mov edi,.czbuff
stosd
 
.skip:
add dword .czbuff,4
add dword .c_scr,3
 
if Ext=NON
mov eax,.dbx
add .cbx,eax
mov ebx,.dby
add .cby,ebx
 
mov edx,.dex
add .cex,edx
mov eax,.dey
add .cey,eax
 
mov ebx,.dtx
add .ctx,ebx
mov edx,.dty
add .cty,edx
 
else
paddd mm7,.dty
paddd mm6,.dby
paddd mm5,.dey
end if
mov eax,.dz
add .cz,eax
 
dec ecx
jnz .draw
 
.bl_end:
mov esp,ebp
ret 76
;Ext = MMX
 
; else
; movq mm5, qword[.temp1] ;-
; paddd mm5, qword[.temp5] ; .temp5 == low dword = TEX_X, high dword = -TEX_X
; pand mm5, qword[.temp3] ; .temp3 == low = high dword = TEX_SIZE
; paddd mm5, qword[.temp4] ; .temp4 == low = high dword = offset .bmap
; movd ebx,mm5
; psrlq mm5,32
; end if
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/data.inc
0,0 → 1,554
; DATA AREA ************************************
 
i3 dw 3
i12 dd 12
i256 dw 256
i255d dd 255
dot_max dd 1.0 ; dot product max and min
dot_min dd 0.0
env_const dd 1.05
tex_x_div2 dw TEX_X / 2
tex_y_div2 dw TEX_Y / 2
xobs dw 0 ;SIZE_X / 2 ;200 ;observer = camera
yobs dw 0 ;SIZE_Y / 2 ;200 ;coordinates
zobs dw -1000
 
re_alloc_flag db 0
angle_counter dw 0
piD180 dd 0.017453292519943295769236907684886
piD128 dd 0.024544
const6 dw 6,6,6,6
x_offset dw SIZE_X / 2
y_offset dw SIZE_Y / 2
z_offset dw 0
rsscale dd 175.0 ; next real scale
vect_x dw SIZE_X / 2
vect_y dw SIZE_Y / 2
vect_z dw 0
size_y_var:
yres_var dw SIZE_Y
 
size_x_var:
xres_var dw SIZE_X
 
angle_x dw 0
angle_y dw 0
angle_z dw 0
sin_amplitude dd 50
sin_frq dd 0.7
sin_delta dd 0.07 ; wave frequency granularity
convert_muler:
dd 1, 10, 100, 1000, 10000
XYZpartices:
db 'X','Y','Z'
i10 dw 10
offset_y:
i25 dw 25 ; screen buff offset
offset_x:
i5 dw 5
triangles_ptr dd 0
triangles_w_z_ptr dd 0
triangles_normals_ptr dd 0
points_normals_ptr dd 0
points_normals_rot_ptr dd 0
points_ptr dd 0
points_rotated_ptr dd 0
points_translated_ptr dd 0
screen_ptr dd 0
Zbuffer_ptr dd 0
vertices_index_ptr dd 0
vertex_edit_no dw 0
edit_start_x:
dw 0
edit_start_y dw 0
edit_end_x:
dw 0
edit_end_y dw 0
mouse_state dd 0
 
 
menu:
db 2 ; button number = index
db 'rotary ' ; label
db 3 ; max flag + 1 , if = 255, no flag
r_flag db 1 ; flag
dd axl_f ; offset to flags description
 
db 3
db 'shd. model'
if Ext >= SSE3
max_dr_flg db 15
else
db 12
end if
dr_flag db 0 ; 6 - dots
dd shd_f
 
db 4
db 'speed '
db 2
speed_flag db 0
dd spd_f
 
db 5
db 'zoom out '
db 255
db ?
dd ?
 
db 6
db 'zoom in '
db 255
db ?
dd ?
 
db 7
db 'catmull '
db 2
catmull_flag db 1
dd onoff_f
 
db 8
db 'culling '
db 2
culling_flag db 0
dd onoff_f
 
db 9
db 'rand.light'
db 255
db ?
dd ?
 
db 10
db 'blur '
db 6
blur_flag db 0
dd blur_f
 
db 11
db 'mirror x '
db 2
mirr_x_flag db 0
dd onoff_f
 
db 12
db 'mirror y '
db 2
mirr_y_flag db 0
dd onoff_f
 
db 13
db 'mirror z '
db 2
mirr_z_flag db 0
dd onoff_f
 
db 14
db 'xchg '
db 4
xchg_flag db 0
dd xchg_f
 
db 15
db 'emboss '
db 2
emboss_flag db 0
dd onoff_f
 
db 16
db 'fire '
db 3
fire_flag db 0
dd blur_f
 
db 17
db 'move '
db 3
move_flag db 0
dd move_f
 
db 18
db 'generate '
db 6
generator_flag db 0
dd blur_f
 
db 19
db 'bumps '
db 2
bumps_flag db 0
dd bumps_f
 
db 20
db 'bumps deep'
db 4
bumps_deep_flag db 3
dd bumps_d_f
 
db 21
db 're-map tex'
db 255
map_tex_flag db ? ;1
dd ? ;bumps_d_f
 
db 22
db 'bright + '
db 6
inc_bright_flag db 0 ;1
dd blur_f
 
db 23
db 'bright - '
db 6
dec_bright_flag db 0 ;1
dd blur_f
 
db 24
db 'wav effect'
db 2
sinus_flag db 0
dd onoff_f
 
 
db 25
db 'editor '
db 2
edit_flag db 0
dd onoff_f
; db 24
; db 'max '
; db 2
;max_flag db 0 ;1
; dd blur_f
;
; db 25
; db 'min '
; db 2
;min_flag db 0 ;1
; dd blur_f
 
 
 
; db 21
; db 'light No. '
; db 3
;light_no_flag db 0
; dd bumps_d_f
 
; db 22
; db 'light comp'
; db 3
;light_comp_flag db 0
; dd light_component_f
 
;; db 23
;; db 'col. comp'
;; db 3
;;color_comp_flag db 0
;; dd color_component_f
 
 
 
 
 
db -1 ; end mark
 
 
flags: ; flags description
shd_f:
db 'flat'
db 'grd '
db 'env '
db 'bump'
db 'tex '
db 'pos '
db 'dots'
db 'txgr'
db '2tex'
db 'btex'
db 'cenv'
db 'grdl'
db 'rphg'
db 'glas'
db 'ptex'
spd_f:
db 'idle'
db 'full'
axl_f:
db ' y '
db 'x+y '
db ' x '
onoff_f:
db 'off '
db 'on '
 
blur_f: ; blur, fire
db 'off '
bumps_d_f: db ' 1 '
db ' 2 '
db ' 3 '
db ' 4 '
db ' 5 '
 
xchg_f:
db 'no '
db 'x<>y'
db 'z<>x'
db 'y<>z'
move_f:
db 'obj '
db 'camr'
db 'wave'
; db 'lght'
bumps_f:
db 'rand'
db 'tex '
; db 'cscl'
base_vector:
labelvector:
db 'add vector'
labelvectorend:
labelyminus:
db 'y -'
labelyminusend:
labelzplus:
db 'z +'
labelzplusend:
labelxminus:
db 'x -'
labelxminusend:
labelxplus:
db 'x +'
labelxplusend:
labelzminus:
db 'z -'
labelzminusend:
labelyplus:
db 'y +'
labelyplusend:
 
 
labelt:
db 'DEUS CARITAS EST'
if Ext=MMX
db ' (MMX)'
end if
if Ext=SSE
db ' (SSE)'
end if
if Ext=SSE2
db ' (SSE2)'
end if
if Ext=SSE3
db ' (SSE3)'
end if
db ' 0.072',0
labellen:
STRdata db '-1 '
 
all_lights_size dw lightsend-lights
 
 
; file_info:
; dd 0
; dd 0
; dd 0
; fsize dd 0 ;180000 ; sizeof(workarea)
; fptr dd 0 ;workarea
; file_name:
; db '/rd/1/3d/house.3ds',0
; ; db '/tmp0/1/ant.3ds',0
;
; rb 256
 
;=============================================
lights:
.light_vector dd 0.0,0.0,-1.0 ; x,y,z Z cooficient of vector must be negative
.orginal_color_r db 1 ; +12
.orginal_color_g db 255 ;
.orginal_color_b db 1 ; +14
.min_color_r db 1 ;
.min_color_g db 1 ; +16
.min_color_b db 1 ;
.max_color_r db 255 ;
.max_color_g db 255 ;
.max_color_b db 255 ;
.shine db 24 ; +21
; LIGHT_SIZE equ ($-lights)
 
dd -0.5,-0.5,-1.0 ; x,y,z ; .light_vector
db 5 ; .orginal_color_r
db 1 ; .orginal_color_g
db 135 ; .orginal_color_b
db 19 ; .min_color_r
db 19 ; .min_color_g
db 19 ; .min_color_b
db 255 ; .max_color_r
db 255 ; .max_color_g
db 255 ; .max_color_b
db 16 ; .shine
 
dd 0.5,0.5,-1.0 ; x,y,z ; .light_vector
db 135 ; .orginal_color_r
db 1 ; .orginal_color_g
db 1 ; .orginal_color_b
db 19 ; .min_color_r
db 19 ; .min_color_g
db 19 ; .min_color_b
db 255 ; .max_color_r
db 255 ; .max_color_g
db 20 ; .max_color_b
db 16 ; .shine
; ALL_LIGHTS_SIZE equ ($ - lights)
;#all_lights_size dw ($ - lights) ;ALL_LIGHTS_SIZE
;===============================================
 
lightsend:
 
 
 
 
align 16
emboss_bias:
dw 128, 128, 128, 128, 128, 128, 128, 128
zero_hgst_dd:
dd -1, -1, -1, 0
mask_255f:
correct_texf:
times 4 dd 255.0
the_zero:
times 4 dd 0.0
tex_m2:
times 4 dd 510.0
the_one:
times 4 dd 1.0
aprox dd 0.0001
 
 
file_info:
dd 0
dd 0
dd 0
fsize dd 0 ;180000 ; sizeof(workarea)
fptr dd 0 ;workarea
file_name:
db '/rd/1/3d/house.3ds',0
; db '/tmp0/1/ant.3ds',0
 
rb 256
 
 
I_END:
SourceFile:
workarea rb 180
EndFile dd ?
align 8
sinbeta dd ?;+32
cosbeta dd ?
 
xsub dw ?
zsub dw ?;+40
ysub dw ?
 
xx1 dw ?
yy1 dw ?
zz1 dw ?;+48 xx1 + 4
xx2 dw ?
yy2 dw ?
zz2 dw ? ; xx1 + 10
xx3 dw ?;+56
yy3 dw ?
zz3 dw ? ; xx1 + 16
col1 dd ?
col2 dd ?
col3 dd ?
scale dd ? ; help scale variable
 
;==
triangles_count_var dd ?
points_count_var dd ?
 
; size_y_var:
; yres_var dw ?
 
; size_x_var:
; xres_var dw ?
x_start:
dw ?
y_start:
dw ?
 
;===
 
point_index1 dd ? ;-\
point_index2 dd ? ; } don't change order
point_index3 dd ? ;-/
temp_col dw ?
temp1 dd ? ; > dont change
temp2 dd ? ; > order
high dd ?
rand_seed dw ?
align 8
buffer dq ?
errr dd ?
drr dd ?
xx dd ?
yy dd ?
xst dd ?
yst dd ?
; screen_ptr dd ?
; Zbuffer_ptr dd ?
 
matrix rb 36
cos_tab rd 360
sin_tab rd 360
 
align 16
 
 
points_count = 180000/6*3
triangles_count = 180000 / 6 ;($-triangles)/6
align 16
label trizdd dword
label trizdq qword
triangles_with_z rw triangles_count*4 + 2 ; triangles triple dw + z position
align 16
vectors rb 24
align 16
bumpmap rb TEXTURE_SIZE + 1
align 16
bumpmap2 rb TEXTURE_SIZE + 1
align 16
envmap rb (TEXTURE_SIZE +1) * 3
align 16
envmap_cub rb TEX_X * 3
align 16
texmap rb (TEXTURE_SIZE +1) * 3
align 16
color_map rb (TEXTURE_SIZE +100) * 3
align 16
tex_points rb points_count * 4 ; bump_map and texture coords
; each point word x, word y
align 16
lights_aligned:
lights_aligned_end = $ + 16 * 12
rb 16 * 12
 
 
if Ext >= SSE2
sse_repository rb 1024
end if
; SourceFile: ; source file temporally in screen area
; workarea dd ?
 
; screen rb SIZE_X * SIZE_Y * 3 ; screen buffer
;align 16
; Z_buffer rb SIZE_X * SIZE_Y * 4
procinfo:
rb 1024 ; process info
I_Param rb 256
memStack:
rb 2000
align 16
screen:
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/flat_cat.inc
0,0 → 1,399
CATMULL_SHIFT equ 16
 
 
flat_triangle_z:
; procedure drawing triangle with Z cordinate interpolation ------
; (Catmull alghoritm)--------------------------------------------
; ----------------in - eax - x1 shl 16 + y1 ----------------------
; -------------------- ebx - x2 shl 16 + y2 ----------------------
; -------------------- ecx - x3 shl 16 + y3 ----------------------
; -------------------- edx - color 0x00RRGGBB --------------------
; -------------------- esi - pointer to Z-buffer -----------------
; -------------------- edi - pointer to screen buffer-------------
; -------------------- stack : z coordinates
; -------------------- Z-buffer : each z variable as dword
; -------------------- (Z coor. as word) shl CATMULL_SHIFT
.z1 equ word[ebp+4]
.z2 equ word[ebp+6] ; each z coordinate as word integer
.z3 equ word[ebp+8]
 
.col equ dword[ebp-4]
.x1 equ word[ebp-6]
.y1 equ word[ebp-8]
.x2 equ word[ebp-10]
.y2 equ word[ebp-12]
.x3 equ word[ebp-14]
.y3 equ word[ebp-16]
 
.dx12 equ dword[ebp-20]
;.dz12 equ dword[ebp-24]
.dx13 equ dword[ebp-24]
.dz13 equ dword[ebp-28]
.dz12 equ dword[ebp-32]
;.dz13 equ dword[ebp-32]
.dx23 equ dword[ebp-36]
.dz13M equ [ebp-40]
.dz23 equ dword[ebp-44]
.zz1 equ dword[ebp-48]
.zz2 equ dword[ebp-52]
.zz2M equ qword[ebp-52]
.dz12M equ qword[ebp-32]
.dz23M equ qword[ebp-44]
;if Ext>=MMX
; emms
;end if
mov ebp,esp
 
push edx ; store edx in variable .col
.sort2:
cmp ax,bx
jle .sort1
xchg eax,ebx
mov dx,.z1
xchg dx,.z2
mov .z1,dx
.sort1:
cmp bx,cx
jle .sort3
xchg ebx,ecx
mov dx,.z2
xchg dx,.z3
mov .z2,dx
jmp .sort2
.sort3:
push eax ; store triangle coordinates in user friendly variables
push ebx
push ecx
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
and edx,ebx ; if *all* of them are negative a sign flag is raised
and edx,ecx
and edx,eax
test edx,80008000h ; Check both X&Y at once
jne .ft_loop2_end
; cmp ax,SIZE_Y
; jle @f
; cmp bx,SIZE_Y
; jle @f
; cmp cx,SIZE_Y
; jge @f
; ror eax,16
; ror ebx,16
; ror ecx,16
; cmp ax,SIZE_X
; jle @f
; cmp bx,SIZE_X
; jle @f
; cmp cx,SIZE_X
; jle @f
; jmp .ft_loop2_end
;@@:
sub esp,52-12
 
mov bx,.y2 ; calc delta 12
sub bx,.y1
jnz .ft_dx12_make
mov .dx12,0
mov .dz12,0
jmp .ft_dx12_done
.ft_dx12_make:
mov ax,.x2
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
mov .dx12,eax
 
mov ax,.z2
sub ax,.z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
mov .dz12,eax
.ft_dx12_done:
mov bx,.y3 ; calc delta 13
sub bx,.y1
jnz .ft_dx13_make
mov .dx13,0
mov .dz13,0
mov dword .dz13M,0
jmp .ft_dx13_done
.ft_dx13_make:
mov ax,.x3
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
mov .dx13,eax
 
mov ax,.z3
sub ax,.z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
mov .dz13,eax
mov dword .dz13M,eax
.ft_dx13_done:
mov bx,.y3 ; calc delta 23
sub bx,.y2
jnz .gt_dx23_make
mov .dx23,0
mov .dz23,0
jmp .gt_dx23_done
.gt_dx23_make:
mov ax,.x3
sub ax,.x2
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
mov .dx23,eax
 
mov ax,.z3
sub ax,.z2
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
mov .dz23,eax
.gt_dx23_done:
 
movsx edx,.z1
shl edx,CATMULL_SHIFT
mov .zz1,edx
mov .zz2,edx
movsx eax,.x1
shl eax,ROUND ; eax - x1
mov ebx,eax ; ebx - x2
;if Ext>=MMX
; movq mm0,.zz2M
;end if
mov cx,.y1
cmp cx,.y2
jge .ft_loop1_end
.ft_loop1:
 
pushad
 
push .col
push cx ; y
sar ebx,ROUND
push bx ; x2
sar eax,ROUND
push ax ; x1
;if Ext>=MMX
; sub esp,8
; movq [esp],mm0
;else
push .zz2 ; z2 shl CATMULL_SHIFT
push .zz1 ; z1 shl CATMULL_SHIFT
;end if
call flat_line_z
 
popad
 
add eax,.dx13
add ebx,.dx12
;if Ext>=MMX
; paddd mm0,.dz12M
;else
 
mov edx,.dz13
add .zz1,edx
mov edx,.dz12
add .zz2,edx
;end if
inc cx
cmp cx,.y2
jl .ft_loop1
.ft_loop1_end:
 
movsx edx,.z2
shl edx,CATMULL_SHIFT
mov .zz2,edx
movsx ebx,.x2
shl ebx,ROUND
;if Ext>=MMX
; movq mm0,.zz2M
;; push .dz13 ; exchange
;; pop .dz12
;; push .dz23 ; exchange
;; pop .dz13
;end if
mov cx,.y2
cmp cx,.y3
jge .ft_loop2_end
.ft_loop2:
pushad
 
push .col
push cx
sar ebx,ROUND
push bx
sar eax,ROUND
push ax ; x1
;if Ext>=MMX
; sub esp,8
; movq [esp],mm0
;else
push .zz2 ; z2 shl CATMULL_SHIFT
push .zz1 ; z1 shl CATMULL_SHIFT
;end if
call flat_line_z
 
popad
 
add eax,.dx13
add ebx,.dx23
;if Ext>=MMX
; paddd mm0,.dz23M
;else
mov edx,.dz13
add .zz1,edx
mov edx,.dz23
add .zz2,edx
 
; mov edx,.dz13
; add .zz1,edx
; mov edx,.dz12
; add .zz2,edx
;end if
inc cx
cmp cx,.y3
jl .ft_loop2
.ft_loop2_end:
 
mov esp,ebp
ret 6
 
flat_line_z:
;----------------
;-------------in edi - pointer to screen buffer ----------------------------------
;--------------- esi - pointer to z-buffer (each Z varible dword)-----------------
;----------stack - (each z coordinate shifted shl CATMULL_SHIFT)------------------
.z1 equ dword [ebp+4]
.z2 equ dword [ebp+8]
.x1 equ word [ebp+12]
.x2 equ word [ebp+14]
.y equ word [ebp+16]
.col equ dword [ebp+18]
 
.dz equ dword [ebp-4]
 
mov ebp,esp
;; sub esp,4
mov ax,.y
or ax,ax
jl .fl_quit
mov bx,[size_y_var]
dec bx
cmp ax,bx ;[size_y_var]
; cmp ax,SIZE_Y-1
jg .fl_quit
 
; cmp .x1,0
; jge .fl_ok1
; cmp .x2,0
; jl .fl_quit
; .fl_ok1:
; cmp .x1,SIZE_X
; jle .fl_ok2
; cmp .x2,SIZE_X
; jg .fl_quit
; .fl_ok2:
mov ax,.x1
cmp ax,.x2
je .fl_quit
jl .fl_ok
 
xchg ax,.x2
mov .x1,ax
mov edx,.z1
xchg edx,.z2
mov .z1,edx
.fl_ok:
mov bx,[size_x_var]
dec bx
cmp .x1,bx ;SIZE_X-1
jg .fl_quit
cmp .x2,0
jle .fl_quit
 
mov eax,.z2
sub eax,.z1
cdq
mov bx,.x2
sub bx,.x1
movsx ebx,bx
idiv ebx
;; mov .dz,eax ; calculated delta - shifted .dz
push eax
 
cmp .x1,0
jge @f
movsx ebx,.x1
neg ebx
imul ebx
add .z1,eax
mov .x1,0
@@:
movzx edx,word[size_x_var]
cmp .x2,dx ;[size_x_var] ;SIZE_X
jl @f
mov .x2,dx ;[size_x_var] ;SIZE_X
@@:
; movzx edx,[size_x_var] ;SIZE_X
movsx eax,.y
mul edx ; edi = edi + (SIZE_X * y + x1)*3
movsx edx,.x1
add eax,edx
push eax
lea eax,[eax*3]
add edi,eax ; esi = esi + (SIZE_X * y + x1)*4
pop eax
shl eax,2
add esi,eax
 
mov cx,.x2
sub cx,.x1
movzx ecx,cx
 
mov eax,.col
mov ebx,.z1 ; ebx : curr. z
mov edx,.dz
dec ecx
jecxz .draw_last
.ddraw:
cmp ebx,dword[esi]
; cmovl [edi],eax
; cmovl [esi],ebx
jge @f
stosd
dec edi
mov dword[esi],ebx
jmp .no_skip
@@:
add edi,3
.no_skip:
add esi,4
add ebx,edx
loop .ddraw
 
.draw_last:
cmp ebx,dword[esi]
jge .fl_quit
stosw
shr eax,16
stosb
mov dword[esi],ebx
 
.fl_quit:
 
mov esp,ebp
ret 18
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/grd_cat.inc
0,0 → 1,704
ROUND equ 8
CATMULL_SHIFT equ 8
gouraud_triangle_z:
 
;----procedure drawing gouraud triangle with z coordinate
;----interpolation ( Catmull alghoritm )-----------------
;------------------in - eax - x1 shl 16 + y1 ------------
;---------------------- ebx - x2 shl 16 + y2 ------------
;---------------------- ecx - x3 shl 16 + y3 ------------
;---------------------- esi - pointer to Z-buffer--------
;---------------------- Z-buffer filled with dd variables
;---------------------- shifted CATMULL_SHIFT------------
;---------------------- edi - pointer to screen buffer---
;---------------------- stack : colors-------------------
;----------------- procedure don't save registers !!-----
.col1r equ ebp+4 ; each color as word
.col1g equ ebp+6 ; each z coordinate as word
.col1b equ ebp+8
.z1 equ ebp+10
.col2r equ ebp+12
.col2g equ ebp+14
.col2b equ ebp+16
.z2 equ ebp+18
.col3r equ ebp+20
.col3g equ ebp+22
.col3b equ ebp+24
.z3 equ ebp+26
 
.x1 equ word[ebp-2]
.y1 equ word[ebp-4]
.x2 equ word[ebp-6]
.y2 equ word[ebp-8]
.x3 equ word[ebp-10]
.y3 equ word[ebp-12]
 
.dx12 equ dword[ebp-16]
.dz12 equ dword[ebp-20]
.dc12r equ dword[ebp-24]
.dc12g equ dword[ebp-28]
.dc12b equ dword[ebp-32]
 
.dx13 equ dword[ebp-36]
.dz13 equ dword[ebp-40]
.dc13r equ dword[ebp-44]
.dc13g equ dword[ebp-48]
.dc13b equ dword[ebp-52]
 
.dx23 equ dword[ebp-56]
.dz23 equ dword[ebp-60]
.dc23r equ dword[ebp-64]
.dc23g equ dword[ebp-68]
.dc23b equ dword[ebp-72]
 
.zz1 equ dword[ebp-76]
.c1r equ dword[ebp-80]
.c1g equ dword[ebp-84]
.c1b equ dword[ebp-88]
.zz2 equ dword[ebp-92]
.c2r equ dword[ebp-96]
.c2g equ dword[ebp-100]
.c2b equ dword[ebp-104]
;.zz1 equ dword[ebp-100]
;.zz2 equ dword[ebp-104]
 
.c1bM equ [ebp-88]
.c2bM equ [ebp-104]
.c1rM equ [ebp-80]
.c2rM equ [ebp-96]
.dc23bM equ [ebp-72]
.dc13bM equ [ebp-52]
.dc12bM equ [ebp-32]
.dc12rM equ [ebp-24]
.dc13rM equ [ebp-44]
.dc23rM equ [ebp-64]
if Ext=MMX
emms
end if
 
mov ebp,esp
; sub esp,84
.sort3: ; sort triangle coordinates...
cmp ax,bx
jle .sort1
xchg eax,ebx
mov edx,dword[.col1r]
xchg edx,dword[.col2r]
mov dword[.col1r],edx
mov edx,dword[.col1b]
xchg edx,dword[.col2b]
mov dword[.col1b],edx
.sort1:
cmp bx,cx
jle .sort2
xchg ebx,ecx
mov edx,dword[.col2r]
xchg edx,dword[.col3r]
mov dword[.col2r],edx
mov edx,dword[.col2b]
xchg edx,dword[.col3b]
mov dword[.col2b],edx
jmp .sort3
.sort2:
push eax ; store in variables
push ebx
push ecx
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
and edx,ebx ; if *all* of them are negative a sign flag is raised
and edx,ecx
and edx,eax
test edx,80008000h ; Check both X&Y at once
jne .gt_loop2_end
 
mov bx,.y2 ; calc deltas
sub bx,.y1
jnz .gt_dx12_make
; mov .dx12,0
; mov .dz12,0
; mov .dc12r,0
; mov .dc12g,0
; mov .dc12b,0
mov ecx,5
@@:
push dword 0
loop @b
jmp .gt_dx12_done
.gt_dx12_make:
mov ax,.x2
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx12,eax
push eax
 
mov ax,word[.z2]
sub ax,word[.z1]
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
push eax
 
mov ax,word[.col2r]
sub ax,word[.col1r]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc12r,eax
push eax
mov ax,word[.col2g]
sub ax,word[.col1g]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc12g,eax
push eax
mov ax,word[.col2b] ;;---
sub ax,word[.col1b]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc12b,eax
push eax
.gt_dx12_done:
 
mov bx,.y3 ; calc deltas
sub bx,.y1
jnz .gt_dx13_make
; mov .dx13,0
; mov .dz13,0
; mov .dc13r,0
; mov .dc13g,0
; mov .dc13b,0
mov ecx,5
@@:
push dword 0
loop @b
jmp .gt_dx13_done
.gt_dx13_make:
mov ax,.x3
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx13,eax
push eax
 
mov ax,word[.z3]
sub ax,word[.z1]
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
push eax
 
mov ax,word[.col3r]
sub ax,word[.col1r]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc13r,eax
push eax
mov ax,word[.col3g]
sub ax,word[.col1g]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc13g,eax
push eax
mov ax,word[.col3b]
sub ax,word[.col1b]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc13b,eax
push eax
.gt_dx13_done:
 
mov bx,.y3 ; calc deltas
sub bx,.y2
jnz .gt_dx23_make
; mov .dx23,0
; mov .dz23,0
; mov .dc23r,0
; mov .dc23g,0
; mov .dc23b,0
mov ecx,5
@@:
push dword 0
loop @b
jmp .gt_dx23_done
.gt_dx23_make:
mov ax,.x3
sub ax,.x2
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx23,eax
push eax
 
mov ax,word[.z3]
sub ax,word[.z2]
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
push eax
 
mov ax,word[.col3r]
sub ax,word[.col2r]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc23r,eax
push eax
mov ax,word[.col3g]
sub ax,word[.col2g]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc23g,eax
push eax
mov ax,word[.col3b]
sub ax,word[.col2b]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc23b,eax
push eax
.gt_dx23_done:
sub esp,32
 
movsx eax,.x1 ; eax - cur x1
shl eax,ROUND ; ebx - cur x2
mov ebx,eax
movsx edx,word[.z1]
shl edx,CATMULL_SHIFT
mov .zz1,edx
mov .zz2,edx
movzx edx,word[.col1r]
shl edx,ROUND
mov .c1r,edx
mov .c2r,edx
movzx edx,word[.col1g]
shl edx,ROUND
mov .c1g,edx
mov .c2g,edx
movzx edx,word[.col1b]
shl edx,ROUND
mov .c1b,edx
mov .c2b,edx
mov cx,.y1
cmp cx,.y2
jge .gt_loop1_end
 
.gt_loop1:
pushad
; macro .debug
 
mov edx,.c2r ; c2r,c2g,c2b,c1r,c1g,c1b - current colors
sar edx,ROUND
push dx
mov edx,.c2g
sar edx,ROUND
push dx
mov edx,.c2b
sar edx,ROUND
push dx
sar ebx,ROUND ; x2
push bx
mov edx,.c1r
sar edx,ROUND
push dx
mov edx,.c1g
sar edx,ROUND
push dx
mov edx,.c1b
sar edx,ROUND
push dx
sar eax,ROUND
push ax ; x1
push cx ; y
push .zz2
push .zz1
call gouraud_line_z
 
popad
if Ext >= MMX
movq mm0,.c1bM
paddd mm0,qword .dc13bM
movq .c1bM,mm0
movq mm1,.c2bM
paddd mm1,qword .dc12bM
movq .c2bM,mm1
 
movq mm0,.c1rM
paddd mm0,qword .dc13rM
movq .c1rM,mm0
movq mm1,.c2rM
paddd mm1,qword .dc12rM
movq .c2rM,mm1
else
mov edx,.dc13r
add .c1r,edx
mov edx,.dc13g
add .c1g,edx
mov edx,.dc13b
add .c1b,edx
mov edx,.dc12r
add .c2r,edx
mov edx,.dc12g
add .c2g,edx
mov edx,.dc12b
add .c2b,edx
 
mov edx,.dz13
add .zz1,edx
mov edx,.dz12
add .zz2,edx
end if
add eax,.dx13
add ebx,.dx12
inc cx
cmp cx,.y2
jl .gt_loop1
 
.gt_loop1_end:
mov cx,.y2
cmp cx,.y3
jge .gt_loop2_end
 
movsx ebx,.x2 ; eax - cur x1
shl ebx,ROUND ; ebx - cur x2
movsx edx,word[.z2]
shl edx,CATMULL_SHIFT
mov .zz2,edx
movzx edx,word[.col2r]
shl edx,ROUND
mov .c2r,edx
movzx edx,word[.col2g]
shl edx,ROUND
mov .c2g,edx
movzx edx,word[.col2b]
shl edx,ROUND
mov .c2b,edx
 
.gt_loop2:
pushad
; macro .debug
 
mov edx,.c2r ; c2r,c2g,c2b,c1r,c1g,c1b - current colors
sar edx,ROUND
push dx
mov edx,.c2g
sar edx,ROUND
push dx
mov edx,.c2b
sar edx,ROUND
push dx
sar ebx,ROUND ; x2
push bx
mov edx,.c1r
sar edx,ROUND
push dx
mov edx,.c1g
sar edx,ROUND
push dx
mov edx,.c1b
sar edx,ROUND
push dx
sar eax,ROUND
push ax ; x1
push cx ; y
push .zz2
push .zz1
call gouraud_line_z
 
popad
 
if Ext >= MMX
movq mm0,.c1bM
paddd mm0,qword .dc13bM
movq .c1bM,mm0
movq mm1,.c2bM
paddd mm1,qword .dc23bM
movq .c2bM,mm1
 
movq mm0,.c1rM
paddd mm0,qword .dc13rM
movq .c1rM,mm0
movq mm1,.c2rM
paddd mm1,qword .dc23rM
movq .c2rM,mm1
else
mov edx,.dc13r
add .c1r,edx
mov edx,.dc13g
add .c1g,edx
mov edx,.dc13b
add .c1b,edx
mov edx,.dc23r
add .c2r,edx
mov edx,.dc23g
add .c2g,edx
mov edx,.dc23b
add .c2b,edx
mov edx,.dz13
add .zz1,edx
mov edx,.dz23
add .zz2,edx
end if
add eax,.dx13
add ebx,.dx23
inc cx
cmp cx,.y3
jl .gt_loop2
.gt_loop2_end:
 
mov esp,ebp
ret 24
gouraud_line_z:
;----------------- procedure drawing gouraud line
;----------------- with z coordinate interpolation
;----------------- esi - pointer to Z_buffer
;----------------- edi - pointer to screen buffer
;----------------- stack:
.z1 equ dword[ebp+4] ; z coordiunate shifted left CATMULL_SHIFT
.z2 equ dword[ebp+8]
.y equ word[ebp+12]
.x1 equ ebp+14
.c1b equ ebp+16
.c1g equ ebp+18
.c1r equ ebp+20
.x2 equ ebp+22
.c2b equ ebp+24
.c2g equ ebp+26
.c2r equ ebp+28
 
.dz equ dword[ebp-4]
.dc_b equ dword[ebp-8]
.dc_g equ dword[ebp-12]
.dc_r equ dword[ebp-16]
.c_z equ dword[ebp-20]
.cb equ dword[ebp-24]
.cg equ dword[ebp-28]
.cr equ dword[ebp-32]
;.cg2 equ dword[ebp-36]
 
 
.crM equ ebp-32
.cgM equ ebp-28
.cbM equ ebp-24
 
.dc_rM equ ebp-16
.dc_gM equ ebp-12
.dc_bM equ ebp-8
mov ebp,esp
 
mov ax,.y
or ax,ax
jl .gl_quit
mov bx,[size_y_var]
dec bx
cmp ax,bx ;SIZE_Y
jge .gl_quit
 
mov eax,dword[.x1]
cmp ax,word[.x2]
je .gl_quit
jl @f
 
xchg eax,dword[.x2]
mov dword[.x1],eax
mov eax,dword[.c1g]
xchg eax,dword[.c2g]
mov dword[.c1g],eax
mov eax,.z1
xchg eax,.z2
mov .z1,eax
@@:
mov bx,[size_x_var]
dec bx
cmp word[.x1],bx ;SIZE_X
jge .gl_quit
cmp word[.x2],0
jle .gl_quit
 
mov eax,.z2
sub eax,.z1
cdq
mov bx,word[.x2] ; dz = z2-z1/x2-x1
sub bx,word[.x1]
movsx ebx,bx
idiv ebx
push eax
 
mov ax,word[.c2b]
sub ax,word[.c1b]
cwde
shl eax,ROUND
cdq
idiv ebx
push eax
 
mov ax,word[.c2g]
sub ax,word[.c1g]
cwde
shl eax,ROUND
cdq
idiv ebx
push eax
 
mov ax,word[.c2r]
sub ax,word[.c1r]
cwde
shl eax,ROUND ; dc_r = c2r-c1r/x2-x1
cdq
idiv ebx
push eax
 
cmp word[.x1],0 ; clipping on function
jg @f
mov eax,.dz
movsx ebx,word[.x1]
neg ebx
imul ebx
add .z1,eax
mov word[.x1],0
 
mov eax,.dc_r
imul ebx
sar eax,ROUND
add word[.c1r],ax
 
mov eax,.dc_g
imul ebx
sar eax,ROUND
add word[.c1g],ax
 
mov eax,.dc_b
imul ebx
sar eax,ROUND
add word[.c1b],ax
 
@@:
mov bx,[size_x_var]
dec bx
cmp word[.x2],bx ;SIZE_X
jl @f
mov word[.x2],bx ;SIZE_X
@@:
sub esp,16 ; calculate memory begin
movzx edx,word[size_x_var] ;SIZE_X ; in buffers
movzx eax,.y
mul edx
movzx edx,word[.x1]
add eax,edx
push eax
lea eax,[eax*3]
add edi,eax
pop eax
shl eax,2
add esi,eax
 
mov cx,word[.x2]
sub cx,word[.x1]
movzx ecx,cx
mov ebx,.z1 ; ebx - currrent z shl CATMULL_SIFT
;if Ext >= SSE
; mov .cz,edx
;end if
mov edx,.dz ; edx - delta z
movzx eax,word[.c1r]
shl eax,ROUND
mov .cr,eax
movzx eax,word[.c1g]
shl eax,ROUND
mov .cg,eax
movzx eax,word[.c1b]
shl eax,ROUND
mov .cb,eax
if Ext = MMX
; mov .c_z,edx
movd mm2,[.dc_bM] ; delta color blue MMX
movd mm3,[.cbM] ; current blue MMX
movq mm5,[.dc_rM]
movq mm4,[.crM]
pxor mm6,mm6
end if
 
 
.ddraw:
;if Ext = MMX
; movq mm0,mm3
; psrsq mm0,32
; movd ebx,mm0
;end if
cmp ebx,dword[esi] ; esi - z_buffer
jge @f ; edi - Screen buffer
if Ext = MMX
movq mm0,mm3 ; mm0, mm1 - temp registers
psrld mm0,ROUND
movq mm1,mm4
psrld mm1,ROUND
packssdw mm1,mm0
packuswb mm1,mm6
; movd [edi],mm1
movd eax,mm1
stosw
shr eax,16
stosb
else
mov eax,.cr
sar eax,ROUND
stosb
mov eax,.cg
sar eax,ROUND
stosb
mov eax,.cb
sar eax,ROUND
stosb
end if
mov dword[esi],ebx
;if Ext = NON
jmp .no_skip
;end if
@@:
add edi,3
.no_skip:
add esi,4
;if Ext=NON
add ebx,edx
;end if
if Ext=MMX
paddd mm3,mm2
paddd mm4,mm5
else
mov eax,.dc_g
add .cg,eax
mov eax,.dc_b
add .cb,eax
mov eax,.dc_r
add .cr,eax
end if
loop .ddraw
 
.gl_quit:
mov esp,ebp
ret 26
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/grd_line.inc
0,0 → 1,643
;-procedure draws smooth shaded lines (I mean interpolation 24 bit--
;-color), with z coord interpolation--------------------------------
;-author: Maciej Guba (www.macgub.hekko.pl)-------------------------
;-in : -------------------------------------------------------------
;----- edi - pointer to screen buffer ------------------------------
;----- esi - pointer to Z buffer -----------------------------------
;------ constans : SIZE_X, SIZE_Y - screen width and height---------
;----------------- ROUND - fixed point shift------------------------
;------ other parameters via stack----------------------------------
smooth_line:
.x1 equ ebp+4
.y1 equ ebp+6
.z1 equ ebp+8
.r1 equ ebp+10
.g1 equ ebp+12
.b1 equ ebp+14
.x2 equ ebp+16
.y2 equ ebp+18
.z2 equ ebp+20
.r2 equ ebp+22
.g2 equ ebp+24
.b2 equ ebp+26
 
 
.line_lenght equ ebp-2
.delta equ ebp-6
.delta_x equ ebp-10
.delta_y equ ebp-14
.dr equ ebp-18
.dg equ ebp-22
.db equ ebp-26
.dz equ ebp-30
.cr equ ebp-34
.cg equ ebp-38
.cb equ ebp-42
.cz equ ebp-46
 
;.line_lenght equ ebp-48
.screen equ ebp-52
.zbuffer equ ebp-56
.ccoord equ ebp-60 ;current coordinate
.czbuf equ ebp-64
.cscr equ ebp-68
.xres equ ebp-72
.yres equ ebp-76
.xresm1 equ ebp-80
.yresm1 equ ebp-84
.xresp1 equ ebp-88
.yresp1 equ ebp-92
.xres3 equ ebp-96
.xres4 equ ebp-100
 
macro .update_cur_var
{
if Ext=NON
mov ebx,[.dz]
add [.cz],ebx
mov ebx,[.dr]
add [.cr],ebx
mov ebx,[.dg]
add [.cg],ebx
mov ebx,[.db]
add [.cb],ebx
elseif Ext=MMX
movq mm0,[.cz]
movq mm1,[.cg]
paddd mm0,mm2 ;[.dz]
paddd mm1,mm3 ;[.dg]
movq [.cz],mm0
movq [.cg],mm1
elseif Ext >= SSE2
; movups xmm1,[.cz]
paddd xmm1,xmm0
; movups [.cz],xmm1
end if
}
macro .draw_pixel
{
mov [esi],ebx ; actualize Z buffer
if Ext>=SSE2
movaps xmm7,xmm1 ;[.cb] ;;xmm1
shufps xmm7,xmm7,00111001b
psrld xmm7,ROUND
packssdw xmm7,xmm7
packuswb xmm7,xmm7
pand xmm7,xmm6 ;[.mask]
movd [edi],xmm7
else
 
mov eax,[.cb]
sar eax,ROUND
mov [edi],al
; and eax,0x000000ff ; clean unused bits
mov ebx,[.cg]
sar ebx,ROUND
mov [edi+1],bl
; mov ah,bl
mov edx,[.cr]
sar edx,ROUND
mov [edi+2],dl
end if
; shl ebx,16
; or eax,ebx
; mov [edi],eax
}
macro .sort
{
 
if Ext >= MMX
movq mm0,[.x1]
movq mm1,[.x2]
movq [.x1],mm1
movq [.x2],mm0
else
mov edx,[.x1]
xchg edx,[.x2]
mov [.x1],edx
mov edx,[.z1]
xchg edx,[.z2]
mov [.z1],edx
end if
mov edx,[.g1]
xchg edx,[.g2]
mov [.g1],edx
}
 
 
 
emms
mov ebp,esp
sub esp,128
mov eax,[.x1] ; check if parameters exceedes screen area
mov ebx,[.x2]
or eax,ebx
test eax,80008000h
jne .end_line
movzx edx,word [size_x_var]
mov [.xres],edx
dec edx
movzx ecx,word [size_y_var]
mov [.yres],ecx
dec ecx
cmp word[.x1],dx ;SIZE_X
jg .end_line
cmp word[.x2],dx ;SIZE_X
jg .end_line
cmp word[.y1],cx ;SIZE_Y
jg .end_line
cmp word[.y2],cx ;SIZE_Y
jg .end_line
 
mov edx,[.xres]
shl edx,2
mov [.xres4],edx
shr edx,2
lea edx,[edx*3]
mov [.xres3],edx
mov edx,[.xres]
mov ecx,[.yres]
dec edx
dec ecx
mov [.xresm1],edx
mov [.yresm1],ecx
add edx,2
add ecx,2
mov [.xresp1],edx
mov [.yresp1],ecx
 
mov [.screen],edi
mov cx,[.x1]
cmp cx,[.x2]
je .vertical_l
mov cx,[.y1]
cmp cx,[.y2]
je .horizontal_l
mov ax,[.x1]
sub ax,[.x2]
cmp ax,0
jg @f
neg ax ; calc absolute value
@@:
mov [.delta_x],ax
mov bx,[.y1]
sub bx,[.y2]
cmp bx,0
jg @f
neg bx
@@:
mov [.delta_y],bx
cmp ax,bx
je .deg45_l
jl .more_vertical_l
jg .more_horizon_l
jmp .end_line
;
.horizontal_l:
mov ax,[.x1]
mov bx,[.x2]
cmp bx,ax
jge @f
 
.sort
@@:
 
mov bx,[.x2]
sub bx,[.x1]
movsx ebx,bx
cmp ebx,0 ;line lenght equql 0
je .end_line
mov [.delta_x],ebx
 
call .calc_delta
 
mov eax,[.xres] ;SIZE_X
movsx ebx,word[.y1]
mul ebx
add esi,eax
lea eax,[eax*3]
add esi,eax
add edi,eax
movsx eax,word[.x1]
add esi,eax
lea eax,[eax*3]
add edi,eax
add esi,eax
 
mov ecx,[.delta_x]
 
movsx ebx,word[.r1]
shl ebx,ROUND
mov [.cr],ebx
movsx ebx,word[.g1]
shl ebx,ROUND
mov [.cg],ebx
movsx ebx,word[.b1]
shl ebx,ROUND
mov [.cb],ebx
movsx ebx,word[.z1]
shl ebx,ROUND
mov [.cz],ebx
if Ext >= SSE2
movups xmm1,[.cz]
end if
.hdraw:
if Ext >= SSE2
movd ebx,xmm1
else
mov ebx,[.cz]
end if
cmp [esi],ebx
jle .skip
 
.draw_pixel
 
.skip:
add edi,3
add esi,4
 
.update_cur_var
 
loop .hdraw
jmp .end_line
 
.vertical_l:
mov ax,[.y1]
cmp [.y2],ax
jge @f
 
.sort
@@:
mov bx,[.y2]
sub bx,[.y1]
movsx ebx,bx
cmp ebx,0
je .end_line
mov [.delta_y],ebx
 
call .calc_delta
 
mov eax,[.xres] ;SIZE_X
movsx ebx,word[.y1]
mul ebx
add esi,eax
lea eax,[eax*3]
add edi,eax
add esi,eax
movsx eax,word[.x1]
add esi,eax
lea eax,[eax*3]
add esi,eax
add edi,eax
 
mov ecx,[.delta_y]
 
movsx ebx,word[.r1]
shl ebx,ROUND
mov [.cr],ebx
movsx ebx,word[.g1]
shl ebx,ROUND
mov [.cg],ebx
movsx ebx,word[.b1]
shl ebx,ROUND
mov [.cb],ebx
movsx ebx,word[.z1]
shl ebx,ROUND
mov [.cz],ebx
if Ext >= SSE2
movups xmm1,[.cz]
end if
 
.v_draw:
if Ext >= SSE2
movd ebx,xmm1
else
mov ebx,[.cz]
end if
cmp [esi],ebx
jle @f
 
.draw_pixel
 
@@:
add edi,[.xres3]
add esi,[.xres4]
 
.update_cur_var
 
loop .v_draw
jmp .end_line
.deg45_l:
mov word[.line_lenght],ax
mov ax,[.x1]
cmp [.x2],ax
jge @f
 
.sort
@@:
mov bx,[.y2]
sub bx,[.y1]
movsx ebx,bx
cmp ebx,0
je .end_line
mov [.delta_y],ebx
mov bx,[.x2]
sub bx,[.x1]
movsx ebx,bx
mov [.delta_x],ebx
 
call .calc_delta
 
mov eax,[.xres]
movsx ebx,word[.y1] ;calc begin values in screen and Z buffers
mul ebx
lea ebx,[3*eax]
add edi,ebx
shl eax,2
add esi,eax
movsx eax,word[.x1]
lea ebx,[eax*3]
add edi,ebx
shl eax,2
add esi,eax
 
movzx ecx,word[.line_lenght]
 
movsx ebx,word[.r1]
shl ebx,ROUND
mov [.cr],ebx
movsx ebx,word[.g1]
shl ebx,ROUND
mov [.cg],ebx
movsx ebx,word[.b1]
shl ebx,ROUND
mov [.cb],ebx
movsx ebx,word[.z1]
shl ebx,ROUND
mov [.cz],ebx
.d45_draw:
if Ext >= SSE2
movd ebx,xmm1
else
mov ebx,[.cz]
end if
cmp [esi],ebx
jle @f
 
.draw_pixel
 
@@:
cmp dword[.delta_y],0
jl @f
add edi,[.xres3] ;SIZE_X*3+3
add edi,3
add esi,[.xres4] ;SIZE_X*4+4
add esi,4
jmp .d45_1
@@:
sub edi,[.xres3] ;(SIZE_X*3)-3
sub edi,3
sub esi,[.xres4] ;(SIZE_X*4)-4
sub esi,4
.d45_1:
.update_cur_var
 
loop .d45_draw
jmp .end_line
 
.more_vertical_l:
mov word[.line_lenght],bx
mov ax,[.y1]
cmp [.y2],ax
jge @f
.sort
@@:
mov bx,[.y2]
sub bx,[.y1]
movsx ebx,bx
cmp ebx,0
je .end_line ;=======================
mov [.delta_y],ebx
 
mov ax,[.x2]
sub ax,[.x1]
cwde
shl eax,ROUND
cdq
idiv ebx
mov [.delta],eax
 
call .calc_delta
 
mov eax,[.xres] ;SIZE_X
movsx ebx,word[.y1] ;calc begin values in screen and Z buffers
mul ebx
lea ebx,[3*eax]
add esi,ebx
add esi,eax
add edi,ebx
mov [.cscr],edi
mov [.czbuf],esi
 
movzx ecx,word[.line_lenght]
 
movsx ebx,word[.r1]
shl ebx,ROUND
mov [.cr],ebx
movsx ebx,word[.g1]
shl ebx,ROUND
mov [.cg],ebx
movsx ebx,word[.b1]
shl ebx,ROUND
mov [.cb],ebx
movsx ebx,word[.z1]
shl ebx,ROUND
mov [.cz],ebx
if Ext >= SSE2
movups xmm1,[.cz]
end if
movsx ebx,word[.x1]
shl ebx,ROUND
mov [.ccoord],ebx ; .ccoord -> x coordinate
.draw_m_v:
mov edi,[.cscr]
mov esi,[.czbuf]
mov eax,[.ccoord]
sar eax,ROUND
lea ebx,[eax*3]
add edi,ebx
add esi,ebx
add esi,eax
if Ext >= SSE2
movd ebx,xmm1
else
mov ebx,[.cz]
end if
cmp [esi],ebx
jle @f
 
.draw_pixel
 
@@:
mov eax,[.delta]
mov ebx,[.xres3]
add [.ccoord],eax
mov eax,[.xres4]
add dword[.cscr],ebx ;SIZE_X*3 ;
add dword[.czbuf],eax ;SIZE_X*4
.d_m_v1:
 
.update_cur_var
 
dec ecx
jnz .draw_m_v
jmp .end_line
 
.more_horizon_l:
mov word[.line_lenght],ax
mov ax,[.x1]
cmp [.x2],ax
jge @f
 
.sort
@@:
mov bx,[.x2]
sub bx,[.x1]
movsx ebx,bx
cmp ebx,0;=======================
je .end_line
mov [.delta_x],ebx
 
mov ax,[.y2]
sub ax,[.y1]
cwde
shl eax,ROUND
cdq
idiv ebx
mov [.delta],eax
 
call .calc_delta
 
;calc begin values in screen and Z buffers
movsx ebx,word[.x1]
mov eax,ebx
add esi,ebx
lea ebx,[3*ebx]
add esi,ebx
add edi,ebx
mov [.cscr],edi
mov [.czbuf],esi
 
movzx ecx,word[.line_lenght]
 
movsx ebx,word[.r1]
shl ebx,ROUND
mov [.cr],ebx
movsx ebx,word[.g1]
shl ebx,ROUND
mov [.cg],ebx
movsx ebx,word[.b1]
shl ebx,ROUND
mov [.cb],ebx
movsx ebx,word[.z1]
shl ebx,ROUND
mov [.cz],ebx
if Ext >= SSE2
movups xmm1,[.cz]
end if
movsx ebx,word[.y1]
shl ebx,ROUND
mov [.ccoord],ebx ; .ccoord -> y coordinate
 
.draw_m_h:
mov edi,[.cscr]
mov esi,[.czbuf]
mov eax,[.ccoord] ; ccoord - cur y coordinate
sar eax,ROUND
mov ebx,[.xres] ;SIZE_X
mul ebx
add esi,eax
lea eax,[eax*3]
add esi,eax
add edi,eax
if Ext >= SSE2
movd ebx,xmm1
else
mov ebx,[.cz]
end if
cmp [esi],ebx
jle @f
 
.draw_pixel
 
@@:
mov eax,[.delta]
add [.ccoord],eax
add dword[.cscr],3 ;
add dword[.czbuf],4
 
.update_cur_var
 
dec ecx
jnz .draw_m_h
 
.end_line:
mov esp,ebp
ret 24
 
.calc_delta:
mov ax,[.z2]
sub ax,[.z1]
cwde
shl eax,ROUND
cdq
idiv ebx
mov [.dz],eax
 
mov ax,[.r2]
sub ax,[.r1]
cwde
shl eax,ROUND
cdq
idiv ebx
mov [.dr],eax
 
mov ax,[.g2]
sub ax,[.g1]
cwde
shl eax,ROUND
cdq
idiv ebx
mov [.dg],eax
 
mov ax,[.b2]
sub ax,[.b1]
cwde
shl eax,ROUND
cdq
idiv ebx
mov [.db],eax
if Ext=MMX | Ext = SSE
movq mm2,[.dz]
movq mm3,[.dg]
else if Ext >= SSE2
movups xmm0,[.dz]
movups xmm6,[.mask]
end if
ret
.mask:
dq 0xffffffff00ffffff
dq 0xffffffffffffffff
 
 
 
 
 
 
 
 
 
 
 
 
 
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/grd_tex.inc
0,0 → 1,1016
 
 
CATMULL_SHIFT equ 8
ROUND equ 8
;NON=0
;MMX=1
;Ext=MMX
;TEX_SIZE=0x3fff
;SIZE_X equ 512
;SIZE_Y equ 512
;ROUND = 8
;TEX_SHIFT equ 6
 
; procedure drawing textured triangle with Gouraud shading
; Z-buffer alghoritm included, Z coord interpolation ----
; I set the color by this way -- (col1 * col2)/256 ------
;------------------in - eax - x1 shl 16 + y1 ------------
;---------------------- ebx - x2 shl 16 + y2 ------------
;---------------------- ecx - x3 shl 16 + y3 ------------
;---------------------- esi - pointer to Z-buffer--------
;---------------------- edx - pointer to texture---------
;---------------------- Z-buffer filled with dd variables
;---------------------- shifted CATMULL_SHIFT------------
;---------------------- edi - pointer to screen buffer---
;---------------------- stack : colors-------------------
 
 
 
tex_plus_grd_triangle:
; parameters :
.tex_y3 equ [ebp+38] ; 36 bytes through stack
.tex_x3 equ [ebp+36]
.tex_y2 equ [ebp+34]
.tex_x2 equ [ebp+32]
.tex_y1 equ [ebp+30]
.tex_x1 equ [ebp+28]
 
.z3 equ [ebp+26]
.col3b equ [ebp+24]
.col3g equ [ebp+22]
.col3r equ [ebp+20]
 
.z2 equ [ebp+18]
.col2b equ [ebp+16]
.col2g equ [ebp+14]
.col2r equ [ebp+12]
 
.z1 equ [ebp+10]
.col1b equ [ebp+8]
.col1g equ [ebp+6]
.col1r equ [ebp+4]
 
; local variables:
 
.tex_ptr equ dword[ebp-4]
.z_ptr equ dword[ebp-8]
.scr_buff equ dword[ebp-12]
 
.x1 equ word[ebp-14] ;dw ? ;equ word[ebp-10]
.y1 equ word[ebp-16] ;dw ? ;equ word[ebp-12]
.x2 equ word[ebp-18] ;dw ? ;equ word[ebp-14]
.y2 equ word[ebp-20] ;dw ? ;equ word[ebp-16]
.x3 equ word[ebp-22] ;dw ? ;equ word[ebp-18]
.y3 equ word[ebp-24] ;dw ? ;equ word[ebp-20]
 
.dx12 equ dword[ebp-28] ;dd ?
.tex_dx12 equ dword[ebp-32] ;dd ?
.tex_dy12 equ [ebp-36] ;dd ?
.dz12 equ dword[ebp-40] ;dd ?
.dc12r equ [ebp-44] ;dd ?
.dc12g equ dword[ebp-48] ;dd ?
.dc12b equ [ebp-52] ;dd ?
 
.dx23 equ dword[ebp-56] ;dd ?
.tex_dx23 equ dword[ebp-60] ;dd ?
.tex_dy23 equ [ebp-64] ;dd ?
.dz23 equ dword[ebp-68] ;dd ?
.dc23r equ [ebp-72] ;dd ?
.dc23g equ dword[ebp-76] ;dd ?
.dc23b equ [ebp-80] ;dword[ebp-8]dd ?
 
.dx13 equ dword[ebp-84] ;dd ?
.tex_dx13 equ dword[ebp-88] ;dd ?
.tex_dy13 equ [ebp-92] ;dd ?
.dz13 equ dword[ebp-96] ;dd ?
.dc13r equ [ebp-100] ;dd ?
.dc13g equ dword[ebp-104] ;dd ?
.dc13b equ [ebp-108] ;dd ?
 
.scan_x1 equ dword[ebp-112] ;dd ?
.scan_y1 equ [ebp-116] ;dd ?
.zz1 equ dword[ebp-120] ;dw ?
.cur1r equ [ebp-124] ;dw ?
.cur1g equ dword[ebp-128] ;dw ?
.cur1b equ [ebp-132] ;dw ?
 
.scan_x2 equ dword[ebp-136] ;dd ?
.scan_y2 equ [ebp-140] ;dd ?
.zz2 equ dword[ebp-144] ;dw ?
.cur2r equ [ebp-148] ;dw ?
.cur2g equ dword[ebp-152] ;dw ?
.cur2b equ [ebp-156] ;dw ?
 
 
mov ebp,esp
 
; mov .tex_ptr,edx
; mov .z_ptr,esi
; mov .scr_buff,edi
push edx esi edi
; push esi
; push edi
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
and edx,ebx ; if *all* of them are negative a sign flag is raised
and edx,ecx
and edx,eax
test edx,80008000h ; Check both X&Y at once
jne .loop2_end
 
.sort3:
cmp ax,bx
jle .sort1
xchg eax,ebx
if Ext>=MMX
movq mm0, .col1r ; exchange r, g, b, z
movq mm1, .col2r
movq .col1r ,mm1
movq .col2r ,mm0
else
mov edx,dword .col1r ; exchange both r and g
xchg edx,dword .col2r
mov dword .col1r ,edx
 
mov edx,dword .col1b ; b and z
xchg edx,dword .col2b
mov dword .col1b ,edx
end if
 
mov edx,dword .tex_x1
xchg edx,dword .tex_x2
mov dword .tex_x1 ,edx
 
.sort1:
cmp bx,cx
jle .sort2
xchg ebx,ecx
 
if Ext>=MMX
movq mm0, .col2r ; exchange r, g, b, z
movq mm1, .col3r
movq .col3r ,mm0
movq .col2r ,mm1
else
 
mov edx,dword .col2r ; r, g
xchg edx,dword .col3r
mov dword .col2r,edx
 
mov edx,dword .col2b ; b, z
xchg edx,dword .col3b
mov dword .col2b,edx
end if
 
mov edx,dword .tex_x2
xchg edx,dword .tex_x3
mov dword .tex_x2,edx
 
jmp .sort3
 
.sort2:
 
push eax ebx ecx ; store in variables
; push ebx
; push ecx
 
;****************** delta computng zone **************
;+++++++++ first zone
mov bx,.y2 ; calc delta12
sub bx,.y1
jnz .dx12_make
mov ecx,7
@@:
push dword 0
loop @b
jmp .dx12_done
.dx12_make:
 
 
mov ax,.x2
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx12,eax
push eax
 
if 0 ; Ext=SSE
movd mm0,.col1r ; 2 words r, g
pxor mm1,mm1
punpcklwd mm0,mm1
cvtpi2ps xmm0,mm0
movlhps xmm0,xmm0
movd mm0,.col1g ; 2 words b, z
punpcklwd mm0,mm1
cvtpi2ps xmm0,mm0
; xmm0=four float double words
divss xmm0,.pack3
;convert and insert mm0 to lower xmm1 ..
end if
 
mov ax,word .tex_x2
sub ax,word .tex_x1
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .tex_dx12r,eax
push eax
 
mov ax,word .tex_y2
sub ax,word .tex_y1
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .tex_dx12,eax
push eax
 
mov ax,word .z2
sub ax,word .z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
; mov .dz12,eax
push eax ; .dza12
 
mov ax,word .col2r
sub ax,word .col1r
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc12r,eax
push eax
 
mov ax,word .col2g
sub ax,word .col1g
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc12g,eax
push eax
 
mov ax,word .col2b ;;---
sub ax,word .col1b
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc12b,eax
push eax
 
;+++++++++++++++++ second zone +++++++++++++
.dx12_done:
 
mov bx,.y3 ; calc delta23
sub bx,.y2
jnz .dx23_make
mov ecx,7
@@:
push dword 0
loop @b
jmp .dx23_done
 
.dx23_make:
mov ax,.x3
sub ax,.x2
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx23,eax
push eax
 
mov ax,word .tex_x3
sub ax,word .tex_x2
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .tex_dx23,eax
push eax
 
mov ax,word .tex_y3
sub ax,word .tex_y2
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .tex_dy23,eax
push eax
 
mov ax,word .z3
sub ax,word .z2
cwde ;
shl eax,CATMULL_SHIFT ; 2222222
cdq ; 2 2
idiv ebx ; 2
; mov .dz23,eax ; 2
push eax ; .dza12 ; 2
; 2
mov ax,word .col3r ; 2
sub ax,word .col2r ; 2222222
cwde ; second delta
shl eax,ROUND ;
cdq ;
idiv ebx ;
; mov .dc23r,eax ;
push eax
 
mov ax,word .col3g
sub ax,word .col2g
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc23g,eax
push eax
 
mov ax,word .col3b ;;---
sub ax,word .col2b
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc23b,eax
push eax
 
.dx23_done:
;++++++++++++++++++third zone++++++++++++++++++++++++
mov bx,.y3 ; calc delta13
sub bx,.y1
jnz .dx13_make
mov ecx,7
@@:
push dword 0
loop @b
jmp .dx13_done
.dx13_make:
mov ax,.x3
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx13,eax
push eax
 
mov ax,word .tex_x3 ; triangle b
sub ax,word .tex_x1
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .tex_dx13r,eax
push eax
 
mov ax,word .tex_y3
sub ax,word .tex_y1
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .tex_dy13,eax
push eax
 
mov ax,word .z3
sub ax,word .z1 ; 333333333
cwde ; 3 3
shl eax,CATMULL_SHIFT ; 3
cdq ; 3
idiv ebx ; 3
; mov .dz13,eax ; 3
push eax ; .dza12 ; 3
; 3
mov ax,word .col3r ; 3333333333
sub ax,word .col1r ; 3
cwde ; 3
shl eax,ROUND ; 3
cdq ; 3
idiv ebx ; 3
; mov .dc13r,eax ; 3 3
push eax ; 33333333
 
mov ax,word .col3g
sub ax,word .col1g
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc13g,eax
push eax
 
mov ax,word .col3b ;;---
sub ax,word .col1b
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dc13b,eax
push eax
 
.dx13_done:
 
; <<<<<<< ::delta zone end+++++++++++++++++++++ >>>>>>>>
sub esp,55 ;(12*4)
 
movsx eax,.x1 ; eax - cur x1
shl eax,ROUND ; ebx - cur x2
mov ebx,eax
movsx edx,word .z1
shl edx,CATMULL_SHIFT
mov .zz1,edx
mov .zz2,edx
 
movzx edi,word .col1r
shl edi,ROUND
mov .cur1r,edi
mov .cur2r,edi
movzx esi,word .col1g
shl esi,ROUND
mov .cur1g,esi
mov .cur2g,esi
movzx edx,word .col1b
shl edx,ROUND
mov .cur1b,edx
mov .cur2b,edx
 
movzx edi,word .tex_x1
shl edi,ROUND
mov .scan_x1,edi
mov .scan_x2,edi
movzx edx,word .tex_y1
shl edx,ROUND
mov .scan_y1,edx
mov .scan_y2,edx
 
mov cx,.y1
cmp cx,.y2
jge .loop1_end
.loop_1:
; push eax ebx ebp
pushad
 
push .tex_ptr
push .scr_buff
push .z_ptr
push cx
 
push .zz2
 
push .scan_x2
push dword .scan_y2
push dword .cur2r
push .cur2g
push dword .cur2b
 
push .zz1
 
push .scan_x1
push dword .scan_y1
push dword .cur1r
push .cur1g
push dword .cur1b
 
sar eax,ROUND
sar ebx,ROUND
call horizontal_tex_grd_line
 
; pop ebp ebx eax
popad
 
if (Ext = MMX)|(Ext=SSE)
movq mm0,.cur1b
movq mm1,.cur1r
movq mm2,.scan_y1
movq mm3,.cur2b
movq mm4,.cur2r
movq mm5,.scan_y2
paddd mm0,.dc13b
paddd mm1,.dc13r
paddd mm2,.tex_dy13
paddd mm3,.dc12b
paddd mm4,.dc12r
paddd mm5,.tex_dy12
movq .cur1b,mm0
movq .cur1r,mm1
movq .scan_y1,mm2
movq .cur2b,mm3
movq .cur2r,mm4
movq .scan_y2,mm5
end if
if Ext >= SSE2
movups xmm0,.cur1b
movups xmm1,.dc13b
movups xmm2,.cur2b
movups xmm3,.dc12b
movq mm2,.scan_y1
movq mm5,.scan_y2
paddd xmm0,xmm1
paddd xmm2,xmm3
paddd mm2,.tex_dy13
paddd mm5,.tex_dy12
movq .scan_y1,mm2
movq .scan_y2,mm5
movups .cur1b,xmm0
movups .cur2b,xmm2
end if
 
if Ext = NON
mov edx,.dc13b
add .cur1b,edx
mov esi,.dc13g
add .cur1g,esi
mov edi,.dc13r
add .cur1r,edi
mov edx,.dz13
add .zz1,edx
mov edx,.tex_dx13
add .scan_x1,edx
mov esi,.tex_dy13
add .scan_y1,esi
 
mov edi,.dc12b
add .cur2b,edi
mov esi,.dc12g
add .cur2g,esi
mov edx,.dc12r
add .cur2r,edx
mov edi,.tex_dx12
add .scan_x2,edi
mov esi,.tex_dy12
add .scan_y2,esi
mov edx,.dz12
add .zz2,edx
end if
add eax,.dx13
add ebx,.dx12
inc cx
cmp cx,.y2
jl .loop_1
.loop1_end:
movzx ecx,.y2
cmp cx,.y3
jge .loop2_end
 
movsx ebx,.x2 ; eax - cur x1
shl ebx,ROUND ; ebx - cur x2
 
movsx edx,word .z2
shl edx,CATMULL_SHIFT
; mov .zz1,edx
mov .zz2,edx
 
movzx edi,word .col2r
shl edi,ROUND
; mov .cur1r,edi
mov .cur2r,edi
movzx esi,word .col2g
shl esi,ROUND
; mov .cur1g,esi
mov .cur2g,esi
movzx edx,word .col2b
shl edx,ROUND
; mov .cur1b,edx
mov .cur2b,edx
 
movzx edi,word .tex_x2
shl edi,ROUND
; mov .scan_x1,edi
mov .scan_x2,edi
movzx edx,word .tex_y2
shl edx,ROUND
; mov .scan_y1,edx
mov .scan_y2,edx
 
.loop_2:
pushad
 
push .tex_ptr
push .scr_buff
push .z_ptr
push cx
 
push .zz2
 
push .scan_x2
push dword .scan_y2
push dword .cur2r
push .cur2g
push dword .cur2b
 
push .zz1
 
push .scan_x1
push dword .scan_y1
push dword .cur1r
push .cur1g
push dword .cur1b
 
sar eax,ROUND
sar ebx,ROUND
call horizontal_tex_grd_line
 
popad
 
if (Ext = MMX)|(Ext=SSE)
movq mm0,.cur1b
movq mm1,.cur1r
movq mm2,.scan_y1
movq mm3,.cur2b
movq mm4,.cur2r
movq mm5,.scan_y2
paddd mm0,.dc13b
paddd mm1,.dc13r
paddd mm2,.tex_dy13
paddd mm3,.dc23b
paddd mm4,.dc23r
paddd mm5,.tex_dy23
movq .cur1b,mm0
movq .cur1r,mm1
movq .scan_y1,mm2
movq .cur2b,mm3
movq .cur2r,mm4
movq .scan_y2,mm5
end if
if Ext >= SSE2
movups xmm0,.cur1b
movups xmm1,.dc13b
movups xmm2,.cur2b
movups xmm3,.dc23b
movq mm2,.scan_y1
movq mm5,.scan_y2
paddd xmm0,xmm1
paddd xmm2,xmm3
paddd mm2,.tex_dy13
paddd mm5,.tex_dy23
movq .scan_y1,mm2
movq .scan_y2,mm5
movups .cur1b,xmm0
movups .cur2b,xmm2
end if
if Ext = NON
mov edx,.dc13b
add .cur1b,edx
mov esi,.dc13g
add .cur1g,esi
mov edi,.dc13r
add .cur1r,edi
mov edx,.tex_dx13
add .scan_x1,edx
mov esi,.tex_dy13
add .scan_y1,esi
mov edx,.dz13
add .zz1,edx
 
mov edi,.dc23b
add .cur2b,edi
mov esi,.dc23g
add .cur2g,esi
mov edx,.dc23r
add .cur2r,edx
mov edi,.tex_dx23
add .scan_x2,edi
mov esi,.tex_dy23
add .scan_y2,esi
mov edx,.dz23
add .zz2,edx
end if
add eax,.dx13
add ebx,.dx23
inc cx
cmp cx,.y3
jl .loop_2
 
.loop2_end:
mov esp,ebp
ret 36
horizontal_tex_grd_line:
;in:
; eax : x1, ebx : x2
 
.tex_ptr equ [ebp+62]
.screen equ [ebp+58]
.z_buffer equ [ebp+54]
.y equ [ebp+52]
 
.z2 equ [ebp+48]
.tex_x2 equ [ebp+44]
.tex_y2 equ [ebp+40]
.r2 equ [ebp+36]
.g2 equ [ebp+32]
.b2 equ [ebp+28]
 
.z1 equ [ebp+24]
.tex_x1 equ [ebp+20]
.tex_y1 equ [ebp+16]
.r1 equ [ebp+12]
.g1 equ [ebp+8]
.b1 equ [ebp+4]
 
.x1 equ word[ebp-2]
.x2 equ word[ebp-4]
.dz equ dword[ebp-8]
.db equ dword[ebp-12]
.dg equ dword[ebp-16]
.dr equ dword[ebp-20]
.dtex_x equ dword[ebp-24]
.dtex_y equ dword[ebp-28]
 
.c_ty equ [ebp-32]
.c_tx equ [ebp-36]
.cb equ [ebp-40]
.cg equ [ebp-44]
.cr equ [ebp-48]
.t_col equ [ebp-52]
 
.dtex_yM equ qword[ebp-28]
.drM equ qword[ebp-20]
.dbM equ qword[ebp-12]
 
mov ebp,esp
; sub esp,30
 
mov cx,word .y
or cx,cx
jl .quit_l
 
cmp cx,word[size_y_var] ;SIZE_Y
jge .quit_l
 
cmp ax,bx
je .quit_l
jl @f
 
xchg eax,ebx
 
if Ext=NON
mov ecx,dword .r1
xchg ecx, .r2
mov dword .r1, ecx
 
mov ecx,dword .g1
xchg ecx, .g2
mov dword .g1, ecx
 
mov ecx,dword .b1
xchg ecx, .b2
mov dword .b1, ecx
 
mov ecx,dword .tex_x1
xchg ecx, .tex_x2
mov dword .tex_x1, ecx
 
mov ecx,dword .tex_y1
xchg ecx, .tex_y2
mov dword .tex_y1, ecx
 
mov ecx,dword .z1
xchg ecx, .z2
mov dword .z1, ecx
end if
if (Ext=MMX)
movq mm0,.b1 ; b, g
movq mm1,.b2
movq .b1, mm1
movq .b2, mm0
movq mm2,.r1 ; r, y
movq mm3,.r2
movq .r1,mm3
movq .r2,mm2
movq mm4,.tex_x1 ; x, z
movq mm5,.tex_x2
movq .tex_x1,mm5
movq .tex_x2,mm4
 
end if
if Ext>=SSE
movups xmm0,.b1
movups xmm1,.b2
movups .b1,xmm1
movups .b2,xmm0
movq mm4,.tex_x1 ; x, z
movq mm5,.tex_x2
movq .tex_x1,mm5
movq .tex_x2,mm4
end if
 
@@:
or bx,bx
jle .quit_l
cmp ax,word[size_x_var] ;SIZE_X
jge .quit_l
 
push ax
push bx
 
mov eax,.z2 ; delta zone************
sub eax,.z1
cdq
mov bx,.x2
sub bx,.x1
movsx ebx,bx
idiv ebx
push eax ; .dz
 
mov eax,.b2
sub eax,.b1
cdq
idiv ebx
push eax ; .db
 
mov eax,.g2
sub eax,.g1
cdq
idiv ebx
push eax ; .dg
 
mov eax,.r2
sub eax,.r1
cdq
idiv ebx
push eax ; .dr
 
mov eax,.tex_x2
sub eax,.tex_x1
cdq
idiv ebx
push eax ; .dtex_x
 
mov eax,.tex_y2
sub eax,.tex_y1
cdq
idiv ebx
push eax ; .dtey_x
 
cmp .x1,0
jg @f
 
mov eax,.dz ; clipping
movsx ebx,.x1
neg ebx
imul ebx
add .z1,eax
mov .x1,0
 
mov eax,.dr
imul ebx
add .r1,eax
;if Ext=NON
mov eax,.dg
imul ebx
add .g1,eax
 
mov eax,.db
imul ebx
add .b1,eax
 
mov eax,.dtex_x
imul ebx
add .tex_x1,eax
 
mov eax,.dtex_y
imul ebx
add .tex_y1,eax
@@:
movsx edx,word[size_x_var] ;SIZE_X
cmp .x2,dx
jl @f
mov .x2,dx
@@:
; calc line addres begin in screen and Z buffer
movsx eax,word .y
mul edx
movsx edx,.x1
add eax,edx
 
mov esi,eax
shl esi,2
add esi,.z_buffer
 
lea eax,[eax*3]
mov edi,.screen
add edi,eax
 
mov cx,.x2
sub cx,.x1
movzx ecx,cx
 
; init current variables
push dword .tex_y1
;if Ext=NON
push dword .tex_x1
 
push dword .b1
push dword .g1
push dword .r1
 
if Ext>=MMX
movq mm4,.cr ; lo -> r,g
movq mm6,.cb ; hi -> b, tex_x
pxor mm0,mm0
end if
mov ebx,.z1
.ddraw:
cmp ebx,dword[esi]
jge @f
mov eax,.c_ty
; if ROUND<TEX_SHIFT
; shl eax,TEX_SHIFT-ROUND
; end if
; if ROUND>TEX_SHIFT
; shr eax,ROUND-TEX_SHIFT
; end if
shr eax,ROUND
shl Eax,TEX_SHIFT
mov edx,.c_tx ; calc texture pixel mem addres
shr edx,ROUND
add eax,edx
and eax,TEXTURE_SIZE ; cutting
lea eax,[3*eax]
add eax,.tex_ptr
mov dword[esi],ebx
if Ext = NON
mov eax,dword[eax]
; mov .tex_col,eax
push ax
shl eax,8
pop ax
mov edx,.cr
sar edx,ROUND
mul dl ; al*dl
shr ax,8
stosb
ror eax,16
push ax
mov edx,.cg
sar edx,ROUND
mul dl
shr ax,8
stosb
pop ax
shr ax,8
mov edx,.cb
sar edx,ROUND
mul dl
shr ax,8
stosb
jmp .no_skip
else
movd mm1,[eax]
punpcklbw mm1,mm0
movq mm3,mm4 ;.cr ; lo -> r,g
movq mm5,mm6 ;.cb ; lo -> b,tex_x
psrld mm3,ROUND ;
psrld mm5,ROUND ;
packssdw mm3,mm5
pmullw mm1,mm3
psrlw mm1,8
packuswb mm1,mm0
movd [edi],mm1
end if
mov dword[esi],ebx
if Ext = NON
jmp .no_skip
end if
@@:
add edi,3
.no_skip:
add esi,4
add ebx,.dz
 
mov eax,.dtex_x
add .c_tx, eax
mov edx,.dtex_y
add .c_ty, edx
if Ext=NON
mov eax,.dr
add .cr,eax
mov edx,.dg
add .cg,edx
mov eax,.db
add .cb,eax
 
else
paddd mm4,.drM
paddd mm6,.dbM
;; paddd mm7,.dtex_y ; mm4 - b, g
;; movq .c_tx,mm7
; mm6 - r, x
end if ; mm7 - y, x
 
dec ecx
jnz .ddraw
 
.quit_l:
 
mov esp,ebp
ret 42+20 ; horizontal line
 
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/history.txt
0,0 → 1,183
 
View3ds 0.071 - VIII 2020
1. New displaying model - glass - it's two pass rendering. First pass calculates
Z position of all front pixels, second render image with adding reflective
component of light only for front pixels. Transparent effect by adding with saturation.
2. I removed bug with performing generation object after choosing 'emboss' option.
-----------------------------------------------------------------------------------
 
View3ds 0.070 - VII 2020
1. Some keys support by Leency.
2. New displaying model - real Phong - real not fake normal vector interpolation,
normalising it and calculating dot product (one for each light).
It requires SSE3. (by me, Maciej Guba)
-----------------------------------------------------------------------------------
 
View3ds 0.069 - May 2020
1. KPacked files support by Leency.
2. 32bit vertices indexes and ability to load whole RAM limited objects.
(Above 65535 vertices and triangles), (by me).
3. I switch off painters algotithm mode (depth sorting). In app impelementetion it has
limited vertices count and produce less quality image than Z buffer Catmull algo.
In addition this switch off reduces app size, (by me).
-----------------------------------------------------------------------------------
 
View3ds 0.068 - XI 2016
1. Editing option - new 'editor' button.
2. For now I disable perspective correction, to make implemtation
of editing option easier.
-----------------------------------------------------------------------------------
 
View3ds 0.067 - XI 2016
1. Sizable app window.
-----------------------------------------------------------------------------------
 
View3ds 0,066 - X 2016
1. App window size according to current screen resolution.
2. New emboss procedure.
-----------------------------------------------------------------------------------
 
View3ds 0.065 - Feb 2015
1. Asc files support.
-----------------------------------------------------------------------------------
 
View3ds 0.064 - Nov 2012
1. Bug fixes.
-----------------------------------------------------------------------------------
 
View3ds 0.063 - X 2012
1. Postprocessing effect - wave. Ability to change amplitude and frequency.
-----------------------------------------------------------------------------------
 
View3ds 0.062 - VII 2012.
1. Counter fix by Mario.
2. New drawing model - smooth shaded lines (edges only view) by me.
-----------------------------------------------------------------------------------
 
View3ds 0.061 - Nov 2011.
1. Two new buttons to increase and decrease brightness.
-----------------------------------------------------------------------------------
 
View3ds 0.060 - Aug 2011.
1. Header fix by Leency.
2. SSE2 optimizations by me. (Most visable in BUMP_TEX mode.)
-----------------------------------------------------------------------------------
 
View3ds 0.059 - June 2011.
1. Bump and pararell two texture mapping functions optimizations.
(files bump_cat.inc & two_tex.inc)
On my P4 changes are rather non visable, but on dual core in KlbrInWin
optimizations runs preety nice.
-----------------------------------------------------------------------------------
 
View3ds 0.058 - June 2011.
1. Blur function optimization on SSE and SSE2 (buttons 'blur' and 'fire').
-----------------------------------------------------------------------------------
 
View3ds 0.057 - April 2011.
1. By opening file bigger then ~18 KB, and choosing env mode program terminate.
I remove this bug
-----------------------------------------------------------------------------------
 
View3ds 0.056 - February 2011.
1. MMX optimizations in 2tex mode (file two_tex.inc).
2. Tiny SSE optimizations (file BUMP_CAT.INC).
3. Bit (two instructions) improved random light generation procedure.
-----------------------------------------------------------------------------------
 
View3ds 0.055 - January 2011.
1. SSE optimizations (file BUMP_TEX.INC).
2. Compiles correctly in newest FASM.
-----------------------------------------------------------------------------------
 
View3ds 0.054 - December 2009 (Updated January 2010).
1. Skinned window by Leency.
2. Optimizations.
3. Re map texture, bumps option - allow spherical mapping around each axle (X,Y,Z).
4. Problem with too small memory to generate object fixed. (Problem ocurred with
house.3ds object and others objects contains less than 1000 faces and points).
-----------------------------------------------------------------------------------
 
View3ds 0.053 - (?) 2009
1. Optimizations.
-----------------------------------------------------------------------------------
 
View3ds 0.052 - November 2007.
1. Memory for file is allocated dynamically.
2. Optimizations.
Note: compiling correct only for KolibriOS.
-----------------------------------------------------------------------------------
 
View3ds 0.051 - October 2007.
1. More smooth texture mapping in tex and txgr shading model and others based on
tex3.inc, tex_cat.inc shading models.
2. Predefined three, I hope, nice lights.
-----------------------------------------------------------------------------------
 
View3ds 0.05 - (?) 2007
1. New shading model: cubic environment mapping with 1.5 kb light buffer.
2. Bumps optionally according to texture. ( It gives so called texture with
shifts in bumps + texture shading model. )
3. Bumps depth button.
-----------------------------------------------------------------------------------
 
View3ds 0.04 - March 2007.
1. New shading model: bump + texture. Only version with z coordinate
interpolation.
2. SSE optimizations ( files: two_tex.inc and bump_tex.inc )
-----------------------------------------------------------------------------------
 
View3ds 0.03 - March 2007.
1. Two shading models: smooth + texture, spherical environment mapping + texture.
Version only with z coordinate interpolation.
2. Bit changed rotary. I took attempt in SSE instuctions. ( matrix multiplication )
3. Color position depend drawing model instead spot light ( I hope,spot light come
back in future ).
-----------------------------------------------------------------------------------
 
View3ds 0.02 - December 2006.
1. New shading models - "spot" - spot light (only one, it's very CPU hungry model,
and there is no easy way to implement buffer) with light attenuation (In my
implmentation works not perfect); "dots" - app draws only points (with no culling).
2. Some loseless operations "mirror": according to each axis, rotary 90 degrees.
3. Postprocesing efects: Emboss (use blur to make edges more visable), fire ( be
carefull during `fire + embos`parallel using).
4. "Move" - Changes meaning of 'add vector' buttons:
used "obj" move object, "camr" move camera (in this option use culling = 'off'
I must make culling procedure bit advanced).
5. Generate button. Few objects generating (with bad normals)
6. Some optimizations on MMX.
7. I took an attempt to memory managing functions, but it decreased speed (no aligned
memory in Menuet functions?)
 
There is really much work to do and I see disorder in app code.
Greetings for all, especially Madis Kalme for .3ds files support and good vibrations. ;)
Merry Christmas and happy new year.
-----------------------------------------------------------------------------------
 
App View3ds ver 0.01 - November 2006.
1. Object generating (for now only one). When no parameter specified or error occured
during reading file from disk, app generate object. No teapot.3ds needed on ramdrive,
but, if this file exist it would be read as default.
2. Bug in read_from_file procedure fixed. (In May, when I made shading light vector
depend, I demaged bit Madis' procedure.)
3. Backface culling on/off option. (Some objects need culling off - they have mismatched
normal vectors. Example: iron.3ds, sink.3ds, the generated one.)
4. Random lights procedure.
5. Spherical (instead old - planar ) bump, texture mapping.
6. Bit improved menu.
7. Blur.
-----------------------------------------------------------------------------------
 
App "View3ds" - it's very early, still unfinished version but I want show you it.
Based on earlier demos.
1. 3ds object import as a parameter ( for now only short names supported )
I updated Kfar app - it can run view3ds with parameter. You must copy it on
ramdrive. You could do such funny thing: Run updated Kfar in KolbrInWin,
before them set in KolInWin.ini file path to ramdrive, where yo have "view3ds",
choose 3ds file ... Emulator will run View3ds with selected file.
If no parameter specified, app try open tpot.3ds from ramdrive. If tpot.3ds
don't exist on rd, app hang.
2. Many lights. Every light - unlinear model ( Phong illumination ). For now
no light setting option.
3. Light buffer for grd, flat model.
/programs/demos/view3ds/readme.txt
0,0 → 1,46
View3ds 0.072 - tiny viewer to .3ds and .asc files with several graphics
effects implementation.
 
What's new?
1. New displaying model - texturing with bilinear filtering and transparency
simultanusly. Note that filtering is done only inside polygon. To better
quality of image there is a need to use floats coordinates of texture to pass
as arguments to single triangle rendering proc.
2. Optimizations.
3. SSE3 version runs correct on SSE2 cpus, but real phong, glass and
transparented texturing with filtering rendering models are disabled.
 
Buttons description:
1. rotary: choosing rotary axle: x, y, x+y.
2. shd. model: choosing shading model: flat, grd (smooth), env (spherical
environment mapping, bump (bump mapping), tex (texture mapping),
pos (position shading depend), dots (app draws only points - nodes of object),
txgrd (texture mapping + smooth shading), 2tex (texture mapping + spherical
environment mapping), bmap (bump + texture mapping), cenv (cubic environment
mapping), grdl (Gouraud lines - edges only), rphg (real Phong), glas (glass effect),
ptex (real Phong + texturing + transparency).
3. speed: idle, full.
4,5. zoom in, out: no comment.
6. catmull: disabled
7. culling: backface culling on/ off.
8. rand. light: Randomize 3 unlinear lights( so called Phong's illumination).
9. Blur: blur N times; N=0,1,2,3,4,5
10.11,12,13. loseless operations (rotary 90, 180 degrees).
12. emboss: Do emboss effect( flat bumps ), use 'bumps deep' button to do edges more deep.
13. fire: do motion blur ( looks like fire ).
14. move: changes meaning x,y,z +/- buttons -> obj: moving object, camr: moving camera, wave: x,y +/- increase,
decrease wave effect frequency and amplitude.
15. generate: Generates some objects: node, Thorn Crown, heart...
16. bumps: random, according to texture.
17. bumps deep -> create bumps deeper or lighter.
18. re-map tex -> re-map texture and bump map coordinates, to change spherical mapping
around axle use 'xchg' and 'mirror' buttons, then press 're-map tex' button.
19. bright + -> increase picture brightness.
20. bright - -> decrease picture brightness.
21. wav effect -> do effect based sine function.
22. editor -> setting editing option. If is "on" then red bars are draw according to each vertex, Pressing
and moving left mouse button (cursor must be on handler)- change vertex position. If left mouse button
is released apply current position. You may also decrease whole handlers count by enable culling (using
appropriate button) - some back handlers become hidden.
 
Maciej Guba III 2021
/programs/demos/view3ds/tex_cat.inc
0,0 → 1,611
;TEX_X = 512
;TEX_Y = 512
;ROUND equ 8
;SIZE_X = 512
;SIZE_Y = 512
;TEX_SHIFT = 9
CATMULL_SHIFT equ 8
 
;------------------------------------------------------------------------
;- Procedure drawing textured triangle using Catmull Z-buffer algorithm -
;------------------------------------------------------------------------
tex_triangle_z:
;----------in - eax - x1 shl 16 + y1
;-------------- ebx - x2 shl 16 + y2
;---------------ecx - x3 shl 16 + y3
;---------------edx - pointer to Z-buffer
;---------------esi - pointer to texture buffer
;---------------edi - pointer to screen buffer
;-------------stack - texture coordinates
;------------------ - z coordinates
.tex_x1 equ ebp+4
.tex_y1 equ ebp+6
.tex_x2 equ ebp+8
.tex_y2 equ ebp+10
.tex_x3 equ ebp+12
.tex_y3 equ ebp+14
.z1 equ word[ebp+16]
.z2 equ word[ebp+18]
.z3 equ word[ebp+20]
 
.tex_ptr equ dword[ebp-4] ; pointer to texture
.z_ptr equ dword[ebp-8] ; pointer to z-buffer
.x1 equ word[ebp-10]
.y1 equ word[ebp-12]
.x2 equ word[ebp-14]
.y2 equ word[ebp-16]
.x3 equ word[ebp-18]
.y3 equ word[ebp-20]
 
.dx12 equ dword[ebp-24]
.tex_dx12 equ dword[ebp-28]
.tex_dy12 equ dword[ebp-32]
.dz12 equ dword[ebp-36]
 
.dx13 equ dword[ebp-40]
.tex_dx13 equ dword[ebp-44]
.tex_dy13 equ dword[ebp-48]
.dz13 equ dword[ebp-52]
 
.dx23 equ dword[ebp-56]
.tex_dx23 equ dword[ebp-60]
.tex_dy23 equ dword[ebp-64]
.dz23 equ dword[ebp-68]
 
.scan_x1 equ dword[ebp-72]
.scan_x2 equ dword[ebp-76]
.scan_y1 equ dword[ebp-80]
.scan_y2 equ dword[ebp-84]
.cz1 equ dword[ebp-88]
.cz2 equ dword[ebp-92]
 
mov ebp,esp
push esi ; store memory pointers
push edx
.tt_sort3:
cmp ax,bx ;sort all parameters
jle .tt_sort1
xchg eax,ebx
mov edx,dword [.tex_x1]
xchg edx,dword [.tex_x2]
mov dword[.tex_x1],edx
mov dx,.z1
xchg dx,.z2
mov .z1,dx
.tt_sort1:
cmp bx,cx
jle .tt_sort2
xchg ebx,ecx
mov edx,dword [.tex_x2]
xchg edx,dword [.tex_x3]
mov dword [.tex_x2],edx
mov dx,.z2
xchg dx,.z3
mov .z2,dx
jmp .tt_sort3
.tt_sort2:
 
push eax ; and store to user friendly variables
push ebx
push ecx
 
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
and edx,ebx ; if *all* of them are negative a sign flag is raised
and edx,ecx
and edx,eax
test edx,80008000h ; Check both X&Y at once
jne .tt_loop2_end
; cmp ax,SIZE_Y
; jl @f
; cmp bx,SIZE_Y
; jl @f
; cmp cx,SIZE_Y
; jl @f
ror eax,16
ror ebx,16
ror ecx,16
; cmp ax,SIZE_X
; jl @f
; cmp bx,SIZE_X
; jl @f
; cmp cx,SIZE_X
; jl @f
; jmp .tt_loop2_end
@@:
mov eax,dword[.tex_x1] ; texture coords must be in [0..TEX_X(Y)]
mov ebx,dword[.tex_x2]
mov ecx,dword[.tex_x3]
mov edx,eax
or edx,ebx
or edx,ecx
test edx,80008000h
jne .tt_loop2_end
cmp ax,TEX_X
jge .tt_loop2_end
cmp bx,TEX_X
jge .tt_loop2_end
cmp cx,TEX_X
jge .tt_loop2_end
ror eax,16
ror ebx,16
ror ecx,16
cmp ax,TEX_Y
jge .tt_loop2_end
cmp bx,TEX_Y
jge .tt_loop2_end
cmp cx,TEX_Y
jge .tt_loop2_end
 
 
movsx ebx,.y2 ; calc delta
sub bx,.y1
jnz .tt_dx12_make
xor edx,edx
mov ecx,4
@@:
push edx
loop @b
jmp .tt_dx12_done
.tt_dx12_make:
mov ax,.x2
sub ax,.x1
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dx12,eax ; dx12 = (x2-x1)/(y2-y1)
push eax
 
mov ax,word[.tex_x2]
sub ax,word[.tex_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov [.tex_dx12],eax ; tex_dx12 = (tex_x2-tex_x1)/(y2-y1)
push eax
 
mov ax,word[.tex_y2]
sub ax,word[.tex_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov [.tex_dy12],eax ; tex_dy12 = (tex_y2-tex_y1)/(y2-y1)
push eax
 
mov ax,.z2
sub ax,.z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
push eax
.tt_dx12_done:
 
movsx ebx,.y3 ; calc delta
sub bx,.y1
jnz .tt_dx13_make
xor edx,edx
mov ecx,4
@@:
push edx
loop @b
jmp .tt_dx13_done
.tt_dx13_make:
mov ax,.x3
sub ax,.x1
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dx12,eax ; dx13 = (x3-x1)/(y3-y1)
push eax
 
mov ax,word[.tex_x3]
sub ax,word[.tex_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov [.tex_dx12],eax ; tex_dx13 = (tex_x3-tex_x1)/(y3-y1)
push eax
 
mov ax,word[.tex_y3]
sub ax,word[.tex_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov [.tex_dy12],eax ; tex_dy13 = (tex_y3-tex_y1)/(y3-y1)
push eax
 
mov ax,.z3
sub ax,.z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
push eax
.tt_dx13_done:
 
mov bx,.y3 ; calc delta
sub bx,.y2
jnz .tt_dx23_make
xor edx,edx
mov ecx,4
@@:
push edx
loop @b
jmp .tt_dx23_done
.tt_dx23_make:
mov ax,.x3
sub ax,.x2
cwde
shl eax,ROUND
cdq
movzx ebx,bx
idiv ebx
; mov .dx23,eax ; dx23 = (x3-x2)/(y3-y2)
push eax
 
mov ax,word[.tex_x3]
sub ax,word[.tex_x2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov [.tex_dx23],eax ; tex_dx23 = (tex_x3-tex_x2)/(y3-y2)
push eax
 
mov ax,word[.tex_y3]
sub ax,word[.tex_y2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov [.tex_dy23],eax ; tex_dy23 = (tex_y3-tex_y2)/(y3-y2)
push eax
 
mov ax,.z3
sub ax,.z2
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
push eax
.tt_dx23_done:
 
movsx eax,.x1 ;eax - cur x1
shl eax,ROUND ;ebx - cur x2
mov ebx,eax
 
movsx edx, word[.tex_x1]
shl edx,ROUND
; mov [.scan_x1],edx
; mov [.scan_x2],edx
push edx
push edx
movsx edx, word[.tex_y1]
shl edx,ROUND
; mov [.scan_y1],edx
; mov [.scan_y2],edx
push edx
push edx
movsx edx,.z1
shl edx,CATMULL_SHIFT
push edx
push edx
mov cx,.y1
cmp cx,.y2
jge .tt_loop1_end
 
.tt_loop1:
pushad
 
push .z_ptr
push .cz1 ; z coords shifted shl catmull_shift
push .cz2
push .scan_y2
push .scan_x2
push .scan_y1
push .scan_x1
push esi ;[.tex_ptr]
 
push cx
sar ebx,ROUND
push bx
sar eax,ROUND
push ax
call textured_line_z
 
popad
mov edx,.dz13
add .cz1,edx
mov edx,.dz12
add .cz2,edx
 
mov edx, .tex_dx13
add .scan_x1, edx
mov edx, .tex_dx12
add .scan_x2, edx
mov edx, .tex_dy13
add .scan_y1, edx
mov edx, .tex_dy12
add .scan_y2, edx
 
add eax, .dx13
add ebx, .dx12
inc cx
cmp cx,.y2
jl .tt_loop1
 
.tt_loop1_end:
 
 
mov cx,.y2
cmp cx,.y3
jge .tt_loop2_end
 
movsx ebx,.x2
shl ebx,ROUND
movsx edx,.z2
shl edx,CATMULL_SHIFT
mov .cz2,edx
movzx edx, word [.tex_x2]
shl edx,ROUND
mov .scan_x2,edx
movzx edx, word[.tex_y2]
shl edx,ROUND
mov .scan_y2,edx
 
.tt_loop2:
 
pushad
 
push .z_ptr
push .cz1 ; z coords shifted shl catmull_shift
push .cz2
 
push .scan_y2
push .scan_x2
push .scan_y1
push .scan_x1
push esi ;[.tex_ptr]
 
push cx
sar ebx,ROUND
push bx
sar eax,ROUND
push ax
call textured_line_z
 
popad
 
 
mov edx,.dz13
add .cz1,edx
mov edx,.dz23
add .cz2,edx
 
mov edx, .tex_dx13
add .scan_x1, edx
mov edx, .tex_dx23
add .scan_x2, edx
mov edx, .tex_dy13
add .scan_y1, edx
mov edx, .tex_dy23
add .scan_y2, edx
 
add eax, .dx13
add ebx, .dx23
inc cx
cmp cx,.y3
jl .tt_loop2
 
.tt_loop2_end:
 
.tt_end:
mov esp,ebp
ret 18
 
textured_line_z:
;-----in -edi screen buffer pointer
;------------ stack:
.x1 equ word [ebp+4]
.x2 equ word [ebp+6]
.y equ word [ebp+8]
 
.tex_ptr equ dword [ebp+10]
.tex_x1 equ ebp+14
.tex_y1 equ ebp+18
.tex_x2 equ ebp+22
.tex_y2 equ ebp+26
.z2 equ dword [ebp+30] ;z1, z2 coords shifted shl CATMULL_SHIFT
.z1 equ dword [ebp+34]
.z_ptr equ dword [ebp+38]
 
.tex_dy equ dword [ebp-4]
.tex_dx equ dword [ebp-8]
.dz equ dword [ebp-12]
.cz equ dword [ebp-16]
.c_tex_x equ dword [ebp-20] ; current tex x
.m_sft1 equ ebp-28
.m_sft2 equ ebp-32
; .c_tex_xM equ ebp+14
.tex_dxM equ ebp-8
 
mov ebp,esp
 
mov ax,.y
or ax,ax
jl .tl_quit
mov bx,[size_y_var]
dec bx
cmp ax,bx ;SIZE_Y
jge .tl_quit
 
mov ax,.x1
cmp ax,.x2
je .tl_quit
jl .tl_ok
 
xchg ax,.x2 ; sort params
mov .x1,ax
if Ext >= MMX
movq mm0,[.tex_x1]
movq mm1,[.tex_x2]
movq [.tex_x2],mm0
movq [.tex_x1],mm1
 
else
mov eax,dword[.tex_x1]
xchg eax,dword[.tex_x2]
mov dword[.tex_x1],eax
 
mov eax,dword[.tex_y1]
xchg eax,dword[.tex_y2]
mov dword[.tex_y1],eax
 
end if
 
mov eax,.z1
xchg eax,.z2
mov .z1,eax
 
.tl_ok:
mov cx,[size_x_var]
dec cx
cmp .x1,cx ;SIZE_X
jge .tl_quit
cmp .x2,0
jle .tl_quit
 
mov bx,.x2
sub bx,.x1
movsx ebx,bx
 
mov eax,dword[.tex_y2] ; calc .dty
sub eax,dword[.tex_y1]
cdq
idiv ebx
push eax
 
mov eax,dword[.tex_x2] ; calc .dtx
sub eax,dword[.tex_x1]
cdq
idiv ebx
push eax
 
mov eax,.z2 ; calc .dz
sub eax,.z1
cdq
idiv ebx
push eax
 
cmp .x1,0 ; clipping
jg @f
 
movsx ebx,.x1
neg ebx
imul ebx ; eax = .dz * abs(.x1)
add .z1,eax
mov .x1,0
 
mov eax,.tex_dy
imul ebx
add dword[.tex_y1],eax
 
mov eax,.tex_dx
imul ebx
add dword[.tex_x1],eax
 
@@:
cmp .x2,cx ;SIZE_X
jl @f
mov .x2,cx ;SIZE_X
@@:
 
movsx ebx,.y ; calc mem begin in buffers
movzx eax,word[size_x_var] ;SIZE_X
mul ebx
movsx ebx,.x1
add eax,ebx
mov ebx,eax
 
lea eax,[eax*3]
add edi,eax ; edi - scr buff
shl ebx,2
add .z_ptr,ebx ; z buffer pointer
 
mov cx,.x2
sub cx,.x1
movzx ecx,cx
 
;if Ext >= MMX
; movq mm0,[.tex_x1]
; movq mm4,mm0
; movq mm1,qword[.tex_dxM]
; mov ebx,.z1
; mov eax,.dz
;else
mov eax,dword[.tex_x1]
mov ebx,dword[.tex_y1]
push .z1 ; .cz
push eax ;.c_tex_x
;end if
mov edx,.z_ptr
 
.tl_loop:
 
;if Ext >= MMX
; cmp ebx,[edx] ; ebx - current z
; jge @f
; movq mm2,mm0
; psrad mm2,ROUND
; movq mm3,mm2
; psrlq mm2,32-TEX_SHIFT
; paddd mm3,mm2
; movd esi,mm3
; mov dword[edx],ebx ; renew z buffer
;else
; eax - temp
mov eax,.cz ; ebx - cur tex y shl ROUND
cmp eax,[edx] ; ecx - l.lenght
jge @f ; ebx - cur tex_y ; edx - temp
mov esi,ebx ; edi - scr buff
sar esi,ROUND ; esi - tex_ptr temp
shl esi,TEX_SHIFT ; .z_ptr - cur pointer to z buff
mov eax,.c_tex_x ; .cz - cur z coord shl CATMULL_SHIFT
sar eax,ROUND
add esi,eax
mov eax,.cz
mov dword[edx],eax ; renew z buffer
;end if
and esi,TEXTURE_SIZE
lea esi,[esi*3]
add esi,.tex_ptr
movsd
dec edi
jmp .no_skip
@@:
add edi,3
.no_skip:
add edx,4
;if Ext >= MMX
; add ebx,eax
; paddd mm0,mm1
;else
mov eax,.dz
add .cz,eax
mov eax,.tex_dx
add .c_tex_x,eax
add ebx,.tex_dy
;end if
loop .tl_loop
.tl_quit:
 
mov esp,ebp
 
ret 30+8
 
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/two_tex.inc
0,0 → 1,1105
 
;SIZE_X equ 350
;SIZE_Y equ 350
;ROUND equ 8
;TEX_X equ 512
;TEX_Y equ 512
;TEXTURE_SIZE EQU (512*512)-1
;TEX_SHIFT EQU 9
 
;CATMULL_SHIFT equ 8
;TEXTURE_SIZE EQU (TEX_X * TEX_Y)-1
;Ext = SSE
;SSE = 3
;MMX = 1
;NON = 0
;use32
;------- Big thanks to Majuma (www.majuma.xt.pl) for absolutely great---
;------- DOS 13h mode demos --------------------------------------------
;------- Procedure draws triangle with two overlapped textures, I use --
;--------Catmull Z-buffer algorithm- (Z coordinate interpolation)-------
;--------I calc texture pixel by this way: col1*col2/256 ---------------
two_tex_triangle_z:
;------------------in - eax - x1 shl 16 + y1 -----------
;---------------------- ebx - x2 shl 16 + y2 -----------
;---------------------- ecx - x3 shl 16 + y3 -----------
;---------------------- edx - pointer to b. texture-----
;---------------------- esi - pointer to e. texture-----
;---------------------- edi - pointer to screen buffer--
;---------------------- stack : b. tex coordinates------
;---------------------- e. tex coordinates------
;---------------------- Z position coordinates--
;---------------------- pointer io Z buffer-----
;-- Z-buffer - filled with coordinates as dword --------
;-- (Z coor. as word) shl CATMULL_SHIFT ----------------
.b_x1 equ ebp+4 ; procedure don't save registers !!!
.b_y1 equ ebp+6 ; each coordinate as word
.b_x2 equ ebp+8
.b_y2 equ ebp+10 ; b - first texture
.b_x3 equ ebp+12
.b_y3 equ ebp+14 ; e - second texture
.e_x1 equ ebp+16
.e_y1 equ ebp+18
.e_x2 equ ebp+20
.e_y2 equ ebp+22
.e_x3 equ ebp+24
.e_y3 equ ebp+26
.z1 equ word[ebp+28]
.z2 equ word[ebp+30]
.z3 equ word[ebp+32]
.z_buff equ dword[ebp+34] ; pointer to Z-buffer
 
 
.t_bmap equ dword[ebp-4] ; pointer to b. texture
.t_emap equ dword[ebp-8] ; pointer to e. texture
.x1 equ word[ebp-10]
.y1 equ word[ebp-12]
.x2 equ word[ebp-14]
.y2 equ word[ebp-16]
.x3 equ word[ebp-18]
.y3 equ word[ebp-20]
 
.dx12 equ dword[ebp-24]
.dbx12 equ dword[ebp-28]
.dby12 equ dword[ebp-32]
.dby12q equ [ebp-32]
.dex12 equ dword[ebp-36]
.dey12 equ dword[ebp-40]
.dey12q equ [ebp-40]
.dz12 equ dword[ebp-44]
 
.dx13 equ dword[ebp-48]
.dbx13 equ dword[ebp-52]
.dby13 equ dword[ebp-56]
.dby13q equ [ebp-56]
.dex13 equ dword[ebp-60]
.dey13 equ dword[ebp-64]
.dey13q equ [ebp-64]
.dz13 equ dword[ebp-68]
 
.dx23 equ dword[ebp-72]
.dbx23 equ dword[ebp-76]
.dby23 equ dword[ebp-80]
.dby23q equ [ebp-80]
.dex23 equ dword[ebp-84]
.dey23 equ dword[ebp-88]
.dey23q equ [ebp-88]
.dz23 equ dword[ebp-92]
 
.cx1 equ dword[ebp-96] ; current variables
.cx2 equ dword[ebp-100]
.cbx1 equ dword[ebp-104]
.cby1 equ [ebp-108]
.cex1 equ dword[ebp-112]
.cey1 equ [ebp-116]
.cbx2 equ dword[ebp-120]
.cby2 equ [ebp-124]
.cex2 equ dword[ebp-128]
.cey2 equ [ebp-132]
 
.cz1 equ dword[ebp-136]
.cz2 equ dword[ebp-140]
 
if Ext >= MMX
emms
else
cld
end if
mov ebp,esp
push edx esi ; store bump map
; push esi ; store e. map
; sub esp,120
.sort3: ; sort triangle coordinates...
cmp ax,bx
jle .sort1
xchg eax,ebx
mov edx,dword[.b_x1]
xchg edx,dword[.b_x2]
mov dword[.b_x1],edx
mov edx,dword[.e_x1]
xchg edx,dword[.e_x2]
mov dword[.e_x1],edx
mov dx,.z1
xchg dx,.z2
mov .z1,dx
.sort1:
cmp bx,cx
jle .sort2
xchg ebx,ecx
mov edx,dword[.b_x2]
xchg edx,dword[.b_x3]
mov dword[.b_x2],edx
mov edx,dword[.e_x2]
xchg edx,dword[.e_x3]
mov dword[.e_x2],edx
mov dx,.z2
xchg dx,.z3
mov .z2,dx
jmp .sort3
.sort2:
push eax ebx ecx ; store triangle coords in variables
; push ebx
; push ecx
 
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
and edx,ebx ; if *all* of them are negative a sign flag is raised
and edx,ecx
and edx,eax
test edx,80008000h ; Check both X&Y at once
jne .loop23_done
; mov edx,eax ; eax,ebx,ecx are ORd together into edx which means that
; or edx,ebx ; if any *one* of them is negative a sign flag is raised
; or edx,ecx
; test edx,80000000h ; Check only X
; jne .loop23_done
 
; cmp .x1,SIZE_X ; {
; jg .loop23_done
; cmp .x2,SIZE_X ; This can be optimized with effort
; jg .loop23_done
; cmp .x3,SIZE_X
; jg .loop23_done ; {
 
 
mov bx,.y2 ; calc delta 12
sub bx,.y1
jnz .bt_dx12_make
mov ecx,6
xor edx,edx
@@:
push edx ;dword 0
loop @b
jmp .bt_dx12_done
.bt_dx12_make:
mov ax,.x2
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx12,eax
push eax
 
if Ext=SSE
 
sub esp,16
cvtsi2ss xmm3,ebx ;rcps
; mov eax,255
cvtsi2ss xmm4,[i255d] ;eax
divss xmm3,xmm4
rcpss xmm3,xmm3
; mulss xmm3,xmm4
shufps xmm3,xmm3,0
 
movd mm0,[.b_x1]
movd mm1,[.b_x2]
movd mm2,[.e_x1]
movd mm3,[.e_x2]
; psubsw mm3,mm2
; psubsw mm1,mm0
pxor mm4,mm4
punpcklwd mm0,mm4
punpcklwd mm1,mm4
punpcklwd mm2,mm4
punpcklwd mm3,mm4
; pslld mm0,ROUND
; pslld mm1,ROUND
; pslld mm2,ROUND
; pslld mm3,ROUND
cvtpi2ps xmm0,mm0
movlhps xmm0,xmm0
cvtpi2ps xmm0,mm2
cvtpi2ps xmm1,mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,mm3
subps xmm1,xmm0
 
; pxor mm4,mm4
; movq mm5,mm1
; movq mm6,mm1
; pcmpeqb mm5,mm4
; psubd mm1,mm0
; psubd mm3,mm2
 
; movq mm0,[.b_x1] ; bx1 by1 bx2 by2
; movq mm1,[.e_x1] ; ex1 ey1 ex2 ey2
; pxor
; punpcklhd mm0,mm1 ; lwd ;
; psubw mm1,mm0 ; mm1, mm0
; pxor mm2,mm2
; pmovmaskb eax,mm1
; and eax,10101010b
; pcmpgtw mm2,mm1
; punpcklwd mm1,mm2
; psllw mm0,ROUND
; psllw mm1,ROUND
; movq mm2,mm0
; psrlq mm0,32
 
; cvtpi2ps xmm0,mm1
; movlhps xmm0,xmm0
; cvtpi2ps xmm0,mm3
; divps xmm1,xmm3
mulps xmm1,xmm3
shufps xmm1,xmm1,10110001b
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dey12q,mm0
movq .dby12q,mm1
 
; movd .dex12,mm0
; psrlq mm0,32
; movd .dey12,mm0
; movhlps xmm1,xmm1
; cvtps2pi mm0,xmm1
; movd .dbx12,mm0
; psrlq mm0,32
; movd .dby12,mm0
 
else
mov ax,word[.b_x2]
sub ax,word[.b_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dbx12,eax
push eax
 
mov ax,word[.b_y2]
sub ax,word[.b_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dby12,eax
push eax
 
; mov eax,.dbx12
; mov ebx,.dby12
; int3
 
mov ax,word[.e_x2]
sub ax,word[.e_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dex12,eax
push eax
 
mov ax,word[.e_y2]
sub ax,word[.e_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dey12,eax
push eax
 
end if
mov ax,.z2
sub ax,.z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
push eax
.bt_dx12_done:
 
mov bx,.y3 ; calc delta13
sub bx,.y1
jnz .bt_dx13_make
mov ecx,6
xor edx,edx
@@:
push edx ;dword 0
loop @b
jmp .bt_dx13_done
.bt_dx13_make:
mov ax,.x3
sub ax,.x1
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx13,eax
push eax
 
if Ext=SSE
 
cvtsi2ss xmm3,ebx
; mov eax,255
cvtsi2ss xmm4,[i255d]
divss xmm3,xmm4
rcpss xmm3,xmm3
; mulss xmm3,xmm4
shufps xmm3,xmm3,0
sub esp,16
 
movd mm0,[.b_x1]
movd mm1,[.b_x3]
movd mm2,[.e_x1]
movd mm3,[.e_x3]
 
pxor mm4,mm4
punpcklwd mm0,mm4
punpcklwd mm1,mm4
punpcklwd mm2,mm4
punpcklwd mm3,mm4
 
cvtpi2ps xmm0,mm0
movlhps xmm0,xmm0
cvtpi2ps xmm0,mm2
cvtpi2ps xmm1,mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,mm3
subps xmm1,xmm0
 
; divps xmm1,xmm3
mulps xmm1,xmm3
shufps xmm1,xmm1,10110001b
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dey13q,mm0
movq .dby13q,mm1
 
else
 
mov ax,word[.b_x3]
sub ax,word[.b_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dbx13,eax
push eax
 
mov ax,word[.b_y3]
sub ax,word[.b_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dby13,eax
push eax
 
mov ax,word[.e_x3]
sub ax,word[.e_x1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dex13,eax
push eax
 
mov ax,word[.e_y3]
sub ax,word[.e_y1]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dey13,eax
push eax
 
end if
 
mov ax,.z3
sub ax,.z1
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
; mov .dz13,eax
push eax
.bt_dx13_done:
 
mov bx,.y3 ; calc delta23
sub bx,.y2
jnz .bt_dx23_make
mov ecx,6
xor edx,edx
@@:
push edx ;dword 0
loop @b
jmp .bt_dx23_done
.bt_dx23_make:
mov ax,.x3
sub ax,.x2
cwde
movsx ebx,bx
shl eax,ROUND
cdq
idiv ebx
; mov .dx23,eax
push eax
 
if Ext=SSE
 
cvtsi2ss xmm3,ebx
; mov eax,255
cvtsi2ss xmm4,[i255d] ;eax
divss xmm3,xmm4
shufps xmm3,xmm3,0
sub esp,16
 
movd mm0,[.b_x2]
movd mm1,[.b_x3]
movd mm2,[.e_x2]
movd mm3,[.e_x3]
 
pxor mm4,mm4
punpcklwd mm0,mm4
punpcklwd mm1,mm4
punpcklwd mm2,mm4
punpcklwd mm3,mm4
 
cvtpi2ps xmm0,mm0
movlhps xmm0,xmm0
cvtpi2ps xmm0,mm2
cvtpi2ps xmm1,mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,mm3
subps xmm1,xmm0
 
divps xmm1,xmm3
shufps xmm1,xmm1,10110001b
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dey23q,mm0
movq .dby23q,mm1
 
else
 
mov ax,word[.b_x3]
sub ax,word[.b_x2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dbx23,eax
push eax
 
mov ax,word[.b_y3]
sub ax,word[.b_y2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dby23,eax
push eax
 
mov ax,word[.e_x3]
sub ax,word[.e_x2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dex23,eax
push eax
 
mov ax,word[.e_y3]
sub ax,word[.e_y2]
cwde
shl eax,ROUND
cdq
idiv ebx
; mov .dey23,eax
push eax
end if
mov ax,.z3
sub ax,.z2
cwde
shl eax,CATMULL_SHIFT
cdq
idiv ebx
; mov .dz23,eax
push eax
; sub esp,40
.bt_dx23_done:
movsx eax,.x1
shl eax,ROUND
; mov .cx1,eax
; mov .cx2,eax
push eax eax
; push eax
 
movsx eax,word[.b_x1]
shl eax,ROUND
mov .cbx1,eax
mov .cbx2,eax
; push eax eax
; push eax
 
movsx eax,word[.b_y1]
shl eax,ROUND
mov .cby1,eax
mov .cby2,eax
; push eax eax
; push eax
 
movsx eax,word[.e_x1]
shl eax,ROUND
mov .cex1,eax
mov .cex2,eax
; push eax eax
;push eax
 
movsx eax,word[.e_y1]
shl eax,ROUND
mov .cey1,eax
mov .cey2,eax
sub esp,32
; push eax eax
;push eax
 
movsx eax,.z1
shl eax,CATMULL_SHIFT
; mov .cz1,eax
; mov .cz2,eax
push eax eax
;push eax
 
movsx ecx,.y1
cmp cx,.y2
jge .loop12_done
.loop12:
call .call_line
 
mov eax,.dx13
add .cx1,eax
mov ebx,.dx12
add .cx2,ebx
if Ext>= SSE2
movups xmm0,.cey1
movups xmm1,.cey2
movups xmm2,.dey12q
movups xmm3,.dey13q
paddd xmm0,xmm3
paddd xmm1,xmm2
movups .cey1,xmm0
movups .cey2,xmm1
else if (Ext = MMX) | (Ext=SSE)
movq mm0,.cby2 ; with this optimization object
movq mm1,.cby1 ; looks bit annoying
movq mm2,.cey2
movq mm3,.cey1
paddd mm0,.dby12q
paddd mm1,.dby13q
paddd mm2,.dey12q
paddd mm3,.dey13q
movq .cby2,mm0
movq .cby1,mm1
movq .cey1,mm3
movq .cey2,mm2
else
mov edx,.dbx13
add .cbx1,edx
mov eax,.dbx12
add .cbx2,eax
mov ebx,.dby13
add .cby1,ebx
mov edx,.dby12
add .cby2,edx
 
mov eax,.dex13
add .cex1,eax
mov ebx,.dex12
add .cex2,ebx
mov edx,.dey13
add .cey1,edx
mov eax,.dey12
add .cey2,eax
 
end if
mov ebx,.dz13
add .cz1,ebx
mov edx,.dz12
add .cz2,edx
 
inc ecx
cmp cx,.y2
jl .loop12
.loop12_done:
 
movsx ecx,.y2
cmp cx,.y3
jge .loop23_done
 
movsx eax,.z2
shl eax,CATMULL_SHIFT
mov .cz2,eax
 
movsx eax,.x2
shl eax,ROUND
mov .cx2,eax
 
movzx eax,word[.b_x2]
shl eax,ROUND
mov .cbx2,eax
 
movzx eax,word[.b_y2]
shl eax,ROUND
mov .cby2,eax
 
movzx eax,word[.e_x2]
shl eax,ROUND
mov .cex2,eax
 
movzx eax,word[.e_y2]
shl eax,ROUND
mov .cey2,eax
 
.loop23:
call .call_line
;if Ext = NON
mov eax,.dx13
add .cx1,eax
mov ebx,.dx23
add .cx2,ebx
if Ext>= SSE2
movups xmm0,.cey1
movups xmm1,.cey2
movups xmm2,.dey23q
movups xmm3,.dey13q
paddd xmm0,xmm3
paddd xmm1,xmm2
movups .cey1,xmm0
movups .cey2,xmm1
else if (Ext = MMX) | ( Ext = SSE)
movq mm0,.cby2 ; with this mmx optimization object looks bit
movq mm1,.cby1 ; annoying
movq mm2,.cey2
movq mm3,.cey1
paddd mm0,.dby23q
paddd mm1,.dby13q
paddd mm2,.dey23q
paddd mm3,.dey13q
movq .cby2,mm0
movq .cby1,mm1
movq .cey2,mm2
movq .cey1,mm3
 
else
mov edx,.dbx13
add .cbx1,edx
mov eax,.dbx23
add .cbx2,eax
mov ebx,.dby13
add .cby1,ebx
mov edx,.dby23
add .cby2,edx
 
mov eax,.dex13
add .cex1,eax
mov ebx,.dex23
add .cex2,ebx
mov edx,.dey13
add .cey1,edx
mov eax,.dey23
add .cey2,eax
end if
 
mov ebx,.dz13
add .cz1,ebx
mov edx,.dz23
add .cz2,edx
;else
; movq mm0,.db13q
; movq mm1,.cbx1q
 
inc ecx
cmp cx,.y3
jl .loop23
.loop23_done:
 
mov esp,ebp
ret 34
 
.call_line:
 
pushad
 
push .cz1
push .cz2
push .z_buff
push .t_bmap
push .t_emap
push dword .cey2
push .cex2
push dword .cey1
push .cex1
push dword .cby2
push .cbx2
push dword .cby1
push .cbx1
push ecx
 
mov eax,.cx1
sar eax,ROUND
mov ebx,.cx2
sar ebx,ROUND
 
call two_tex_line_z
 
popad
ret
two_tex_line_z:
;--------------in: eax - x1
;-------------- ebx - x2
;-------------- edi - pointer to screen buffer
;stack - another parameters :
.y equ dword [ebp+4]
.bx1 equ [ebp+8] ; ---
.by1 equ [ebp+12] ; |
.bx2 equ [ebp+16] ; |
.by2 equ [ebp+20] ; |> b. texture and e. texture coords
.ex1 equ [ebp+24] ; |> shifted shl ROUND
.ey1 equ [ebp+28] ; |
.ex2 equ [ebp+32] ; |
.ey2 equ [ebp+36] ; ---
.emap equ [ebp+40] ; b texture offset
.bmap equ [ebp+44] ; e texture offset
.z_buff equ dword [ebp+48]
.z2 equ dword [ebp+52] ; -- |> z coords shifted
.z1 equ dword [ebp+56] ; -- shl CATMULL_SHIFT
 
.x1 equ dword [ebp-4]
.x2 equ dword [ebp-8]
.dbx equ [ebp-12]
.dex equ [ebp-16]
.dby equ [ebp-20]
.dey equ [ebp-24]
.dz equ dword [ebp-28]
.cbx equ [ebp-32]
.cex equ [ebp-36]
.cby equ [ebp-40]
.cey equ [ebp-44]
.cz equ dword [ebp-48]
.czbuff equ dword [ebp-52]
 
mov ebp,esp
 
mov ecx,.y
or ecx,ecx
jl .bl_end
mov dx,word[size_y_var]
dec dx
cmp cx,dx ;word[size_y_var] ;SIZE_Y
jge .bl_end
 
cmp eax,ebx
jl @f
je .bl_end
 
xchg eax,ebx
if Ext=NON
mov edx,.bx1
xchg edx,.bx2
mov .bx1,edx
mov edx,.by1
xchg edx,.by2
mov .by1,edx
 
mov edx,.ex1
xchg edx,.ex2
mov .ex1,edx
mov edx,.ey1
xchg edx,.ey2
mov .ey1,edx
else
movq mm0,.bx1
movq mm1,.ex1
movq mm2,.bx2
movq mm3,.ex2
movq .bx2,mm0
movq .ex2,mm1
movq .bx1,mm2
movq .ex1,mm3
end if
mov edx,.z1
xchg edx,.z2
mov .z1,edx
@@:
push eax ebx ;store x1, x2
mov ebx,.x1
movzx edx,word[size_x_var]
dec edx
cmp ebx,edx
; cmp bx,word[size_x_var] ;SIZE_X
jg .bl_end
cmp .x2,0
jle .bl_end
 
mov ebx,.x2
sub ebx,.x1
 
if Ext >= SSE
 
sub esp,16
cvtsi2ss xmm3,ebx ;rcps
shufps xmm3,xmm3,0
 
; movq mm0,.bx1q
; movq mm1,.bx2q
; movq mm2,.ex1q
; movq mm3,.ex2q
; psubd mm1,mm0
; psubd mm3,mm2
; cvtpi2ps xmm1,mm1
; movlhps xmm1,xmm1
; cvtpi2ps xmm1,mm3
 
cvtpi2ps xmm0,.bx1 ;mm0 ; bx1; by1
movlhps xmm0,xmm0
cvtpi2ps xmm0,.ex1 ;mm2 ; ex1; ey1
cvtpi2ps xmm1,.bx2 ;mm1 ; bx2; by2
movlhps xmm1,xmm1
cvtpi2ps xmm1,.ex2 ;mm3 ; ex2; ey2
subps xmm1,xmm0
; hi lo
divps xmm1,xmm3 ; xmm1 -> dby; dbx; dey; dex
 
shufps xmm1,xmm1,11011000b
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dex,mm0 ; hi - lo -> dbx, dex
movq .dey,mm1 ; hi - lo -> dby, dey
 
else
 
mov eax,.bx2 ; calc .dbx
sub eax,.bx1
cdq
idiv ebx
push eax
 
mov eax,.ex2 ; calc .dby
sub eax,.ex1
cdq
idiv ebx
push eax
 
mov eax,.by2 ; calc .dex
sub eax,.by1
cdq
idiv ebx
push eax
 
mov eax,.ey2 ; calc .dey
sub eax,.ey1
cdq
idiv ebx
push eax
 
end if
 
mov eax,.z2 ; calc .dz
sub eax,.z1
cdq
idiv ebx
push eax
 
cmp .x1,0 ; set correctly begin variable
jge @f ; CLIPPING ON FUNCTION
; cutting triangle exceedes screen
mov ebx,.x1
neg ebx
imul ebx ; eax = .dz * abs(.x1)
add .z1,eax
mov .x1,0
 
mov eax,.dbx
imul ebx
add .bx1,eax
 
mov eax,.dby
imul ebx
add .by1,eax
 
mov eax,.dex
imul ebx
add .ex1,eax
 
mov eax,.dey
imul ebx
add .ey1,eax
@@:
movzx eax,word[size_x_var] ;SIZE_X ;word[size_x_var]
mov ebx,.x2
cmp eax,ebx
jg @f
mov .x2,eax
@@:
; movd mm0,eax
; movd mm1,.x2
; pminsw mm0,mm1
; movd .x2,mm0
; cmp .x2,SIZE_X ;eax |
; jl @f |> this dont work idk cause
; mov .x2,SIZE_X ;eax |
@@:
; movzx eax,word[size_x_var] ;calc memory begin in buffers
mov ebx,.y
mul ebx
mov ebx,.x1
add eax,ebx
mov ebx,eax
lea eax,[eax*3]
add edi,eax ; edi - screen
mov esi,.z_buff ; z-buffer filled with dd variables
shl ebx,2
add esi,ebx ; esi - Z buffer
 
mov ecx,.x2
sub ecx,.x1
; init current variables
push dword .bx1 ;.by1 .ex1 .ey1 .z1 esi
push dword .ex1
push dword .by1
push dword .ey1
 
push .z1 ; current z shl CATMULL_SHIFT
push esi
 
if Ext >= MMX
pxor mm0,mm0
movq mm3,.cex ; hi - lo -> cbx; cex
movq mm4,.cey ; hi - lo -> cby; cey
; movq mm5,mm3
; movq mm6,mm4
; psrad mm5,ROUND
; psrad mm6,ROUND
; movq .ceyq,mm5
; movq .cbyq,mm6
mov edx,.czbuff
else
cld
end if
.draw:
; if TEX = SHIFTING ;bump drawing only in shifting mode
if Ext=NON
mov esi,.czbuff ; .czbuff current address in buffer
mov ebx,.cz ; .cz - cur z position
cmp ebx,dword[esi]
else
mov ebx,.cz
cmp ebx,dword[edx]
end if
jge .skip
 
if Ext=NON
mov eax,.cby
mov esi,.cbx
sar eax,ROUND
sar esi,ROUND
shl eax,TEX_SHIFT ;-
add esi,eax
lea esi,[esi*3] ;- ; esi - current b. texture addres
add esi,.bmap
 
mov ebx,.cex ;.cex - current env map X
mov eax,.cey ;.cey - current env map y
sar ebx,ROUND
sar eax,ROUND
 
shl eax,TEX_SHIFT
add ebx,eax
lea ebx,[ebx*3]
add ebx,.emap
 
 
else
movq mm5,mm4 ;.cey
psrad mm5,ROUND
pslld mm5,TEX_SHIFT
movq mm6,mm3 ;.cex
psrad mm6,ROUND
paddd mm5,mm6
movq mm6,mm5
paddd mm5,mm5
paddd mm5,mm6
paddd mm5,.emap
movd esi,mm5
psrlq mm5,32
movd ebx,mm5
end if
if Ext>=MMX
movd mm1,[esi]
movd mm2,[ebx]
punpcklbw mm1,mm0
punpcklbw mm2,mm0
pmullw mm1,mm2
psrlw mm1,8
packuswb mm1,mm0
movd [edi],mm1
mov ebx,.cz
mov dword[edx],ebx
else
cld ; esi - tex e.
lodsb ; ebx - tex b.
mov dl,[ebx]
mul dl
shr ax,8
stosb
inc ebx
lodsb
mov dl,[ebx]
mul dl
shr ax,8
stosb
inc ebx
lodsb
mov dl,[ebx]
mul dl
shr ax,8
stosb
mov ebx,.cz
mov esi,.czbuff
mov dword[esi],ebx
jmp .no_skip
end if
.skip:
add edi,3
 
if Ext = NON
.no_skip:
add .czbuff,4
mov eax,.dbx
add .cbx,eax
mov eax,.dby
add .cby,eax
mov eax,.dex
add .cex,eax
mov eax,.dey
add .cey,eax
else
add edx,4
paddd mm3,.dex
paddd mm4,.dey
; movq mm5,mm3
; movq mm6,mm4
; psrad mm5,ROUND
; psrad mm6,ROUND
; movq .cex,mm3
; movq .cey,mm4
end if
mov eax,.dz
add .cz,eax
if Ext = NON
dec ecx
jnz .draw
else
loop .draw
end if
 
.bl_end:
mov esp,ebp
ret 56
 
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/demos/view3ds/view3ds.asm
0,0 → 1,3671
 
; application : View3ds ver. 0.072 - tiny .3ds and .asc files viewer
; with a few graphics effects demonstration.
; compiler : FASM
; system : KolibriOS
; author : Macgub aka Maciej Guba
; email : macgub3@wp.pl
; web : http://macgub.j.pl, http://macgub.co.pl
; Fell free to use this intro in your own distribution of KolibriOS.
; Special greetings to KolibriOS team .
; I hope because my demos Christian Belive will be near to each of You.
 
 
; Some adjustments made by Madis Kalme
; madis.kalme@mail.ee
; I tried optimizing it a bit, but don't know if it was successful. The objects
; can be:
; 1) Read from a file (*.3DS standard)
; 2) Written in manually (at the end of the code) ; now not exist
 
 
SIZE_X equ 500
SIZE_Y equ 600 ; ///// I want definitely
TIMEOUT equ 10 ; ------ say:
ROUND equ 10 ; \ @ @/ keep smiling every
TEX_X equ 512 ; texture width ; \ ./ / day.
TEX_Y equ 512 ; height ; \/ /
TEX_SHIFT equ 9 ; texture width shifting ; __||__ /
TEXTURE_SIZE EQU (TEX_X * TEX_Y)-1 ; /| |
TEX equ SHIFTING ; TEX={SHIFTING | FLUENTLY} ; / \ /
FLUENTLY = 0 ; / | |
SHIFTING = 1 ; ------
CATMULL_SHIFT equ 8 ; | |
LIGHT_SIZE equ 22 ; | |
NON = 0 ; -/ \-
MMX = 1
SSE = 2
SSE2 = 3
SSE3 = 4
Ext = SSE3 ;Ext={ NON | MMX | SSE | SSE2 | SSE3 }
 
; 0 for short names (Menuet-compatible), 1 for long names (Kolibri features)
USE_LFN = 1 ; App is Kolibri only now.
 
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd MEM_END ; memory for app
dd MEM_END ; esp
dd I_Param ; I_Param
dd 0x0 ; I_Icon
 
START: ; start of execution
cld
push dword (SIZE_Y shr 3) * 3
fninit
fild dword[esp]
fstp [rsscale]
pop ebx
 
mov [x_start],dword 20 shl 16 + 20 ;eax
 
 
call alloc_buffer_mem
call read_param
call read_from_disk ; read, if all is ok eax = 0
cmp eax,0
jne .gen
mov esi,[fptr]
cmp [esi],word 4D4Dh
jne .asc
call read_tp_variables ; init points and triangles count variables
cmp eax,0
je .gen
jmp .malloc
.gen:
call generate_object
jmp .opt
.asc:
mov [triangles_count_var],10000 ; to do: read asc header
mov [points_count_var],10000
call alloc_mem_for_tp
call read_asc
jmp .opt
.malloc:
if USE_LFN
call alloc_mem_for_tp
end if
call read_from_file
.opt:
 
 
 
call optimize_object1 ; proc in file b_procs.asm
; set point(0,0,0) in center and calc all coords
; to be in <-1.0,1.0>
call normalize_all_light_vectors
if Ext >= SSE3
call copy_lights ; to aligned float
end if
call init_triangles_normals2
call init_point_normals
call init_envmap2
call init_envmap_cub
call generate_texture2
call init_sincos_tab
call do_color_buffer ; intit color_map
mov edi,bumpmap
call calc_bumpmap
call calc_bumpmap_coords ; bump and texture mapping
call draw_window
;mov [draw_win_at_first],0
;mov eax,40 ; set events mask
;mov ebx,1100000000000000000000000100111b
;int 0x40
if Ext >= SSE3
mov eax,1
cpuid
bt ecx,0 ; is sse3 on board?
jc @f
mov [max_dr_flg],12
@@:
end if
 
still:
cmp [edit_flag],1
jne @f
mov eax,40 ; set events mask
mov ebx,1100000000000000000000000100111b
jmp .int
@@:
mov eax,40 ; set events mask
mov ebx,111b
.int:
int 0x40
 
mov eax,23
mov ebx,TIMEOUT
cmp [speed_flag],0
je .skip
mov eax,11
.skip:
cmp [edit_flag],1
jne @f
mov eax,10
 
@@:
int 0x40
 
cmp eax,1 ; redraw event ?
je red
cmp eax,2 ; key event ?
je key
cmp eax,3 ; button event ?
je button
cmp eax,6 ; mouse event ?
jne @f
cmp [edit_flag],1 ; handle mouse only when edit is active
jne @f
 
mov eax,37
mov ebx,7 ; get mouse scroll
int 0x40
and eax, 0xFFFF ; check only vertial
cmp eax, 65535
je button.zoom_in
cmp eax, 1
je button.zoom_out
 
mov eax,37
mov ebx,3 ;read mouse state
int 0x40
mov [mouse_state],eax
call edit
@@:
jmp noclose
 
red: ; redraw
mov eax,9 ; get process info
mov ebx,procinfo
mov ecx,-1
int 0x40
mov eax,[procinfo+42] ; read params of window
sub eax,115
mov [size_x_var],ax
shr ax,1
mov [vect_x],ax
;
mov eax,[procinfo+46]
sub eax,30
mov [size_y_var],ax
shr ax,1
mov [vect_y],ax
 
mov eax,[procinfo+34]
mov [x_start],ax
mov eax,[procinfo+38]
mov [y_start],ax
call alloc_buffer_mem ;realloc mem for scr & z buffs
call draw_window
 
jmp noclose
 
key: ; key
mov eax,2 ; just read it and ignore
int 0x40
 
cmp ah, '+'
je button.zoom_in
cmp ah, '='
je button.zoom_in
cmp ah, '-'
je button.zoom_out
cmp ah, 176 ;left
je add_vec_buttons.x_minus
cmp ah, 179 ;right
je add_vec_buttons.x_plus
cmp ah, 178 ;up
je add_vec_buttons.y_minus
cmp ah, 177 ;down
je add_vec_buttons.y_plus
 
jmp noclose
 
button: ; button
mov eax,17 ; get id
int 0x40
 
cmp ah,1 ; button id=1 ?
jne @f
 
mov eax,-1 ; close this program
int 0x40
@@:
cmp ah,30
jge add_vec_buttons
call update_flags ; update flags and write labels of flags
 
; do other operations according to flag
cmp ah,3 ; ah = 3 -> shading model
jne .next_m6
cmp [dr_flag],2
jne @f
; call init_envmap2 ; <----! this don't works in env mode
; and more than ~18 kb objects
; call init_envmap_cub2
@@:
cmp [dr_flag],4
jne @f
call generate_texture2
 
@@:
.next_m6:
; ah = 5 -> scale-
cmp ah,5
jne @f
.zoom_out:
mov dword[scale],0.7
movss xmm0,[rsscale]
mulss xmm0,[scale]
movss [rsscale],xmm0
; fninit
; fld [rsscale]
; fmul [scale]
; fstp [rsscale]
 
 
@@:
cmp ah,6 ; ah = 6 -> scale+
jne @f
.zoom_in:
mov dword[scale],1.3
movss xmm0,[rsscale]
mulss xmm0,[scale]
movss [rsscale],xmm0
 
; fninit
; fld [rsscale]
; fmul [scale]
; fstp [rsscale]
 
@@:
cmp ah,9 ; lights random ; 'flat' 0
jne .next_m5 ; 'grd ' 1
call make_random_lights ; 'env ' 2
call normalize_all_light_vectors ; 'bump' 3
if Ext >= SSE3
call copy_lights
end if
call do_color_buffer ; intit color_map ; 'tex ' 4
; cmp [emboss_flag],1 ; 'pos ' 5
; je @f ; 'dots' 6
; cmp [dr_flag],8
; jge @f
; cmp [dr_flag],2 ; 'txgr' 7
; jl .next_m5 ; '2tex' 8
; cmp [dr_flag],3 ; 'btex' 9
; jg .next_m5
; @@:
call init_envmap2 ; update env map if shading model = environment or bump
.next_m5:
cmp ah,11
je @f
cmp ah,12
je @f
cmp ah,13
jne .next_m4
@@:
call mirror
.next_m4:
cmp ah,14
jne @f
call exchange
@@:
cmp ah,15
jne @f
cmp [emboss_flag],1
; call init_envmap2
call do_emboss
@@:
; cmp ah,17
; jne .next_m
; cmp [move_flag],2
; jne @f
; call draw_window ; redraw other labels to navigation buttons
; @@:
; cmp [move_flag],0
; jne .next_m
; call draw_window ; redraw other labels to navigation buttons
.next_m:
cmp ah,18
jne .next_m2
 
mov [re_alloc_flag],1 ; reallocate memory
mov [triangles_count_var],20000
mov [points_count_var],20000
call alloc_mem_for_tp
mov [re_alloc_flag],0
 
mov bl,[generator_flag]
; or bl,bl
; jz .next_m2
cmp bl,1
jne @f
call generate_object
jmp .calc_norm
@@:
cmp bl,4
jg @f
movzx eax,bl ; eax < - object number
call generate_object2
jmp .calc_norm
@@:
call generate_object3
.calc_norm:
call optimize_object1
call init_triangles_normals2
call init_point_normals
call calc_bumpmap_coords ; bump and texture mapping
 
.next_m2:
cmp ah,19
je @f
cmp ah,20
jne .next_m3
@@:
mov edi,bumpmap
call calc_bumpmap
.next_m3:
cmp ah,21 ; re map bumps, texture coordinates
jne @f
call calc_bumpmap_coords
@@:
jmp noclose
 
 
; there are 6 navigation buttons each
add_vec_buttons: ; can move: object, camera,.. list is open
;
cmp ah,30
jne .next
cmp [move_flag],0
jne @f
; cmp [move_flag],2
; je .set_light1
.y_minus:
sub [vect_y],10
jmp .next
@@:
cmp [move_flag],1
jne @f
sub [yobs],10 ; observator = camera position
jmp .next
@@:
sub [sin_amplitude],10
;--------------------------------------------------
; .set_light1: ; r -
; movzx ebx,[light_no_flag] ; * 22
; mov ecx,ebx
; shl ebx,4
; shl ecx,1
; add ebx,ecx
; shl ecx,1
; add ebx,ecx
; add ebx,lights+6 ; 6 -> light vector size
;
; movzx ecx,[light_comp_flag]
; lea ecx,[ecx*3}
; add ebx,ecx ; ebx -> color to set
 
;---------------------------------------------------
.next:
cmp ah,31
jne .next1
cmp [move_flag],1
je @f
add [vect_z],10
jmp .next1
@@:
add [zobs],10 ; observator = camera position
.next1:
cmp ah,33
jne .next2
cmp [move_flag],0
jne @f
.x_minus:
sub [vect_x],10
jmp .next2
@@:
cmp [move_flag],1
jne @f
sub [xobs],10 ; observator = camera position
jmp .next2
@@:
fninit
fld [sin_frq]
fsub [sin_delta]
fstp [sin_frq]
.next2:
cmp ah,32
jne .next3
cmp [move_flag],0
jne @f
.x_plus:
add [vect_x],10
jmp .next3
@@:
cmp [move_flag],1
jne @f
add [xobs],10 ; observator = camera position
jmp .next3
@@:
fninit
fld [sin_frq] ; change wave effect frequency
fadd [sin_delta]
fstp [sin_frq]
.next3:
cmp ah,34
jne .next4
cmp [move_flag],1
je @f
 
sub [vect_z],10
jmp .next4
@@:
sub [zobs],10 ; observator = camera position
.next4:
cmp ah,35
jne .next5
cmp [move_flag],0
jne @f
; call add_vector
.y_plus:
add [vect_y],10
jmp .next5
@@:
cmp [move_flag],1
jne @f
add [yobs],10 ; observator = camera position
jmp .next5
@@:
add [sin_amplitude],10
.next5:
 
 
 
noclose:
 
cmp [edit_flag],1
jz .end_rot
cmp [r_flag],2
jne .no_x
inc [angle_x]
and [angle_x],0xff
mov [angle_z],0
jmp .end_rot
 
.no_x:
cmp [r_flag],0
jne .no_y
inc [angle_y]
and [angle_y],0xff
mov [angle_z],0
jmp .end_rot
 
.no_y:
cmp [r_flag],1
jne .end_rot
mov cx,[angle_x]
inc cx
and cx,0xff
mov [angle_z],0
mov [angle_y],cx
mov [angle_x],cx
.end_rot:
 
mov esi,angle_x
mov edi,matrix
call make_rotation_matrix
RDTSC
push eax
mov esi,[points_normals_ptr]
mov edi,[points_normals_rot_ptr]
mov ebx,matrix
mov ecx,[points_count_var]
call rotary
 
mov esi,matrix
call add_scale_to_matrix
 
mov esi,[points_ptr]
mov edi,[points_rotated_ptr]
mov ebx,matrix
mov ecx,[points_count_var]
call rotary
 
 
mov esi,[points_rotated_ptr]
mov edi,[points_translated_ptr]
mov ecx,[points_count_var]
call translate_points
 
cmp [fire_flag],0
jne @f
call clrscr ; clear the screen
@@:
cmp [dr_flag],7 ; fill if 2tex and texgrd
jge @f
cmp [catmull_flag],0 ;non fill if Catmull = off
je .non_f
cmp [dr_flag],6 ; non fill if dots
je .non_f
@@:
call fill_Z_buffer ; make background
.non_f:
cmp [dr_flag],6
jne @f
call draw_dots
jmp .blurrr
@@:
call draw_triangles ; draw all triangles from the list
cmp [edit_flag],0
jz .no_edit
call clear_vertices_index
call draw_handlers
; call edit
 
.no_edit:
 
.blurrr:
cmp [sinus_flag],0
je @f
call do_sinus
@@:
cmp [fire_flag],0
jne @f
cmp [blur_flag],0
je .no_blur ; no blur, no fire
movzx ecx,[blur_flag]
call blur_screen ; blur and fire
jmp .no_blur
@@:
cmp [emboss_flag],0
jne .emb ; if emboss=true -> no fire
movzx ecx,[fire_flag]
call blur_screen ; blur and fire
.no_blur: ; no blur, no fire
cmp [emboss_flag],0
je @f
.emb:
call do_emboss
 
@@:
 
cmp [inc_bright_flag],0 ; increase brightness
je .no_inc_bright
movzx ebx,[inc_bright_flag]
shl ebx,4
mov esi,[screen_ptr]
movzx ecx,word[size_y_var]
movzx eax,word[size_x_var]
mul ecx
lea ecx,[eax*4]
 
if (Ext = MMX)|(Ext = SSE)
mov bh,bl
push bx
shl ebx,16
pop bx
push ebx
push ebx
movq mm0,[esp]
add esp,8
else if Ext >= SSE2
mov bh,bl
push bx
shl ebx,16
pop bx
movd xmm0,ebx
shufps xmm0,xmm0,0
end if
.oop:
if Ext=NON
lodsb
add al,bl
jnc @f
mov byte[esi-1],255
loop .oop
@@:
mov [esi-1],al
loop .oop
else if (Ext=MMX)|(Ext=SSE)
movq mm1,[esi]
movq mm2,[esi+8]
paddusb mm1,mm0
paddusb mm2,mm0
movq [esi],mm1
movq [esi+8],mm2
add esi,16
sub ecx,16
jnz .oop
else
movaps xmm1,[esi]
paddusb xmm1,xmm0
movaps [esi],xmm1
add esi,16
sub ecx,16
jnc .oop
end if
 
.no_inc_bright:
 
 
cmp [dec_bright_flag],0
je .no_dec_bright
movzx ebx,[dec_bright_flag]
shl ebx,4
mov esi,[screen_ptr]
movzx eax,word[size_x_var]
movzx ecx,word[size_y_var]
mul ecx
lea ecx,[eax*4]
if (Ext = MMX)|(Ext = SSE)
mov bh,bl
push bx
shl ebx,16
pop bx
push ebx
push ebx
movq mm0,[esp]
add esp,8
else if Ext >=SSE2
mov bh,bl
push bx
shl ebx,16
pop bx
movd xmm0,ebx
shufps xmm0,xmm0,0
end if
.oop1:
if Ext=NON
lodsb
sub al,bl
jb @f
mov [esi-1],al
loop .oop1
@@:
mov byte[esi-1],0
loop .oop1
else if (Ext = MMX)|(Ext=SSE)
movq mm1,[esi]
psubusb mm1,mm0
movq [esi],mm1
add esi,8
sub ecx,8
jnz .oop1
else
movaps xmm1,[esi]
psubusb xmm1,xmm0
movaps [esi],xmm1
add esi,16
sub ecx,16
jnc .oop1
end if
.no_dec_bright:
 
 
RDTSC
sub eax,[esp]
sub eax,41
; pop eax
 
mov ecx,10
.dc:
xor edx,edx
mov edi,10
div edi
add dl,30h
mov [STRdata+ecx-1],dl
loop .dc
pop eax
 
 
mov eax,7 ; put image
mov ebx,[screen_ptr]
mov ecx,[size_y_var]
; mov ecx,SIZE_X shl 16 + SIZE_Y
mov edx,[offset_y] ;5 shl 16 + 25
cmp [dr_flag],12
jge .ff
int 0x40
jmp .f
.ff:
mov eax,65
mov esi,32
xor ebp,ebp
int 0x40
.f:
mov eax,13
mov bx,[size_x_var]
add ebx,18
shl ebx,16
mov bx,60
mov cx,[size_y_var]
sub cx,2
shl ecx,16
mov cx,9
xor edx,edx
int 40h
 
mov eax,4 ; function 4 : write text to window
mov bx,[size_x_var]
add ebx,18
shl ebx,16
mov bx,[size_y_var]
sub bx,2 ; [x start] *65536 + [y start]
mov ecx,0x00888888
mov edx,STRdata ; pointer to text beginning
mov esi,10 ; text length
int 40h
 
 
 
jmp still
 
;--------------------------------------------------------------------------------
;-------------------------PROCEDURES---------------------------------------------
;--------------------------------------------------------------------------------
include "flat_cat.inc"
include "tex_cat.inc"
include "bump_cat.inc"
include "3dmath.inc"
include "grd_line.inc"
include "b_procs.inc"
include "a_procs.inc"
include "grd_cat.inc"
include "bump_tex.inc"
include "grd_tex.inc"
include "two_tex.inc"
include "asc.inc"
if Ext >= SSE3
include "3r_phg.inc"
include '3stencil.inc'
include '3glass.inc'
include '3glass_tex.inc'
end if
clear_vertices_index:
mov edi,[vertices_index_ptr]
movzx eax,word[size_x_var]
movzx ecx,word[size_y_var]
imul ecx,eax
xor eax,eax
shr ecx,1
rep stosd
ret
edit: ; mmx required, edit mesh by vertex
push ebp
mov ebp,esp
sub esp,128
 
.y_coord equ ebp-2
.x_coord equ ebp-4
.points_translated equ ebp-10
.points equ ebp-22
.points_rotated equ ebp-34
.mx equ ebp-70
 
macro check_bar
{
movzx ebx,word[.x_coord]
movzx ecx,word[.y_coord]
movzx edx,word[size_x_var]
imul edx,ecx
add ebx,edx
push ebx
lea ecx,[ebx*2]
lea ebx,[ebx*3]
 
cmp [dr_flag],12
jl @f
add ebx,[esp]
@@:
add esp,4
add ebx,[screen_ptr]
mov ebx,[ebx]
and ebx,0x00ffffff
cmp ebx,0x00ff0000 ; is handle bar ?
}
 
emms
mov eax,37 ; get mouse state
mov ebx,1 ; x = 5, y = 25 - offsets
int 0x40
 
mov ebx,[offset_y] ;5 shl 16 + 25
movd mm0,ebx
movd mm1,eax
movd mm3,[size_y_var]
pcmpgtw mm0,mm1
pcmpgtw mm3,mm1
pxor mm3,mm0
movd eax,mm3
mov cx,ax
shr eax,16
and ax,cx
or ax,ax
jz .no_edit
 
 
movd mm0,ebx
psubw mm1,mm0
movd eax,mm1
 
; store both x and y coordinates
ror eax,16
; push eax
; sub esp,256
mov [.x_coord],eax
test word[mouse_state],100000000b
jz .not_press ; check if left mouse button press
 
; left button pressed
 
 
check_bar
jne .no_edit
add ecx,[vertices_index_ptr]
mov cx,word[ecx]
inc cx
 
 
mov [vertex_edit_no],cx ;if vert_edit_no = 0, no vertex selected
 
mov eax,dword[.x_coord]
mov dword[edit_end_x],eax
mov dword[edit_start_x],eax
jmp .end
.not_press:
test byte[mouse_state],1b ; check if left button is held
jz .not_held
; check_bar
; jne .no_edit
; add ecx,[vertices_index_ptr]
; mov cx,[ecx]
; inc cx
cmp [vertex_edit_no],0 ; cx ; vertex number
je .end
push dword[.x_coord]
pop dword[edit_end_x]
jmp .end
.not_held:
shr [mouse_state],16
test byte[mouse_state],1b ; test if left button released
jz .end
check_bar
jne .end
 
movzx esi,[vertex_edit_no]
dec esi
lea esi,[esi*3]
add esi,esi
add esi,[points_translated_ptr]
emms
 
movd mm1,dword[esi]
paddw mm1,mm0
psubw mm1,qword[vect_x]
movd dword[esi],mm1
 
lea edi,[.points]
; detranslate
fninit
fild word[esi+4]
fstp dword[edi+8]
fild word[esi+2]
fisub word[offset_x]
fstp dword[edi+4]
fild word[esi]
fisub word[offset_y] ; proteza
fstp dword[edi]
 
mov esi,matrix
lea edi,[.mx]
call reverse_mx_3x3
 
lea esi,[.points]
lea edi,[.points_rotated]
lea ebx,[.mx]
mov ecx,1
call rotary
 
; inject into vertex list
movzx edi,[vertex_edit_no]
dec edi
lea edi,[edi*3]
shl edi,2
add edi,[points_ptr]
lea esi,[.points_rotated]
cld
movsd
movsd
movsd
; mov ecx,3
; cld
; rep movsd
 
 
mov dword[edit_end_x],0
mov [vertex_edit_no],0
 
.no_edit:
.end:
mov esp,ebp
pop ebp
ret
 
alloc_buffer_mem:
push ebp
mov ebp,esp
.temp equ ebp-4
push dword 0
 
mov eax, 68
mov ebx, 11
int 0x40 ; -> create heap, to be sure
 
 
movzx ecx,word[size_x_var]
movzx eax,word[size_y_var]
mul ecx
 
mov [.temp],eax
lea ecx,[eax*4] ; more mem for r_phg cause
add ecx,256
mov eax,68
mov ebx,20
mov edx,[screen_ptr]
int 0x40
mov [screen_ptr],eax
 
mov ecx,[.temp]
shl ecx,2
add ecx,256
mov eax,68
mov ebx,20
mov edx,[Zbuffer_ptr]
int 0x40
mov [Zbuffer_ptr],eax
 
 
mov ecx,[.temp]
add ecx,ecx
add ecx,256
mov eax,68
mov ebx,20
mov edx,[vertices_index_ptr]
int 0x40
mov [vertices_index_ptr],eax
 
mov esp,ebp
pop ebp
 
 
 
 
update_flags:
; updates flags and writing flag description
; in ah - button number
push ax
mov edi,menu
.ch_another:
cmp ah,byte[edi] ; ah = button id
jne @f
mov bl,byte[edi+11] ; max_flag + 1
cmp bl,255
je .no_write
inc byte[edi+12] ; flag
cmp byte[edi+12],bl
jne .write
mov byte[edi+12],0
jmp .write
@@:
add edi,17
cmp byte[edi],-1
jne .ch_another
jmp .no_write
.write:
; clreol {pascal never dies}
; * eax = 13 - function number
; * ebx = [coordinate on axis x]*65536 + [size on axis x]
; * ecx = [coordinate on axis y]*65536 + [size on axis y]
; * edx = color 0xRRGGBB or 0x80RRGGBB for gradient fill
 
mov eax,13 ; function 13 write rectangle
movzx ecx,byte[edi]
sub cl,2
lea ecx,[ecx*3]
lea ecx,[ecx*5]
add ecx,28
shl ecx,16
add ecx,14 ; ecx = [coord y]*65536 + [size y]
mov bx,[size_x_var]
shl ebx,16
add ebx,(12+70)*65536+25 ; [x start] *65536 + [size x]
mov edx,0x00000000 ; color 0x00RRGGBB
int 0x40
 
mov eax,4 ; function 4 : write text to window
movzx ebx,byte[edi]
sub bl,2
lea ebx,[ebx*3]
lea ebx,[ebx*5]
mov cx,[size_x_var]
shl ecx,16
add ebx,ecx
add ebx,(12+70)*65536+28 ; [x start] *65536 + [y start]
mov ecx,0x00ddeeff ; font 1 & color ( 0xF0RRGGBB )
movzx edx,byte[edi+12] ; current flag
shl edx,2 ; * 4 = text length
add edx,dword[edi+13] ; pointer to text beginning
mov esi,4 ; text length -
; flag description 4 characters
int 0x40
 
.no_write:
pop ax
ret
normalize_all_light_vectors:
mov edi,lights
@@:
call normalize_vector ; 3dmath.inc
add edi,LIGHT_SIZE
cmp edi,lightsend ;ecx
jl @b
ret
 
calc_bumpmap_coords: ; map texture, bump
;macro .comment222
; ; planar mapping
; mov esi,points
; mov edi,tex_points
; @@:
; add esi,2
; movsd
; cmp dword[esi],dword -1
; jne @b
 
; .Pi2 equ dword[ebp-4]
 
; mov ebp,esp
; sub esp,4
 
fninit
fldpi
fadd st,st
mov esi,[points_ptr]
mov edi,tex_points
mov ecx,[points_count_var]
inc ecx
; cmp [map_tex_flag],1
; jne .cylindric
; spherical mapping around y axle
 
@@:
fld dword[esi] ; x coord
fld dword[esi+8] ; z coord
fpatan ; arctg(st1/st)
; fdiv .Pi2
fdiv st0,st1
fimul [tex_x_div2]
fiadd [tex_x_div2]
fistp word[edi] ; x
 
fld dword[esi+4] ; y coord
fld dword[esi] ; x
fmul st,st0
fld dword[esi+4] ; y
fmul st,st0
fld dword[esi+8] ; z
fmul st,st0
faddp
faddp
fsqrt
fpatan
fldpi
fdivp
fimul [tex_y_div2]
fiadd [tex_y_div2]
fistp word[edi+2] ; y
 
add esi,12
add edi,4
loop @b
ffree st0
; jmp .end_map
; .cylindric:
; fld dword[esi] ; around y axle
; fld dword[esi+8]
; fpatan
; fdiv st0,st1
; fimul [tex_x_div2]
; fiadd [tex_x_div2]
; fistp word[edi]
 
; fld dword[esi+4]
; fimul [tex_y_div2]
; fiadd [tex_y_div2]
; fistp word[edi+2]
 
; add esi,12
; add edi,4
; loop .cylindric
; ffree st0
;; mov esp,ebp
; .end_map:
ret
 
 
init_envmap2: ; do env_map using many light sources
;env_map 512 x 512 x 3 bytes
.temp equ word [ebp-2]
.nEy equ word [ebp-4]
.nEx equ word [ebp-6]
.col_r equ [ebp-8]
.col_g equ [ebp-9]
.col_b equ [ebp-10]
 
push ebp
mov ebp,esp
sub esp,20
mov edi,envmap
fninit
 
mov dx,- TEX_Y / 2 ;256 ; dx - vertical coordinate = y
.ie_ver:
mov cx,- TEX_X / 2 ;256 ; cx - horizontal coord = x
.ie_hor:
xor ebx,ebx
mov dword .col_b, 0
.light:
lea esi,[lights+ebx]
fld dword[esi] ; light vector x cooficient
fimul [tex_x_div2] ;[i256]
mov .temp,cx
fisubr .temp
fistp .nEx
fld dword[esi+4] ; light vector y cooficient
fimul [tex_y_div2] ;[i256]
mov .temp,dx
fisubr .temp
fistp .nEy
 
cmp .nEx,- TEX_X / 2 ;256
jl .update_counters
cmp .nEy,- TEX_Y / 2 ;256
jl .update_counters
cmp .nEx,TEX_X / 2 ;256
jg .update_counters
cmp .nEy,TEX_Y / 2 ;256
jg .update_counters
 
fild .nEx
fmul st,st0
fild .nEy
fmul st,st0
faddp
fsqrt
fisubr [i256]
fmul [env_const]
fidiv [i256] ; st - 'virtual' dot product
 
fcom [dot_max]
fstsw ax
sahf
jb @f
ffree st
fld1 ;[dot_max]
@@:
fcom [dot_min]
fstsw ax
sahf
ja @f
ffree st
fldz ;[dot_min]
@@:
push ebp
movzx ax,byte[esi+21]
push ax ;- shines
mov al,byte[esi+14] ; b orginal color
push ax
mov al,byte[esi+13] ; g
push ax
mov al,byte[esi+12] ; r
push ax
; pxor xmm1,xmm1
; movd xmm0,[esi+12]
; punpckhbw xmm0,xmm1
; sub esp,8
; movq [esp],xmm0
 
 
mov al,byte[esi+20] ; b max color
push ax
mov al,byte[esi+19] ; g
push ax
mov al,byte[esi+18] ; r
push ax
mov al,byte[esi+17] ; b min col
push ax
mov al,byte[esi+16] ; g
push ax
mov al,byte[esi+15] ; r
push ax
push eax ; earlier - dot pr
; fstp .dot_product
; push .dot_product
call calc_one_col
pop ebp
; eax-0x00rrggbb
cmp al,.col_b
jbe @f
mov .col_b,al
@@: ; eax - ggbb00rr
shr ax,8
cmp al,.col_g
jbe @f
mov .col_g,al
@@: ; eax - bb0000gg
shr eax,16
cmp al,.col_r
jbe @f
mov .col_r,al
@@:
.update_counters: ; update and jump when neccesery
add ebx,LIGHT_SIZE
cmp bx,[all_lights_size]
jl .light ; next_light
mov eax,dword .col_b
stosd
dec edi
 
inc cx
cmp cx,TEX_X / 2 ;256
jne .ie_hor
 
inc dx
cmp dx,TEX_Y / 2 ;256
jne .ie_ver
 
mov esp,ebp
pop ebp
ret
 
 
 
do_color_buffer: ; do color buffer for Gouraud, flat shading
;env_map 512 x 512 x 3 bytes ; many lights using
.temp equ word [ebp-2]
.nz equ dword [ebp-6] ; dword
.ny equ dword [ebp-10]
.nx equ dword [ebp-14]
.col_r equ [ebp-16]
.col_g equ [ebp-17]
.col_b equ [ebp-18]
 
push ebp
mov ebp,esp
sub esp,20
mov edi,color_map
fninit
 
mov dx,- TEX_Y / 2 ;-256 ; dx - vertical coordinate = y
.ie_ver:
mov cx,- TEX_X / 2 ;256 ; cx - horizontal coord = x
.ie_hor:
mov .temp,cx
fild .temp
fidiv [i256] ;st = Nx - vector normal x cooficient
fst .nx
fmul st,st0
mov .temp,dx
fild .temp
fidiv [i256] ; st = Ny - vector normal y coeficient
fst .ny
fmul st,st0
faddp
fld1
fchs
faddp
fabs
fsqrt
fchs
fstp .nz ; st - Nz - vect normal z coeficient
xor ebx,ebx
mov dword .col_b, 0
.light:
push edi ;env_map
lea esi,[lights+ebx]
lea edi,.nx
call dot_product
pop edi
fcom [dot_min]
fstsw ax
sahf
ja .env_ok1 ;compare with dot_max
ffree st
 
jmp .update_counters
.env_ok1:
fcom [dot_max]
fstsw ax
sahf
jb .env_ok2 ; calc col
ffree st
jmp .update_counters
.env_ok2: ;calc col
push ebp
movzx ax,byte[esi+21]
push ax ;- shines
mov al,byte[esi+14] ; b orginal color
push ax
mov al,byte[esi+13] ; g
push ax
mov al,byte[esi+12] ; r
push ax
mov al,byte[esi+20] ; b max color
push ax
mov al,byte[esi+19] ; g
push ax
mov al,byte[esi+18] ; r
push ax
mov al,byte[esi+17] ; b min col
push ax
mov al,byte[esi+16] ; g
push ax
mov al,byte[esi+15] ; r
push ax
push eax ; earlier - dot pr
; fstp .dot_product
; push .dot_product
call calc_one_col
pop ebp
; eax-0x00rrggbb
cmp al,.col_b
jbe @f
mov .col_b,al
@@:
shr ax,8
cmp al,.col_g
jbe @f
mov .col_g,al
@@:
shr eax,16
cmp al,.col_r
jbe @f
mov .col_r,al
@@:
.update_counters: ; update and jump when neccesery
add ebx,LIGHT_SIZE
cmp bx,[all_lights_size]
jl .light ; next_light
mov eax,dword .col_b
stosd
dec edi
 
inc cx
cmp cx,TEX_X / 2 ;256
jne .ie_hor
 
inc dx
cmp dx,TEX_X / 2 ;256
jne .ie_ver
 
.env_done:
mov esp,ebp
pop ebp
ret
if Ext >= SSE2
init_point_normals:
.z equ dword [ebp-8]
.y equ dword [ebp-12]
.x equ [ebp-16]
.point_number equ dword [ebp-28]
.hit_faces equ dword [ebp-32]
 
push ebp
mov ebp,esp
sub esp,64
and ebp,-16
mov edi,[points_normals_ptr]
mov .point_number,0
.ipn_loop:
movd xmm0,.point_number
pshufd xmm0,xmm0,0
mov .hit_faces,0
mov .x,dword 0
mov .y,0
mov .z,0
mov esi,[triangles_ptr]
xor ecx,ecx ; ecx - triangle number
.ipn_check_face:
movdqu xmm1,[esi]
pcmpeqd xmm1,xmm0
pmovmskb eax,xmm1
and eax,0xfff
or eax,eax
jz .ipn_next_face
push esi
mov esi,ecx
lea esi,[esi*3]
shl esi,2
add esi,[triangles_normals_ptr]
movups xmm7,[esi]
addps xmm7,.x
movaps .x,xmm7
pop esi
inc .hit_faces
 
.ipn_next_face:
add esi,12
inc ecx
cmp ecx,[triangles_count_var]
jne .ipn_check_face
cvtsi2ss xmm6,.hit_faces
movaps xmm7,.x
 
rcpss xmm6,xmm6
shufps xmm6,xmm6,11000000b
mulps xmm7,xmm6
movlps [edi],xmm7
movhlps xmm7,xmm7
movss [edi+8],xmm7
call normalize_vector
; movaps xmm6,xmm7
; mulps xmm6,xmm6
; andps xmm6,[zero_hgst_dd]
; haddps xmm6,xmm6
; haddps xmm6,xmm6
; rsqrtps xmm6,xmm6
; mulps xmm7,xmm6
; movlps [edi],xmm7
; movhlps xmm7,xmm7
; movss [edi+8],xmm7
 
add edi,12
inc .point_number
mov edx,.point_number
cmp edx,[points_count_var]
jne .ipn_loop
 
add esp,64
pop ebp
ret
else
init_point_normals:
.x equ dword [ebp-4]
.y equ dword [ebp-8]
.z equ dword [ebp-12]
.point_number equ dword [ebp-28]
.hit_faces equ dword [ebp-32]
 
fninit
mov ebp,esp
sub esp,32
mov edi,[points_normals_ptr]
mov .point_number,0
.ipn_loop:
mov .hit_faces,0
mov .x,0
mov .y,0
mov .z,0
mov esi,[triangles_ptr]
xor ecx,ecx ; ecx - triangle number
.ipn_check_face:
xor ebx,ebx ; ebx - 'position' in one triangle
.ipn_check_vertex:
mov eax,dword[esi+ebx] ; eax - point_number
cmp eax,.point_number
jne .ipn_next_vertex
push esi
mov esi,ecx
lea esi,[esi*3]
; lea esi,[triangles_normals+esi*4]
shl esi,2
add esi,[triangles_normals_ptr]
 
fld .x
fadd dword[esi+vec_x] ; vec_x this defined in 3dmath.asm - x cooficient
fstp .x ; of normal vactor
fld .y
fadd dword[esi+vec_y]
fstp .y
fld .z
fadd dword[esi+vec_z]
fstp .z
pop esi
inc .hit_faces
jmp .ipn_next_face
.ipn_next_vertex:
add ebx,4
cmp ebx,12
jne .ipn_check_vertex
.ipn_next_face:
add esi,12
inc ecx
cmp ecx,[triangles_count_var]
jne .ipn_check_face
 
fld .x
fidiv .hit_faces
fstp dword[edi+vec_x]
fld .y
fidiv .hit_faces
fstp dword[edi+vec_y]
fld .z
fidiv .hit_faces
fstp dword[edi+vec_z]
call normalize_vector
add edi,12 ;type vector 3d
inc .point_number
mov edx,.point_number
cmp edx,[points_count_var]
jne .ipn_loop
 
mov esp,ebp
ret
;===============================================================
end if
init_triangles_normals2:
mov ebx,[triangles_normals_ptr]
mov ebp,[triangles_ptr]
mov ecx,[triangles_count_var]
@@:
push ecx
push ebx
mov ebx,vectors
mov esi,dword[ebp] ; first point index
lea esi,[esi*3]
; lea esi,[points+esi*2] ; esi - pointer to 1st 3d point
shl esi,2
add esi,[points_ptr]
mov edi,dword[ebp+4] ; first point index
lea edi,[edi*3]
shl edi,2
add edi,[points_ptr]
; movzx edi,word[ebp+2] ; second point index
; lea edi,[edi*3]
; lea edi,[points+edi*2] ; edi - pointer to 2nd 3d point
call make_vector_r
add ebx,12
mov esi,edi
mov edi,dword[ebp+8] ; third point index
lea edi,[edi*3]
shl edi,2
add edi,[points_ptr]
; lea edi,[points+edi*2]
call make_vector_r
mov edi,ebx ; edi - pointer to 2nd vector
mov esi,ebx
sub esi,12 ; esi - pointer to 1st vector
pop ebx
call cross_product
mov edi,ebx
call normalize_vector
add ebp,12
add ebx,12
pop ecx
sub ecx,1
jnz @b
; cmp dword[ebp],-1
; jne @b
ret
 
if Ext >= SSE3
copy_lights: ; after normalising !
mov esi,lights
mov edi,lights_aligned
mov ecx,3
.again:
push ecx
mov ecx,3
cld
rep movsd
xor eax,eax
stosd
mov ecx,3
.b:
push ecx
mov ecx,3
@@:
movzx ebx,byte[esi]
cvtsi2ss xmm0,ebx
movss [edi],xmm0
inc esi
add edi,4
loop @b
stosd
pop ecx
loop .b
inc esi ; skip shiness
pop ecx
loop .again
ret
end if
 
clrscr:
mov edi,[screen_ptr]
movzx ecx,word[size_x_var]
movzx eax,word[size_y_var]
imul ecx,eax
 
 
xor eax,eax
if Ext=NON
rep stosd
else if Ext = MMX
pxor mm0,mm0
@@:
movq [edi+00],mm0
movq [edi+08],mm0
movq [edi+16],mm0
movq [edi+24],mm0
add edi,32
sub ecx,8
jnc @b
else
push ecx
mov ecx,edi
and ecx,0x0000000f
rep stosb
pop ecx
and ecx,0xfffffff0
xorps xmm0,xmm0
@@:
movaps [edi],xmm0
movaps [edi+16],xmm0
movaps [edi+32],xmm0
movaps [edi+48],xmm0
add edi,64
sub ecx,16
jnz @b
end if
 
ret
 
 
draw_triangles:
 
emms
; update translated list MMX required
cmp [vertex_edit_no],0
je @f
movzx eax,[vertex_edit_no]
dec eax
movd mm0,[edit_end_x]
psubw mm0,[edit_start_x]
lea eax,[eax*3]
add eax,eax
add eax,[points_translated_ptr]
movd mm1,dword[eax]
paddw mm1,mm0
movd dword[eax],mm1
@@:
if Ext >= SSE3
cmp [dr_flag],13
jnge .no_stencil
mov esi,[triangles_ptr]
mov ecx,[triangles_count_var]
@@:
push esi
push ecx
 
mov eax,[esi]
mov ebx,[esi+4]
mov ecx,[esi+8]
imul eax,[i12]
imul ebx,[i12]
imul ecx,[i12]
add eax,[points_rotated_ptr]
add ebx,[points_rotated_ptr]
add ecx,[points_rotated_ptr]
push dword[ecx+8]
push dword[ebx+8]
push dword[eax+8]
movups xmm0,[esp]
add esp,12
andps xmm0,[zero_hgst_dd]
 
 
mov eax,[esi]
mov ebx,[esi+4]
mov ecx,[esi+8]
shl eax,1
shl ebx,1
shl ecx,1
lea eax,[eax*3]
lea ebx,[ebx*3]
lea ecx,[ecx*3]
add eax,[points_translated_ptr]
add ebx,[points_translated_ptr]
add ecx,[points_translated_ptr]
mov eax,[eax]
mov ebx,[ebx]
mov ecx,[ecx]
ror eax,16
ror ebx,16
ror ecx,16
 
 
mov esi,[Zbuffer_ptr]
 
call stencil_tri
 
pop ecx
pop esi
add esi,12
dec ecx
jnz @b
 
.no_stencil:
end if
 
 
 
mov esi,[triangles_ptr]
mov ecx,[triangles_count_var]
.again_dts:
push ecx
mov ebp,[points_translated_ptr]
if Ext = NON
mov eax,dword[esi]
mov [point_index1],eax
lea eax,[eax*3]
add eax,eax
push ebp
add ebp,eax
mov eax,[ebp]
; cmp [vertex_edit_no],0
; jne @f
;
; @@:
mov dword[xx1],eax
mov eax,[ebp+4]
mov [zz1],ax
 
pop ebp
 
 
mov eax,dword[esi+4]
mov [point_index2],eax
lea eax,[eax*3]
add eax,eax
push ebp
add ebp,eax
mov eax,[ebp]
mov dword[xx2],eax
mov eax,[ebp+4]
mov [zz2],ax
pop ebp
 
 
mov eax,dword[esi+8] ; xyz3 = [ebp+[esi+4]*6]
mov [point_index3],eax
lea eax,[eax*3]
add eax,eax
; push ebp
add ebp,eax
mov eax,[ebp]
mov dword[xx3],eax
mov eax,[ebp+4]
mov [zz3],ax
else
movq mm0,[esi] ; don't know MMX
movq qword[point_index1],mm0
; shr eax,16
; mov [point_index2],ax
mov eax,dword[esi+8]
mov [point_index3],eax
movdqu xmm0,[esi]
paddd xmm0,xmm0
movdqa xmm1,xmm0
paddd xmm0,xmm0
paddd xmm0,xmm1
movd eax,xmm0
psrldq xmm0,4
movd ebx,xmm0
psrldq xmm0,4
movd ecx,xmm0
and eax,0FFFFh
and ebx,0FFFFh
and ecx,0FFFFh
movq mm0,[ebp+eax]
movq mm1,[ebp+ebx]
movq mm2,[ebp+ecx]
movq qword[xx1],mm0
movq qword[xx2],mm1
movq qword[xx3],mm2
; emms
end if ; *********************************
if 0
cmp [vertex_edit_no],0
jne .no_edit
mov ax,[vertex_edit_no]
dec ax
cmp ax,[point_index1]
jne @f
movd mm0,[edit_start_x]
psubw mm0,[edit_end_x]
movd mm1,dword[xx1]
paddw mm1,mm0
movd dword[xx1],mm1
jmp .no_edit
@@:
 
cmp ax,[point_index2]
jne @f
movd mm0,[edit_start_x]
psubw mm0,[edit_end_x]
movd mm1,dword[xx2]
paddw mm1,mm0
movd dword[xx2],mm1
jmp .no_edit
@@:
 
cmp ax,[point_index3]
jne @f
movd mm0,[edit_start_x]
psubw mm0,[edit_end_x]
movd mm1,dword[xx3]
paddw mm1,mm0
movd dword[xx3],mm1
jmp .no_edit
@@:
 
 
.no_edit:
end if
 
push esi ;
fninit ; DO culling AT FIRST
cmp [culling_flag],1 ; (if culling_flag = 1)
jne .no_culling
mov esi,point_index1 ; *********************************
mov ecx,3 ;
@@:
mov eax,dword[esi]
lea eax,[eax*3]
shl eax,2
add eax,[points_normals_rot_ptr]
bt dword[eax+8],+31
jc .no_culling
; lea eax,[eax+point_normals_rotated]
; fld dword[eax+8] ; *****************************
; ftst ; CHECKING OF Z COOFICIENT OF
; fstsw ax ; NORMAL VECTOR
; sahf
; jb @f
; ffree st
loop @b
jmp .end_draw ; non visable
; @@:
; ffree st ;is visable
.no_culling:
cmp [dr_flag],0 ; draw type flag
je .flat_draw
cmp [dr_flag],2
je .env_mapping
cmp [dr_flag],3
je .bump_mapping
cmp [dr_flag],4
je .tex_mapping
cmp [dr_flag],5
je .rainbow
cmp [dr_flag],7
je .grd_tex
cmp [dr_flag],8
je .two_tex
cmp [dr_flag],9
je .bump_tex
cmp [dr_flag],10
je .cubic_env_mapping
cmp [dr_flag],11
je .draw_smooth_line
if Ext >= SSE3
cmp [dr_flag],12
je .r_phg
cmp [dr_flag],13
je .glass
cmp [dr_flag],14
je .glass_tex
 
end if ; ****************
mov esi,point_index3 ; do Gouraud shading
mov ecx,3
.again_grd_draw:
mov eax,dword[esi]
shl eax,2
lea eax,[eax*3]
add eax,[points_normals_rot_ptr]
if Ext < SSE
; texture x=(rotated point normal -> x * 255)+255
fld dword[eax] ; x cooficient of normal vector
fmul dword[correct_texf]
fadd dword[correct_texf]
fistp [temp1]
; texture y=(rotated point normal -> y * 255)+255
fld dword[eax+4] ; y cooficient
fmul dword[correct_texf]
fadd dword[correct_texf]
fistp [temp2]
mov eax,[temp2]
mov ebx,[temp1]
else
movlps xmm0,[eax]
mulps xmm0,[correct_texf]
addps xmm0,[correct_texf]
cvtps2dq xmm0,xmm0
movd eax,xmm0
psrldq xmm0,4
movd ebx,xmm0
end if
and ebx,0xfffffff
shl eax,TEX_SHIFT
add eax,ebx
lea eax,[eax*3+color_map]
mov eax,dword[eax]
; cmp [catmull_flag],1 ; put on stack z coordinate if necessary
; jne @f
lea edx,[ecx*3]
push word[edx*2+xx1-2] ; zz1 ,2 ,3
; @@:
ror eax,16 ; eax -0xxxrrggbb -> 0xggbbxxrr
xor ah,ah
push ax ;r
rol eax,8 ; eax-0xggbb00rr -> 0xbb00rrgg
xor ah,ah
push ax ;g
shr eax,24
push ax ;b
 
sub esi,4
dec cx
jnz .again_grd_draw
jmp .both_draw
 
; movzx edi,[point_index3] ;gouraud shading according to light vector
; lea edi,[edi*3]
; lea edi,[4*edi+point_normals_rotated] ; edi - normal
; mov esi,light_vector
; call dot_product
; fabs
; fimul [orginal_color_r]
; fistp [temp_col]
; and [temp_col],0x00ff
; push [temp_col]
; push [temp_col]
; push [temp_col]
 
; movzx edi,[point_index2]
; lea edi,[edi*3]
; lea edi,[4*edi+point_normals_rotated] ; edi - normal
; mov esi,light_vector
; call dot_product
; fabs
; fimul [orginal_color_r]
; fistp [temp_col]
; and [temp_col],0x00ff
; push [temp_col]
; push [temp_col]
; push [temp_col]
 
; movzx edi,[point_index1]
; lea edi,[edi*3]
; lea edi,[4*edi+point_normals_rotated] ; edi - normal
; mov esi,light_vector
; call dot_product
; fabs
; fimul [orginal_color_r]
; fistp [temp_col]
; and [temp_col],0x00ff
; push [temp_col]
; push [temp_col]
; push [temp_col]
.rainbow:
; cmp [catmull_flag],1 ; put on stack z coordinate if necessary
; jne @f
push [zz3]
@@:
mov eax,dword[yy3]
mov ebx,0x00ff00ff
and eax,ebx
push eax
neg al
push ax
push [zz2]
 
mov eax,dword[yy2]
and eax,ebx
push eax
neg al
push ax
push [zz1]
 
mov eax,dword[yy1]
and eax,ebx
push eax
neg al
push ax
.both_draw:
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
mov esi,[Zbuffer_ptr]
call gouraud_triangle_z
jmp .end_draw
 
.flat_draw: ;**************************
fninit ; FLAT DRAWING
mov eax,[point_index1]
mov ebx,[point_index2]
mov ecx,[point_index3]
; shl eax,2
imul eax,[i12]
imul ebx,[i12]
imul ecx,[i12]
; shl ebx,2
; shl ecx,2
; lea eax,[eax*3] ;+point_normals_rotated]
add eax,[points_normals_rot_ptr]
; lea ebx,[ebx*3] ;+point_normals_rotated]
add ebx,[points_normals_rot_ptr]
; lea ecx,[ecx*3] ;+point_normals_rotated]
add ecx,[points_normals_rot_ptr]
fld dword[eax] ; x cooficient of normal vector
fadd dword[ebx]
fadd dword[ecx]
fidiv [i3]
fmul dword[correct_texf]
fadd dword[correct_texf]
fistp [temp1] ;dword[esp-4] ; x temp variables
fld dword[eax+4] ; y cooficient of normal vector
fadd dword[ebx+4]
fadd dword[ecx+4]
fidiv [i3]
fmul dword[correct_texf]
fadd dword[correct_texf]
fistp [temp2] ;dword[esp-8] ; y
mov edx,[temp2] ;dword[esp-8]
and edx,0xfffffff
and [temp1],0xfffffff
shl edx,TEX_SHIFT
add edx,[temp1] ;dword[esp-4]
 
lea eax,[3*edx]
add eax,color_map
mov edx,dword[eax]
 
and edx,0x00ffffff ; edx = 0x00rrggbb
 
 
 
; mov ax,[zz1] ; z position depend draw
; add ax,[zz2]
; add ax,[zz3]
; cwd
; idiv [i3] ; = -((a+b+c)/3+130)
; add ax,130
; neg al
; xor edx,edx
; mov ah,al ;set color according to z position
; shl eax,8
; mov edx,eax
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
 
mov esi,[Zbuffer_ptr]
push word[zz3]
push word[zz2]
push word[zz1]
call flat_triangle_z
jmp .end_draw
 
.env_mapping:
push [zz3]
push [zz2]
push [zz1]
 
mov esi,point_index1
sub esp,12
mov edi,esp
mov ecx,3
@@:
mov eax,dword[esi]
lea eax,[eax*3]
shl eax,2
add eax,[points_normals_rot_ptr] ;point_normals_rotated
movlps xmm0,[eax]
mulps xmm0,[correct_texf]
addps xmm0,[correct_texf]
cvtps2dq xmm0,xmm0
packssdw xmm0,xmm0
movd [edi],xmm0
add edi,4
add esi,4
loop @b
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
mov esi,envmap
 
mov edx,[Zbuffer_ptr]
call tex_triangle_z
 
jmp .end_draw
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.cubic_env_mapping:
push [zz3]
push [zz2]
push [zz1]
 
mov esi,point_index1
sub esp,12
mov edi,esp
mov ecx,3
@@:
mov eax,dword[esi]
lea eax,[eax*3]
shl eax,2
add eax,[points_normals_rot_ptr]
 
fld dword[eax]
fmul dword[eax+4]
fld1
fld1
faddp
fmulp
fmul dword[correct_texf]
fadd dword[correct_texf]
fistp word[edi]
mov word[edi+2],0
; fistp word[edi+2]
; # last change
; ; texture x=(rotated point normal -> x * 255)+255
; fld dword[eax]
; fimul [correct_tex]
; fiadd [correct_tex]
; fistp word[edi]
; ; texture y=(rotated point normal -> y * 255)+255
; fld dword[eax+4]
; fimul [correct_tex]
; fiadd [correct_tex]
; fistp word[edi+2]
; # end of last ch.
add edi,4
add esi,4
loop @b
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
mov esi,envmap_cub
mov edx,[Zbuffer_ptr]
 
call tex_triangle_z
 
jmp .end_draw
 
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
.bump_mapping:
 
push [Zbuffer_ptr]
push [zz3]
push [zz2]
push [zz1]
 
mov esi,point_index1
sub esp,12
mov edi,esp
mov ecx,3
@@:
mov eax,dword[esi]
lea eax,[eax*3]
shl eax,2
; imul eax,[i12]
add eax,[points_normals_rot_ptr] ;point_normals_rotated
; texture x=(rotated point normal -> x * 255)+255
 
movlps xmm0,[eax]
mulps xmm0,[correct_texf]
addps xmm0,[correct_texf]
cvtps2dq xmm0,xmm0
packssdw xmm0,xmm0
movd [edi],xmm0
add edi,4
add esi,4
loop @b
 
mov esi,[point_index3] ; bump map coords
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index2]
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index1]
shl esi,2
add esi,tex_points
push dword[esi]
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
mov esi,envmap
mov edx,bumpmap ;BUMP_MAPPING
 
call bump_triangle_z
 
jmp .end_draw
 
.tex_mapping:
 
push [zz3]
push [zz2]
push [zz1]
; @@:
mov esi,[point_index3] ; tex map coords
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index2]
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index1]
shl esi,2
add esi,tex_points
push dword[esi]
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
mov esi,texmap
mov edx,[Zbuffer_ptr]
 
call tex_triangle_z
 
jmp .end_draw
; .ray:
; grd_triangle according to points index
; cmp [catmull_flag],0
; je @f
; push [zz3] ; spot light with attenuation
; @@:
; movzx eax,[point_index3] ; env_map - points color list
; shl eax,1 ; each color as word, 0x00rr00gg00bb..
; lea eax,[3*eax+bumpmap]
; push word[eax]
; push word[eax+2]
; push word[eax+4]
; cmp [catmull_flag],0
; je @f
; push [zz2]
; @@:
; movzx eax,[point_index2] ; env_map - points color list
; shl eax,1 ; each color as word, 0x00rr00gg00bb..
; lea eax,[eax*3+bumpmap]
; push word[eax]
; push word[eax+2]
; push word[eax+4]
; cmp [catmull_flag],0
; je @f
; push [zz1]
; @@:
; movzx eax,[point_index1] ; env_map - points color list
; shl eax,1 ; each color as word, 0xrr00gg00bb00..
; lea eax,[eax*3+bumpmap]
; push word[eax]
; push word[eax+2]
; push word[eax+4]
; jmp .both_draw
 
.grd_tex: ; smooth shading + texture
push ebp
mov ebp,esp
sub esp,4
push ebp
 
mov esi,[point_index3] ; tex map coords
shl esi,2
add esi,tex_points
push dword[esi] ; texture coords as first
mov esi,[point_index2] ; group of parameters
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index1]
shl esi,2
add esi,tex_points
push dword[esi]
 
mov esi,point_index3
mov ecx,3
 
.aagain_grd_draw:
 
lea edx,[ecx*3]
push word[edx*2+xx1-2] ; zz1 ,2 ,3
; fninit
mov eax,dword[esi]
shl eax,2
lea eax,[eax*3] ;+point_normals_rotated]
add eax,[points_normals_rot_ptr]
if Ext < SSE
; texture x=(rotated point normal -> x * 255)+255
fld dword[eax] ; x cooficient of normal vector
fmul dword[correct_texf]
fadd dword[correct_texf]
fistp [temp1] ;word[ebp-2]
; texture y=(rotated point normal -> y * 255)+255
fld dword[eax+4] ; y cooficient
fmul dword[correct_texf]
fadd dword[correct_texf]
fistp [temp2] ;word[ebp-4]
mov eax,[temp2]
mov ebx,[temp1]
else
movlps xmm0,[eax]
mulps xmm0,[correct_texf]
addps xmm0,[correct_texf]
cvtps2dq xmm0,xmm0
movd eax,xmm0
psrldq xmm0,4
movd ebx,xmm0
end if
and ebx,0xfffffff ; some onjects need thid 'and'
shl eax,TEX_SHIFT
add eax,ebx
lea eax,[eax*3]
add eax,color_map
mov eax,dword[eax]
 
ror eax,16 ; eax -0xxxrrggbb -> 0xggbbxxrr
xor ah,ah
push ax ;r
rol eax,8 ; eax-0xggbb00rr -> 0xbb00rrgg
xor ah,ah
push ax ;g
shr eax,24
push ax ;b
 
sub esi,4
dec cx
jnz .aagain_grd_draw
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
mov edx,texmap
mov esi,[Zbuffer_ptr]
 
call tex_plus_grd_triangle
 
pop ebp
mov esp,ebp
pop ebp
jmp .end_draw
 
.two_tex:
push [Zbuffer_ptr]
 
push word[zz3]
push word[zz2]
push word[zz1]
 
mov esi,[point_index3] ; tex map coords
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index2]
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index1]
shl esi,2
add esi,tex_points
push dword[esi]
 
mov esi,point_index1 ; env coords
sub esp,12
mov edi,esp
mov ecx,3
@@:
mov eax,dword[esi]
lea eax,[eax*3]
shl eax,2
add eax,[points_normals_rot_ptr]
; texture x=(rotated point normal -> x * 255)+255
movlps xmm0,[eax]
mulps xmm0,[correct_texf]
addps xmm0,[correct_texf]
cvtps2dq xmm0,xmm0
packssdw xmm0,xmm0
movd [edi],xmm0
; fld dword[eax]
; fmul dword[correct_texf]
; fadd dword[correct_texf]
; fistp word[edi]
 
; texture y=(rotated point normal -> y * 255)+255
; fld dword[eax+4]
; fmul dword[correct_texf]
; fadd dword[correct_texf]
; fistp word[edi+2]
and word[edi+2],0x7fff ; some objects need it
add edi,4
add esi,4
loop @b
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
mov esi,texmap
mov edx,envmap
 
call two_tex_triangle_z
jmp .end_draw
 
.bump_tex:
mov esi,[point_index3] ; tex map coords
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index2]
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index1]
shl esi,2
add esi,tex_points
push dword[esi]
 
push dword texmap
 
push [Zbuffer_ptr]
xor edi,edi
 
push word[zz3]
push word[zz2]
push word[zz1]
 
mov esi,point_index1 ; env coords
sub esp,12
mov edi,esp
mov ecx,3
@@:
mov eax,dword[esi]
lea eax,[eax*3]
shl eax,2
add eax,[points_normals_rot_ptr]
if Ext >= SSE
; texture x=(rotated point normal -> x * 255)+255
movlps xmm0,[eax]
mulps xmm0,[correct_texf]
addps xmm0,[correct_texf]
cvtps2dq xmm0,xmm0
packssdw xmm0,xmm0
movd [edi],xmm0
else
fld dword[eax]
fimul [correct_tex]
fiadd [correct_tex]
fistp word[edi]
; texture y=(rotated point normal -> y * 255)+255
fld dword[eax+4]
fimul [correct_tex]
fiadd [correct_tex]
fistp word[edi+2]
end if
add edi,4
add esi,4
loop @b
 
; push dword 1 shl 16 + 1 ; emap coords
; push dword 127 shl 16 + 1
; push dword 127 shl 16 + 127
 
mov esi,[point_index3] ; bump map coords
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index2]
shl esi,2
add esi,tex_points
push dword[esi]
 
mov esi,[point_index1]
shl esi,2
add esi,tex_points
push dword[esi]
 
; push dword 1 shl 16 + 127
; push dword 127 shl 16 + 127
; push dword 1 shl 16 + 1 ; bump coords
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
mov esi,envmap
mov edx,bumpmap
 
call bump_tex_triangle_z
 
jmp .end_draw
 
.draw_smooth_line:
mov esi,point_index3
mov ecx,3
.again_line_param:
mov eax,dword[esi]
shl eax,2
lea eax,[eax*3]
add eax,[points_normals_rot_ptr]
if Ext>=SSE2
movlps xmm0,[eax]
mulps xmm0,[correct_texf]
addps xmm0,[correct_texf]
cvtps2dq xmm0,xmm0
movd eax,xmm0
psrldq xmm0,4
movd ebx,xmm0
else if
; texture ;x=(rotated point normal -> x * 255)+255
fld dword[eax] ; x cooficient of normal vector
fmul dword[correct_texf]
fadd dword[correct_texf]
fistp [temp1] ;word[esp-2]
; texture y=(rotated point normal -> y * 255)+255
fld dword[eax+4] ; y cooficient
fmul dword[correct_texf]
fadd dword[correct_texf]
fistp [temp2] ;word[esp-4]
mov eax,[temp2] ;word[esp-4]
mov ebx,[temp1] ;word[esp-2]
end if
and ebx,0xfffffff
shl eax,TEX_SHIFT
add eax,ebx
lea eax,[eax*3+color_map]
mov eax,dword[eax]
lea ebx,[ecx-1]
shl ebx,2
mov [ebx+col1],eax
 
sub esi,4
dec ecx
jnz .again_line_param
 
mov edi,[screen_ptr]
mov esi,[Zbuffer_ptr]
 
mov eax,[col1]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz1]
push [yy1]
push [xx1]
 
mov eax,[col2]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz2]
push [yy2]
push [xx2]
 
call smooth_line
@@:
 
mov edi,[screen_ptr]
mov esi,[Zbuffer_ptr]
 
mov eax,[col1]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz1]
push [yy1]
push [xx1]
 
mov eax,[col3]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz3]
push [yy3]
push [xx3]
 
call smooth_line
@@:
 
 
mov edi,[screen_ptr]
mov esi,[Zbuffer_ptr]
 
mov eax,[col3]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz3]
push [yy3]
push [xx3]
 
mov eax,[col2]
movzx bx,al
push bx ; b
movzx bx,ah
push bx
rol eax,16
xor ah,ah
push ax
push [zz2]
push [yy2]
push [xx2]
 
call smooth_line
jmp .end_draw
@@:
 
if Ext >= SSE3
.r_phg:
 
 
movd xmm5,[size_y_var]
punpcklwd xmm5,[the_zero]
pshufd xmm5,xmm5,01110011b
 
 
mov eax,[point_index1]
mov ebx,[point_index2]
mov ecx,[point_index3]
imul eax,[i12]
imul ebx,[i12]
imul ecx,[i12]
add eax,[points_normals_rot_ptr]
add ebx,[points_normals_rot_ptr]
add ecx,[points_normals_rot_ptr]
movups xmm0,[eax]
movups xmm1,[ebx]
movups xmm2,[ecx]
andps xmm0,[zero_hgst_dd]
andps xmm1,[zero_hgst_dd]
andps xmm2,[zero_hgst_dd]
xorps xmm3,xmm3
 
mov eax,[point_index1]
mov ebx,[point_index2]
mov ecx,[point_index3]
imul eax,[i12]
imul ebx,[i12]
imul ecx,[i12]
add eax,[points_rotated_ptr]
add ebx,[points_rotated_ptr]
add ecx,[points_rotated_ptr]
push dword[ecx+8]
push dword[ebx+8]
push dword[eax+8]
movups xmm4,[esp]
add esp,12
andps xmm4,[zero_hgst_dd]
 
 
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
mov esi,[Zbuffer_ptr]
 
call real_phong_tri_z
 
jmp .end_draw
 
.glass:
 
movd xmm5,[size_y_var]
punpcklwd xmm5,[the_zero]
pshufd xmm5,xmm5,01110011b
 
 
mov eax,[point_index1]
mov ebx,[point_index2]
mov ecx,[point_index3]
imul eax,[i12]
imul ebx,[i12]
imul ecx,[i12]
add eax,[points_normals_rot_ptr]
add ebx,[points_normals_rot_ptr]
add ecx,[points_normals_rot_ptr]
movups xmm0,[eax]
movups xmm1,[ebx]
movups xmm2,[ecx]
andps xmm0,[zero_hgst_dd]
andps xmm1,[zero_hgst_dd]
andps xmm2,[zero_hgst_dd]
xorps xmm3,xmm3
 
mov eax,[point_index1]
mov ebx,[point_index2]
mov ecx,[point_index3]
imul eax,[i12]
imul ebx,[i12]
imul ecx,[i12]
add eax,[points_rotated_ptr]
add ebx,[points_rotated_ptr]
add ecx,[points_rotated_ptr]
push dword[ecx+8]
push dword[ebx+8]
push dword[eax+8]
movups xmm4,[esp]
add esp,12
andps xmm4,[zero_hgst_dd]
 
 
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edi,[screen_ptr]
mov edx,[Zbuffer_ptr]
mov esi,[Zbuffer_ptr]
 
call glass_tri
jmp .end_draw
 
.glass_tex:
movd xmm5,[size_y_var]
punpcklwd xmm5,[the_zero]
pshufd xmm5,xmm5,01110011b
 
mov eax,[point_index1]
mov ebx,[point_index2]
mov ecx,[point_index3]
imul eax,[i12]
imul ebx,[i12]
imul ecx,[i12]
add eax,[points_normals_rot_ptr]
add ebx,[points_normals_rot_ptr]
add ecx,[points_normals_rot_ptr]
movups xmm0,[eax]
movups xmm1,[ebx]
movups xmm2,[ecx]
andps xmm0,[zero_hgst_dd]
andps xmm1,[zero_hgst_dd]
andps xmm2,[zero_hgst_dd]
xorps xmm3,xmm3
 
mov eax,[point_index1]
mov ebx,[point_index2]
mov ecx,[point_index3]
imul eax,[i12]
imul ebx,[i12]
imul ecx,[i12]
add eax,[points_rotated_ptr]
add ebx,[points_rotated_ptr]
add ecx,[points_rotated_ptr]
push dword[ecx+8]
push dword[ebx+8]
push dword[eax+8]
movups xmm4,[esp]
add esp,12
andps xmm4,[zero_hgst_dd]
 
mov esi,[point_index3] ; tex map coords
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index2]
shl esi,2
add esi,tex_points
push dword[esi]
mov esi,[point_index1]
shl esi,2
add esi,tex_points
push dword[esi]
movups xmm6,[esp]
add esp,12
; pshuflw xmm6,xmm6,10110001b
; pshufhw xmm6,xmm6,10110001b
 
movzx eax,word[size_x_var]
andps xmm6,[zero_hgst_dd]
movd xmm7,eax
pslldq xmm7,12
por xmm6,xmm7
 
 
mov eax,dword[xx1]
ror eax,16
mov ebx,dword[xx2]
ror ebx,16
mov ecx,dword[xx3]
ror ecx,16
mov edx,texmap
mov edi,[screen_ptr]
mov esi,[Zbuffer_ptr]
 
call glass_tex_tri
 
jmp .end_draw
end if
 
 
 
 
.end_draw:
pop esi
add esi,12
 
pop ecx
sub ecx,1
 
jnz .again_dts
ret
 
 
 
 
 
 
 
 
 
 
 
draw_handlers:
 
push ebp
mov ebp,esp
 
.counter equ ebp-16
.xres3m18 equ ebp-8
.xres2m12 equ ebp-12
 
 
; init counter
sub esp,12
push dword 0
 
movzx eax,word[size_x_var]
cmp [dr_flag],12
jge @f
lea ebx,[eax*3]
sub ebx,18
add eax,eax
sub eax,12
mov [.xres3m18],ebx
mov [.xres2m12],eax
jmp .f
@@:
lea ebx,[eax*4]
sub ebx,4*6
add eax,eax
sub eax,3*4
mov [.xres3m18],ebx
mov [.xres2m12],eax
.f:
 
 
 
mov esi,[points_translated_ptr]
.loop:
push esi
; DO culling AT FIRST
cmp [culling_flag],1 ; (if culling_flag = 1)
jne .no_culling
mov edi,[.counter] ; *********************************
lea edi,[edi*3]
shl edi,2
add edi,[points_normals_rot_ptr]
mov eax,[edi+8] ; check sign of z coof
shr eax,31
cmp eax,1
jnz .skip
.no_culling:
mov eax,[esi]
movzx ebx,ax ; ebx - x
shr eax,16 ; eax - y
cmp eax,4 ; check if markers not exceedes screen
jle .skip
cmp ebx,4
jle .skip
movzx edx,word[size_x_var]
sub edx,4
movzx ecx,word[size_y_var]
sub ecx,4
cmp ebx,edx
jge .skip
cmp eax,ecx
jge .skip
 
movzx edx,word[size_x_var]
; sub ebx,3
; sub eax,3
imul eax,edx
add eax,ebx
push eax
lea edi,[eax*3]
cmp [dr_flag],12
jl @f
add edi,[esp]
@@:
add esp,4
lea eax,[eax*2]
; draw bar 6x6
add edi,[screen_ptr]
add eax,dword[vertices_index_ptr]
 
 
 
 
mov edx,[.counter]
mov ecx,6
 
.oop:
push ecx
mov ecx,6
 
.do:
mov word[edi],0x0000 ;ax
mov byte[edi+2],0xff ;al
mov word[eax],dx
add eax,2
cmp [dr_flag],12
jl @f
add edi,4
loop .do
jmp .ad
@@:
add edi,3
loop .do
.ad:
add edi,[.xres3m18]
add eax,[.xres2m12]
pop ecx
loop .oop
 
.skip:
pop esi
add esi,6
inc dword[.counter]
mov ecx,[.counter]
cmp ecx,[points_count_var]
jng .loop
 
mov esp,ebp
pop ebp
 
ret
 
 
fill_Z_buffer:
mov eax,0x70000000
cmp [dr_flag],12
jne @f
mov eax,60000.1
@@:
mov edi,[Zbuffer_ptr]
movzx ecx,word[size_x_var]
movzx ebx,word[size_y_var]
imul ecx,ebx
if Ext>=SSE2
movd xmm0,eax
shufps xmm0,xmm0,0
push ecx
mov ecx,edi
and edi,0xffffff00
and ecx,0x000000ff
mov edx,ecx
rep stosd
pop ecx
sub ecx,edx
@@:
movaps [edi],xmm0
movaps [edi+16],xmm0
movaps [edi+32],xmm0
movaps [edi+48],xmm0
add edi,64
sub ecx,16
jnc @b
else
rep stosd
end if
ret
 
read_tp_variables: ; read [triangles_count_var] and [points_count_var]
; and allocate memory
xor ebx,ebx
xor ebp,ebp
mov [points_count_var],ebx
mov [triangles_count_var],ebx
if USE_LFN = 0
mov esi,SourceFile
else
mov esi,[fptr]
end if
 
cmp [esi],word 4D4Dh
je @f ;Must be legal .3DS file
xor eax,eax
ret
@@:
mov eax,dword[esi+2]
cmp eax,[fsize] ;This must tell the length
je @f
xor eax,eax
ret
@@:
add eax,esi
mov [EndFile],eax ;
 
add esi,6
@@:
cmp [esi],word 3D3Dh
je @f
add esi,[esi+2]
jmp @b
@@:
add esi,6
.find4k:
cmp [esi],word 4000h
je @f
add esi,[esi+2]
cmp esi,[EndFile]
jc .find4k
jmp .exit
@@:
add esi,6
@@:
cmp [esi],byte 0
je @f
inc esi
jmp @b
@@:
inc esi
@@:
cmp [esi],word 4100h
je @f
add esi,[esi+2]
jmp @b
@@:
add esi,6
@@:
cmp [esi],word 4110h
je @f
add esi,[esi+2]
jmp @b
@@:
movzx ecx,word[esi+6]
add [points_count_var],ecx
 
mov edx,ecx
add esi,8
@@:
 
add ebx,6
add esi,12
; dec ecx
loop @b
@@:
 
@@:
cmp [esi],word 4120h
je @f
add esi,[esi+2]
jmp @b
@@:
movzx ecx,word[esi+6]
add [triangles_count_var],ecx
add esi,8
 
@@:
add esi,8
dec ecx
jnz @b
; xor ecx,ecx
add ebp,edx
jmp .find4k
mov eax,-1 ;<---mark if OK
.exit:
ret
 
read_from_file:
fninit
mov edi,[triangles_ptr]
xor ebx,ebx
xor ebp,ebp
mov [points_count_var],0
mov [triangles_count_var],0
if USE_LFN = 0
mov esi,SourceFile
else
mov esi,[fptr]
end if
cmp [esi],word 4D4Dh
jne .exit ;Must be legal .3DS file
; cmp dword[esi+2],EndFile-SourceFile
; jne .exit ;This must tell the length
mov eax,dword[esi+2]
; cmp eax,[fsize]
; jne .exit
 
add eax,esi
mov [EndFile],eax ;
 
add esi,6
@@:
cmp [esi],word 3D3Dh
je @f
add esi,[esi+2]
jmp @b
@@:
add esi,6
.find4k:
cmp [esi],word 4000h
je @f
add esi,[esi+2]
cmp esi,[EndFile]
jc .find4k
jmp .exit
@@:
add esi,6
@@:
cmp [esi],byte 0
je @f
inc esi
jmp @b
@@:
inc esi
@@:
cmp [esi],word 4100h
je @f
add esi,[esi+2]
jmp @b
@@:
add esi,6
@@:
cmp [esi],word 4110h
je @f
add esi,[esi+2]
jmp @b
@@:
movzx ecx,word[esi+6]
add [points_count_var],ecx
 
mov edx,ecx
add esi,8
@@:
push edi
mov edi,[points_ptr]
push dword[esi+0]
pop dword[edi+ebx*2+0]
push dword[esi+4]
pop dword[edi+ebx*2+4]
push dword[esi+8]
pop dword[edi+ebx*2+8]
pop edi
 
add ebx,6
add esi,12
dec ecx
jnz @b
@@:
; mov dword[points+ebx],-1
push edi
mov edi,[points_ptr]
mov dword[edi+ebx*2],-1 ; end mark (not always in use)
pop edi
@@:
cmp [esi],word 4120h
je @f
add esi,[esi+2]
jmp @b
@@:
movzx ecx,word[esi+6]
add [triangles_count_var],ecx
add esi,8
;mov edi,triangles
@@:
movzx eax,word[esi]
add eax,ebp
stosd
movzx eax,word[esi+2]
add eax,ebp
stosd
movzx eax,word[esi+4]
add eax,ebp
stosd
; add dword[edi-12],ebp
; add dword[edi-8],ebp
; add dword[edi-4],ebp
add esi,8
dec ecx
jnz @b
add ebp,edx
jmp .find4k
mov eax,-1 ;<---mark if OK
.exit:
mov dword[edi],-1
ret
 
alloc_mem_for_tp:
mov eax, 68
cmp [re_alloc_flag],1
jz @f
mov ebx, 12
jmp .alloc
@@:
mov ebx,20
.alloc:
 
mov ecx,[triangles_count_var]
add ecx,20
lea ecx, [ecx*3]
shl ecx,2
mov edx,[triangles_ptr]
int 0x40 ; -> allocate memory to triangles
mov [triangles_ptr], eax ; -> eax = pointer to allocated mem
 
; ststic memory
 
mov eax, 68
mov ecx, [triangles_count_var]
lea ecx, [3+ecx*3]
shl ecx, 2
mov edx,[triangles_normals_ptr]
int 0x40 ; -> allocate memory for triangles normals
mov [triangles_normals_ptr], eax ; -> eax = pointer to allocated mem
 
 
mov eax, 68
mov ecx, [points_count_var]
lea ecx,[3+ecx*3]
shl ecx, 2
mov edx,[points_normals_ptr]
int 0x40
mov [points_normals_ptr], eax
 
 
mov eax, 68
; mov ebx, 12
mov ecx, [points_count_var]
lea ecx,[3+ecx*3]
shl ecx, 2
mov edx,[points_normals_rot_ptr]
int 0x40
mov [points_normals_rot_ptr], eax
 
mov eax, 68
mov edx,[points_ptr]
int 0x40
mov [points_ptr], eax
 
mov eax, 68
mov edx,[points_rotated_ptr]
int 0x40
mov [points_rotated_ptr], eax
 
mov eax, 68
mov ecx, [points_count_var]
inc ecx
shl ecx, 3
mov edx,[points_translated_ptr]
int 0x40
mov [points_translated_ptr], eax
ret
 
 
 
read_from_disk:
mov eax, 68
mov ebx, 11
int 0x40 ; -> create heap
 
;load kpacked files by Leency
mov eax,68
mov ebx,27
mov ecx,file_name
int 0x40
 
mov [fsize],edx
mov [file_info+16],eax
 
test eax,eax
jnz .open_opened_well
mov eax,6 ;otherwise => failed
jmp @f
.open_opened_well:
xor eax,eax
@@:
; eax = 0 -> ok file loaded
ret
 
read_param:
mov esi,I_Param
cmp dword[esi],0
je .end
cmp byte[esi],'/'
je .copy
mov edi,esi
mov ecx,25 ; 25 - would be enought
repe scasb
jne .end
dec edi
mov esi,edi
.copy:
mov edi,file_name
mov ecx,50
rep movsd
.end:
ret
buttons: ; draw some buttons (all but navigation and close )
mov edi,menu
.again:
mov eax,8 ; function 8 : define and draw button
mov bx,[size_x_var]
shl ebx,16
add ebx,(10)*65536+62 ; [x start] *65536 + [x size]
movzx ecx,byte[edi] ; button id = position+2
sub cl,2
lea ecx,[ecx*5]
lea ecx,[ecx*3]
add ecx,25
shl ecx,16
add ecx,12
movzx edx,byte[edi] ; button id
mov esi,0x6688dd ; button color RRGGBB
int 0x40
; BUTTON LABEL
mov eax,4 ; function 4 : write text to window
movzx ebx,byte[edi]
sub bl,2 ; button id, according to position
lea ebx,[ebx*3]
lea ebx,[ebx*5]
mov cx,[size_x_var]
shl ecx,16
add ebx,ecx
add ebx,(12)*65536+28 ; [x start] *65536 + [y start]
mov ecx,0x00ddeeff ; font 1 & color ( 0xF0RRGGBB )
lea edx,[edi+1] ; pointer to text beginning
mov esi,10 ; text length
int 0x40
cmp byte[edi+11],255 ; if max_flag=255
je @f ; skip
; flag description
; mov eax,4 ; function 4 : write text to window
; movzx ebx,byte[edi]
; sub bl,2
; lea ebx,[ebx*3]
; lea ebx,[ebx*5]
; add ebx,(SIZE_X+12+70)*65536+28 ; [x start] *65536 + [y start]
add ebx,70*65536
; mov ecx,0x00ddeeff ; font 1 & color ( 0xF0RRGGBB )
movzx edx,byte[edi+12] ; current flag
shl edx,2 ; * 4 = text length
add edx,dword[edi+13] ; pointer to text beginning
mov esi,4 ; text length
int 0x40
 
@@:
add edi,17
cmp byte[edi],-1
jnz .again
ret
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
int 0x40
 
; DRAW WINDOW
mov eax,0 ; function 0 : define and draw window
mov bx,[x_start]
shl ebx,16
mov cx,[y_start]
shl ecx,16
;ebx - [x start] *65536 + [x size]
;ecx - [y start] *65536 + [y size]
mov bx,[size_x_var]
add bx,115
mov cx,[size_y_var]
add cx,30
; @@:
mov edx,0x13000000 ; color of work area RRGGBB,8->color gl
mov edi,labelt ; WINDOW LABEL
int 0x40
 
call buttons ; more buttons
 
.Y_ADD equ 2 ;-> offset of 'add vector' buttons
 
; ADD VECTOR LABEL ; add vector buttons - 30 ++
mov eax,4 ; function 4 : write text to window
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(12)*65536+(168+15*(13+.Y_ADD)) ; [x start] *65536 + [y start]
mov ecx,0x00ddeeff ; font 1 & color ( 0xF0RRGGBB )
mov edx,labelvector ; pointer to text beginning
mov esi,labelvectorend-labelvector ; text length
; cmp [move_flag],2
; jne @f
; add edx,navigation_size
; @@:
int 0x40
; VECTOR Y- BUTTON
mov eax,8 ; function 8 : define and draw button
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,30*65536+20 ; [x start] *65536 + [x size]
mov ecx,(165+15*(14+.Y_ADD))*65536+12 ; [y start] *65536 + [y size]
mov edx,30 ; button id
mov esi,0x6688dd ; button color RRGGBB
int 0x40
;VECTOR Y- LABEL
mov eax,4 ; function 4 : write text to window
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(32)*65536+(168+15*(14+.Y_ADD)) ; [x start] *65536 + [y start]
mov ecx,0x00ddeeff ; font 1 & color ( 0xF0RRGGBB )
mov edx,labelyminus ; pointer to text beginning
mov esi,labelyminusend-labelyminus ; text length
cmp [move_flag],2
; jne @f
; add edx,navigation_size
; @@:
int 0x40
; VECTOR Z+ BUTTON
mov eax,8 ; function 8 : define and draw button
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(51)*65536+21 ; [x start] *65536 + [x size]
mov ecx,(165+15*(14+.Y_ADD))*65536+12 ; [y start] *65536 + [y size]
mov edx,31 ; button id
mov esi,0x6688dd ; button color RRGGBB
int 0x40
;VECTOR Z+ LABEL
mov eax,4 ; function 4 : write text to window
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(53)*65536+(168+15*(14+.Y_ADD)) ; [x start] *65536 + [y start]
mov ecx,0x00ddeeff ; font 1 & color ( 0xF0RRGGBB )
mov edx,labelzplus ; pointer to text beginning
mov esi,labelzplusend-labelzplus ; text length
; cmp [move_flag],2
; jne @f
; add edx,navigation_size
; @@:
 
int 0x40
; VECTOR x- BUTTON
mov eax,8 ; function 8 : define and draw button
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(10)*65536+21 ; [x start] *65536 + [x size]
mov ecx,(165+15*(15+.Y_ADD))*65536+12 ; [y start] *65536 + [y size]
mov edx,32 ; button id
mov esi,0x6688dd ; button color RRGGBB
int 0x40
;VECTOR x- LABEL
mov eax,4 ; function 4 : write text to window
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(12)*65536+(168+15*(15+.Y_ADD)) ; [x start] *65536 + [y start]
mov ecx,0x00ddeeff ; font 1 & color ( 0xF0RRGGBB )
mov edx,labelxminus ; pointer to text beginning
mov esi,labelxminusend-labelxminus ; text length
; cmp [move_flag],2
; jne @f
; add edx,navigation_size
; @@:
int 0x40
; VECTOR x+ BUTTON
mov eax,8 ; function 8 : define and draw button
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(51)*65536+21 ; [x start] *65536 + [x size]
mov ecx,(165+15*(15+.Y_ADD))*65536+12 ; [y start] *65536 + [y size]
mov edx,33 ; button id
mov esi,0x6688dd ; button color RRGGBB
int 0x40
;VECTOR x+ LABEL
mov eax,4 ; function 4 : write text to window
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(53)*65536+(168+15*(15+.Y_ADD)) ; [x start] *65536 + [y start]
mov ecx,0x00ddeeff ; font 1 & color ( 0xF0RRGGBB )
mov edx,labelxplus ; pointer to text beginning
mov esi,labelxplusend-labelxplus ; text length
; cmp [move_flag],2
; jne @f
; add edx,navigation_size
; @@:
int 0x40
; VECTOR z- BUTTON
mov eax,8 ; function 8 : define and draw button
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(10)*65536+62-41 ; [x start] *65536 + [x size]
mov ecx,(25+140+15*(16+.Y_ADD))*65536+12 ; [y start] *65536 + [y size]
mov edx,34 ; button id
mov esi,0x6688dd ; button color RRGGBB
int 0x40
;VECTOR z- LABEL
mov eax,4 ; function 4 : write text to window
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(12)*65536+(168+15*(16+.Y_ADD)) ; [x start] *65536 + [y start]
mov ecx,0x00ddeeff ; font 1 & color ( 0xF0RRGGBB )
mov edx,labelzminus ; pointer to text beginning
mov esi,labelzminusend-labelzminus ; text length
; cmp [move_flag],2
; jne @f
; add edx,navigation_size
; @@:
int 0x40
;VECTOR Y+ BUTTON
mov eax,8 ; function 8 : define and draw button
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(10+20)*65536+20 ; [x start] *65536 + [x size]
mov ecx,(165+15*(16+.Y_ADD))*65536+12 ; [y start] *65536 + [y size]
mov edx,35 ; button id
mov esi,0x6688dd ; button color RRGGBB
int 0x40
;VECTOR Y+ LABEL
mov eax,4 ; function 4 : write text to window
movzx ebx,word[size_x_var]
shl ebx,16
add ebx,(32)*65536+(168+15*(16+.Y_ADD)) ; [x start] *65536 + [y start]
mov ecx,0x00ddeeff ; font 1 & color ( 0xF0RRGGBB )
mov edx,labelyplus ; pointer to text beginning
mov esi,labelyplusend-labelyplus ; text length
; cmp [move_flag],2
; jne @f
; add edx,navigation_size
; @@:
int 0x40
 
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
int 0x40
ret
 
 
; DATA AREA ************************************
 
include 'data.inc'
align 16
MEM_END:
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/programs/develop/libraries/TinyGL/asm_fork/examples/test_array1.asm
171,7 → 171,7
 
align 4
house_3ds: ;внедряем файл внутрь программы (в идеальном случае должен открыватся через окно диалога, но для облегчения примера вшит внутрь)
file '../../../../../demos/3DS/3ds_objects/House.3ds'
file '../../../../../demos/view3ds/3ds_objects/House.3ds'
align 4
Indices rb 0x1a6*6 ;0x1a6 - число граней, на каждую грань по 3 точки, индекс точки 2 байта