Corrected icosahedron code
btw == how do folks to the code in the scrollable textarea ??
; Setup the screen dimensions Global ScreenWidth = 640 Global ScreenHeight = 480 Global ScreenDepth = 16 Global ScreenMode = 2 ; Create the screen. Graphics3D ScreenWidth,ScreenHeight,ScreenDepth,ScreenMode SetBuffer BackBuffer() ; Switch to Back Buffer for Double Buffered drawing. ; Setup the lighting... AmbientLight 100,100,100 ; CAMERA PIVOT Global camera_pivot= CreatePivot() EntityRadius camera_pivot,0.1 ; Setup the camera. Global camera = CreateCamera(camera_pivot) CameraRange camera,1,10 CameraViewport camera,0,0,ScreenWidth,ScreenHeight CameraProjMode camera,2 PositionEntity(camera_pivot, 0, 0, 0) PositionEntity(camera, 0, 0, -8) mesh = CreateMesh() top = CreateSurface(mesh) mdl = CreateSurface(mesh) bot = CreateSurface(mesh) brush = CreateBrush(255,255,255) PaintSurface(top, brush) PaintSurface(mdl, brush) PaintSurface(bot, brush) ;ScaleEntity(mesh, 0.3, 0.3, 0.3); a# = 0.5 b# = 1.0 / (1.0 + Sqr(5.0)) ;01 0 b -a b a 0 -b a 0 v1 = vertndx(mdl, 0,b,-a) v2 = vertndx(mdl, b,a,0) v3 = vertndx(mdl, -b,a,0) AddTriangle(mdl,v1,v2,v3) ;02 0 b a -b a 0 b a 0 v1 = vertndx(mdl, 0,b,a) v2 = vertndx(mdl, -b,a,0) v3 = vertndx(mdl, b,a,0) AddTriangle(mdl,v1,v2,v3) ;03 0 b a 0 -b a -a 0 b v1 = vertndx(mdl, 0,b,a) v2 = vertndx(mdl, 0,-b,a) v3 = vertndx(mdl, -a,0,b) AddTriangle(mdl,v1,v2,v3) ;04 0 b a a 0 b 0 -b a v1 = vertndx(mdl, 0,b,a) v2 = vertndx(mdl, a,0,b) v3 = vertndx(mdl, 0,-b,a) AddTriangle(mdl,v1,v2,v3) ;05 0 b -a 0 -b -a a 0 -b v1 = vertndx(mdl, 0,b,-a) v2 = vertndx(mdl, 0,-b,-a) v3 = vertndx(mdl, a,0,-b) AddTriangle(mdl,v1,v2,v3) ;06 0 b -a -a 0 -b 0 -b -a v1 = vertndx(mdl, 0,b,-a) v2 = vertndx(mdl, -a,0,-b) v3 = vertndx(mdl, 0,-b,-a) AddTriangle(mdl,v1,v2,v3) ;07 0 -b a b -a 0 -b -a 0 v1 = vertndx(mdl, 0,-b,a) v2 = vertndx(mdl, b,-a,0) v3 = vertndx(mdl, -b,-a,0) AddTriangle(mdl,v1,v2,v3) ;08 0 -b -a -b -a 0 b -a 0 v1 = vertndx(mdl, 0,-b,-a) v2 = vertndx(mdl, -b,-a,0) v3 = vertndx(mdl, b,-a,0) AddTriangle(mdl,v1,v2,v3) ;09 -b a 0 -a 0 b -a 0 -b v1 = vertndx(mdl, -b,a,0) v2 = vertndx(mdl, -a,0,b) v3 = vertndx(mdl, -a,0,-b) AddTriangle(mdl,v1,v2,v3) ;10 -b-a 0 -a 0 -b -a 0 b v1 = vertndx(mdl, -b,-a,0) v2 = vertndx(mdl, -a,0,-b) v3 = vertndx(mdl, -a,0,b) AddTriangle(mdl,v1,v2,v3) ;11 b a 0 a 0 -b a 0 b v1 = vertndx(mdl, b,a,0) v2 = vertndx(mdl, a,0,-b) v3 = vertndx(mdl, a,0,b) AddTriangle(mdl,v1,v2,v3) ;12 b -a 0 a 0 b a 0 -b v1 = vertndx(mdl, b,-a,0) v2 = vertndx(mdl, a,0,b) v3 = vertndx(mdl, a,0,-b) AddTriangle(mdl,v1,v2,v3) ;13 0 b a -a 0 b -b a 0 v1 = vertndx(mdl, 0,b,a) v2 = vertndx(mdl, -a,0,b) v3 = vertndx(mdl, -b,a,0) AddTriangle(mdl,v1,v2,v3) ;14 0 b a b a 0 a 0 b v1 = vertndx(mdl, 0,b,a) v2 = vertndx(mdl, b,a,0) v3 = vertndx(mdl, a,0,b) AddTriangle(mdl,v1,v2,v3) ;15 0 b -a -b a 0 -a 0 -b v1 = vertndx(mdl, 0,b,-a) v2 = vertndx(mdl, -b,a,0) v3 = vertndx(mdl, -a,0,-b) AddTriangle(mdl,v1,v2,v3) ;16 0 b -a a 0 -b b a 0 v1 = vertndx(mdl, 0,b,-a) v2 = vertndx(mdl, a,0,-b) v3 = vertndx(mdl, b,a,0) AddTriangle(mdl,v1,v2,v3) ;17 0 -b -a -a 0 -b -b -a 0 v1 = vertndx(mdl, 0,-b,-a) v2 = vertndx(mdl, -a,0,-b) v3 = vertndx(mdl, -b,-a,0) AddTriangle(mdl,v1,v2,v3) ;18 0 -b -a b -a 0 a 0 -b v1 = vertndx(mdl, 0,-b,-a) v2 = vertndx(mdl, b,-a,0) v3 = vertndx(mdl, a,0,-b) AddTriangle(mdl,v1,v2,v3) ;19 0 -b a -b -a 0 -a 0 b v1 = vertndx(mdl, 0,-b,a) v2 = vertndx(mdl, -b,-a,0) v3 = vertndx(mdl, -a,0,b) AddTriangle(mdl,v1,v2,v3) ;20 0 -b a a 0 b b -a 0 v1 = vertndx(mdl, 0,-b,a) v2 = vertndx(mdl, a,0,b) v3 = vertndx(mdl, b,-a,0) AddTriangle(mdl,v1,v2,v3) ;AddVertex(top, 0, 1, 0) ;For i=0 To 4 ; x# = Sin#(72*i) * Sin(60) ; y# = Cos#(60) ; z# = Cos#(72*i) * Sin(60) ; DebugLog "vert x="+x#+" y="+y#+" z="+z# ; AddVertex(top, x#, y#, z#) ;Next ;For i=1 To 4 ; AddTriangle(top, 0, i+1, i) ;Next ;AddTriangle(top, 0, 1, 5) ; ; ;AddVertex(bot, 0, -1, 0) ;For i=0 To 4 ; j # = i + 0.5 ; x# = Sin#(72*j#) * Sin(60) ; y# = -Cos#(60) ; z# = Cos#(72*j#) * Sin(60) ; DebugLog "vert x="+x#+" y="+y#+" z="+z# ; AddVertex(bot, x#, y#, z#) ;Next ;For i=1 To 4 ; AddTriangle(bot, i, i+1, 0) ;Next ;AddTriangle(bot, 5, 1, 0) ;For i=1 To 5 ; AddVertex(mdl, VertexX(top,i), VertexY(top,i), VertexZ(top,i)) ; AddVertex(mdl, VertexX(bot,i), VertexY(bot,i), VertexZ(bot,i)) ;Next ;For i=0 To 6 Step 2 ; AddTriangle(mdl, i, i+2, i+1) ; AddTriangle(mdl, i+1, i+2, i+3) ;Next ;AddTriangle(mdl, 8, 0, 9) ;AddTriangle(mdl, 9, 0, 1) UpdateNormals(mesh) WireFrame True Repeat If KeyDown(31) While Not KeyDown(31) Wend mesh = subdiv(mesh) EndIf If KeyDown(200) TurnEntity(camera_pivot, 1, 0, 0) If KeyDown(208) TurnEntity(camera_pivot, -1, 0, 0) If KeyDown(203) TurnEntity(camera_pivot, 0, +1, 0) If KeyDown(205) TurnEntity(camera_pivot, 0, -1, 0) RenderWorld Flip Until KeyDown(1) Global newmesh Global newsurf Type subdivvect Field x# Field y# Field z# End Type Function subdiv(mesh) newmesh = CreateMesh() For i=1 To CountSurfaces(mesh) subdivsurf(GetSurface(mesh,i)) Next FreeEntity mesh Return newmesh End Function Function subdivsurf(surf) newsurf = CreateSurface(newmesh) tris = CountTriangles(surf)-1 For i=0 To tris c1.subdivvect = spherize(GetCoords(surf,TriangleVertex(surf,i,0))) c2.subdivvect = spherize(GetCoords(surf,TriangleVertex(surf,i,1))) c3.subdivvect = spherize(GetCoords(surf,TriangleVertex(surf,i,2))) c4.subdivvect = spheresplit(c1,c2) c5.subdivvect = spheresplit(c2,c3) c6.subdivvect = spheresplit(c3,c1) Vects2Triangle(c1,c4,c6) Vects2Triangle(c4,c2,c5) Vects2Triangle(c5,c3,c6) Vects2Triangle(c4,c5,c6) Next End Function Function spheresplit.subdivvect(c1.subdivvect, c2.subdivvect) res.subdivvect = New subdivvect res\x# = (c1\x# + c2\x#)/2.0 res\y# = (c1\y# + c2\y#)/2.0 res\z# = (c1\z# + c2\z#)/2.0 res = spherize(res) Return res End Function Function spherize.subdivvect(c.subdivvect) res.subdivvect = New subdivvect d# = 1.0/Sqr(c\x#*c\x# + c\y#*c\y# + c\z#*c\z#) res\x# = c\x# * d# res\y# = c\y# * d# res\z# = c\z# * d# Return res End Function Function GetCoords.subdivvect(surf, vert) res.subdivvect = New subdivvect res\x# = VertexX#(surf,vert) res\y# = VertexY#(surf,vert) res\z# = VertexZ#(surf,vert) Return res End Function Function Vects2Triangle(c1.subdivvect,c2.subdivvect,c3.subdivvect) v1 = vertindex(newsurf, c1) v2 = vertindex(newsurf, c2) v3 = vertindex(newsurf, c3) AddTriangle(newsurf, v1, v2, v3) End Function Function vertindex(surf, c.subdivvect) verts = CountVertices(surf) - 1 For i=0 To verts If VertexX#(surf,i)=c\x# And VertexY#(surf,i)=c\y# And VertexZ#(surf,i)=c\z# Return i EndIf Next Return AddVertex(surf, c\x#, c\y#, c\z#) End Function Function vertndx(surf, x#,y#,z#) verts = CountVertices(surf) - 1 For i=0 To verts If VertexX#(surf,i)=x# And VertexY#(surf,i)=y# And VertexZ#(surf,i)=z# Return i EndIf Next Return AddVertex(surf, x#, y#, z#) End Function
btw == how do folks to the code in the scrollable textarea ??