Code archives/3D Graphics - Mesh/CreateSegCube([segs],[parent])
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Creates a Segmented cube with six surfaces. | |||||
; Six surfaced multi/segmented cube
; David Bird
; dave@birdie72.freeserve.co.uk
;
Graphics3D 640,480
SetBuffer BackBuffer()
cam=CreateCamera()
PositionEntity cam,0,0,-40
CameraRange cam,0.1,100
WireFrame True
cube=CreateSegCube(35)
ScaleMesh cube,30,20,20
texture=LoadTexture("test.jpg")
For a=1 To 6
If a And 3 Then
brush=CreateBrush(Rnd(255),Rnd(255),Rnd(255))
Else
brush=CreateBrush()
BrushTexture brush,texture
End If
PaintSurface GetSurface(cube,a),brush
FreeBrush brush
Next
light=CreateLight(3,cam)
While Not KeyDown(1)
If KeyHit(17) Then w=1-w
WireFrame w
TurnEntity light,0,1,0
TurnEntity cube,1,.1,1
UpdateWorld
RenderWorld
Flip
Wend
FreeEntity cube
FreeEntity cam
EndGraphics
End
;
; Create a segmented cube
; six surfaces
;
Function CreateSegCube(segs=1,parent=0)
mesh=CreateMesh( parent )
For scnt=0 To 3
surf=CreateSurface( mesh )
stx#=-.5
sty#=stx
stp#=Float(1)/Float(segs)
y#=sty
For a=0 To segs
x#=stx
v#=a/Float(segs)
For b=0 To segs
u#=b/Float(segs)
AddVertex(surf,x,y,0.5,u,v)
x=x+stp
Next
y=y+stp
Next
For a=0 To segs-1
For b=0 To segs-1
v0=a*(segs+1)+b:v1=v0+1
v2=(a+1)*(segs+1)+b+1:v3=v2-1
AddTriangle( surf,v0,v1,v2 )
AddTriangle( surf,v0,v2,v3 )
Next
Next
RotateMesh mesh,0,90,0
Next
;top and bottom
RotateMesh mesh,90,0,0
For scnt=0 To 1
surf=CreateSurface( mesh )
stx#=-.5
sty#=stx
stp#=Float(1)/Float(segs)
y#=sty
For a=0 To segs
x#=stx
v#=a/Float(segs)
For b=0 To segs
u#=b/Float(segs)
AddVertex(surf,x,y,0.5,u,v)
x=x+stp
Next
y=y+stp
Next
For a=0 To segs-1
For b=0 To segs-1
v0=a*(segs+1)+b:v1=v0+1
v2=(a+1)*(segs+1)+b+1:v3=v2-1
AddTriangle( surf,v0,v1,v2 )
AddTriangle( surf,v0,v2,v3 )
Next
Next
RotateMesh mesh,180,0,0
Next
UpdateNormals mesh
Return mesh
End Function |
Comments
None.
Code Archives Forum