Ответ: Поверткесная сборка.
;Segmented cube
Function CreateSegCube(xsegs=1,ysegs=1,zsegs=1,parent=0)
Return CreateCube()
mesh=CreateMesh(parent)
For i=1 To 4
AddCubeFace(mesh, ysegs, zsegs*(i=1 Or i=4)+xsegs*(i=2 Or i=3)):RotateMesh mesh, 0, i*90, 0
Next
RotateMesh mesh, 0, 0, -90
For i=0 To 1
AddCubeFace(mesh, xsegs, zsegs):RotateMesh mesh, 0, 0, (i=0)*180
Next
RotateMesh mesh, 0, 180, 90:UpdateNormals mesh:Return mesh
End Function
Function AddCubeFace(mesh, xsegs, ysegs)
surf=CreateSurface( mesh ):xstp# = 2.0 / Float(xsegs):ystp# = 2.0 / Float(ysegs):y#=-1.0
For a=0 To ysegs
x#=-1.0:u#=Float(a)/Float(ysegs)
For b=0 To xsegs
v#=Float(b)/Float(xsegs):AddVertex(surf,1,-x,y,-u,-v)
x = x + xstp
Next
y = y + ystp
Next
For a=0 To ysegs-1
For b=0 To xsegs-1
v0=a*(xsegs+1)+b:v1=v0+1:v2=(a+1)*(xsegs+1)+b+1:v3 =v2-1
AddTriangle( surf,v0,v2,v1 ):AddTriangle( surf,v0,v3,v2 )
Next
Next
End Function
|