Like this ....
Graphics3D 800,600
Dim Geo ( 3 )
Global Camera=CreateCamera()
Global Light=CreateLight()
WireFrame True
Demo()
End
;======================================
;======================================
;======================================
Function Demo()
PositionEntity Camera,0,0,-5
RotateEntity Light, 30, -60,0
For l= 0 To 3
Geo( l ) = GEOcreate ( 0, l+1 )
r = 100+84*(l=1)+42*(l=3)
g = 100+84*(l=2)+42*(l=3)
b = 100+84*(l=0)
EntityColor Geo( l ), r, g, b
;EntityFX Geo( l ), 4
UpdateNormals Geo( l )
EntityShininess Geo( l ) , 1
PositionEntity Geo( l ), 2.0 * Cos( l * 90 +45 ) , 2.0 * Sin( l * 90 +45 ) , 0
If l = 3
For p = 0 To 50
Extrude ( Geo ( 3 ), Rnd( 0,1 ) )
Next
EndIf
Next
While Not KeyDown(1)
For l= 0 To 3
TurnEntity Geo( l ), .2 , -.125, .1
Next
RenderWorld()
Flip
Wend
End Function
;======================================
;======================================
;======================================
Function GEOcreate( Parent , Detail )
Mesh = CreateMesh( Parent )
S = CreateSurface( Mesh )
a#=2.0/(1.0+Sqr(5.0))
b#=1.0/Sqr((3.0+Sqr(5.0)) / (1.0+Sqr(5.0)))
v01=AddVertex(S, 0, a, b)
v02=AddVertex(S, 0, a, -b)
v03=AddVertex(S, 0, -a, b)
v04=AddVertex(S, 0, -a, -b)
v05=AddVertex(S, a, b, 0)
v06=AddVertex(S, a, -b, 0)
v07=AddVertex(S, -a, b, 0)
v08=AddVertex(S, -a, -b, 0)
v09=AddVertex(S, b, 0, a)
v10=AddVertex(S, b, 0, -a)
v11=AddVertex(S, -b, 0, a)
v12=AddVertex(S, -b, 0, -a)
GEOsub( S, v02,v05,v07,Detail )
GEOsub( S, v01,v07,v05,Detail )
GEOsub( S, v01,v03,v11,Detail )
GEOsub( S, v01,v09,v03,Detail )
GEOsub( S, v02,v04,v10,Detail )
GEOsub( S, v02,v12,v04,Detail )
GEOsub( S, v03,v06,v08,Detail )
GEOsub( S, v04,v08,v06,Detail )
GEOsub( S, v07,v11,v12,Detail )
GEOsub( S, v08,v12,v11,Detail )
GEOsub( S, v05,v10,v09,Detail )
GEOsub( S, v06,v09,v10,Detail )
GEOsub( S, v01,v11,v07,Detail )
GEOsub( S, v01,v05,v09,Detail )
GEOsub( S, v02,v07,v12,Detail )
GEOsub( S, v02,v10,v05,Detail )
GEOsub( S, v04,v12,v08,Detail )
GEOsub( S, v04,v06,v10,Detail )
GEOsub( S, v03,v08,v11,Detail )
GEOsub( S, v03,v09,v06,Detail )
Return mesh
End Function
;======================================
;======================================
;======================================
Function GEOsub( S, v1 , v2 , v3 , Detail )
If Detail > 0
nx#=(VertexX(S,v1)+VertexX(S,v2))/2
ny#=(VertexY(S,v1)+VertexY(S,v2))/2
nz#=(VertexZ(S,v1)+VertexZ(S,v2))/2
l#=Sqr(nx*nx+ny*ny+nz*nz)
n1=AddVertex(S,nx/l,ny/l,nz/l)
nx#=(VertexX(S,v2)+VertexX(S,v3))/2
ny#=(VertexY(S,v2)+VertexY(S,v3))/2
nz#=(VertexZ(S,v2)+VertexZ(S,v3))/2
l#=Sqr(nx*nx+ny*ny+nz*nz)
n2=AddVertex(S,nx/l,ny/l,nz/l)
nx#=(VertexX(S,v3)+VertexX(S,v1))/2
ny#=(VertexY(S,v3)+VertexY(S,v1))/2
nz#=(VertexZ(S,v3)+VertexZ(S,v1))/2
l#=Sqr(nx*nx+ny*ny+nz*nz)
n3=AddVertex(S,nx/l,ny/l,nz/l)
GEOsub( S, v1,n3,n1,Detail-1)
GEOsub( S, v2,n1,n2,Detail-1)
GEOsub( S, v3,n2,n3,Detail-1)
GEOsub( S, n3,n2,n1,Detail-1)
Else
AddTriangle(S,v1,v2,v3)
End If
End Function
;======================================
;======================================
;======================================
Function Extrude ( Mesh, Radius# )
pivot = CreatePivot( Mesh )
PositionEntity pivot,0,-1,0
RotateEntity pivot, Rand( -90, 90 ), Rand(-180,180),0
temp = CreatePivot()
S = GetSurface( Mesh, 1 )
CV = CountVertices ( S ) - 1
For V = 0 To CV
Vx# = VertexX( S, V )
Vy# = VertexY( S, V )
Vz# = VertexZ( S, V )
PositionEntity temp, Vx, Vy, Vz
Distance# = EntityDistance ( temp, pivot )
If Distance < Radius
E# = Cos( Distance / Radius * 90) * .005
Nx# = Vx - VertexNX ( S, V ) * E
Ny# = Vy - VertexNY ( S, V ) * E
Nz# = Vz - VertexNZ ( S, V ) * E
VertexCoords S, V, Nx, Ny, Nz
VertexColor S, V, 128,128,128
EndIf
Next
FreeEntity pivot
FreeEntity temp
End Function
|