
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
Const BoxUpperSide%=0 *
Const BoxFrontSide%=1
Const BoxBackSide%=2
Const BoxLeftSide%=3
Const BoxRighrtSide%=4
box=CreateMesh()
surf=CreateSurface(box)
AddBoxToSurface(Surf%,0,0,0,5)
UpdateNormals(box)
;C-размер куба, Surf%-поверхность к которой добавляется Куб
;X#,Y#,Z# - координаты центра куба
Function AddBoxToSurface(Surf%,X#,Y#,Z#,C#=1)
AddBoxSideToSurface(Surf%,BoxUpperSide%,X#,Y#,Z#,C#)
AddBoxSideToSurface(Surf%,BoxFrontSide%,X#,Y#,Z#,C#)
AddBoxSideToSurface(Surf%,BoxBackSide%,X#,Y#,Z#,C#)
AddBoxSideToSurface(Surf%,BoxLeftSide%,X#,Y#,Z#,C#)
AddBoxSideToSurface(Surf%,BoxRighrtSide%,X#,Y#,Z#,C#)
; Нижнюю сторону куба я не добавлял :)
End Function
;Можно добавить только сторону
Function AddBoxSideToSurface(Surf%,BoxSide%,X#,Y#,Z#,C#)
Local X1#, Y1#, Z1#, X2#, Y2#, Z2#, X3#, Y3#, Z3#, X4#, Y4#, Z4#
Local V1%, V2%, V3%, V4%
Local T1%, T2%
C#=C#/2
Select BoxSide%
Case BoxUpperSide%
X1#=X#-C: X2#=X#+C: X3#=X#+C: X4#=X#-C
Y1#=Y#+C: Y2#=Y#+C: Y3#=Y#+C: Y4#=Y#+C
Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#+C: Z4#=Z#+C
Case BoxFrontSide%
X1#=X#-C: X2#=X#+C: X3#=X#+C: X4#=X#-C
Y1#=Y#-C: Y2#=Y#-C: Y3#=Y#+C: Y4#=Y#+C
Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#-C: Z4#=Z#-C
Case BoxBackSide%
X1#=X#-C: X2#=X#+C: X3#=X#+C: X4#=X#-C
Y1#=Y#+C: Y2#=Y#+C: Y3#=Y#-C: Y4#=Y#-C
Z1#=Z#+C: Z2#=Z#+C: Z3#=Z#+C: Z4#=Z#+C
Case BoxLeftSide%
X1#=X#-C: X2#=X#-C: X3#=X#-C: X4#=X#-C
Y1#=Y#-C: Y2#=Y#+C: Y3#=Y#+C: Y4#=Y#-C
Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#+C: Z4#=Z#+C
Case BoxRighrtSide%
X1#=X#+C: X2#=X#+C: X3#=X#+C: X4#=X#+C
Y1#=Y#+C: Y2#=Y#-C: Y3#=Y#-C: Y4#=Y#+C
Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#+C: Z4#=Z#+C
End Select
V1%=AddVertex(Surf%, X1#, Y1#, Z1#, 0, 0)
V2%=AddVertex(Surf%, X2#, Y2#, Z2#, 1, 0)
V3%=AddVertex(Surf%, X3#, Y3#, Z3#, 1, 1)
V4%=AddVertex(Surf%, X4#, Y4#, Z4#, 0, 1)
T1%=AddTriangle(Surf%, V1%,V3%,V2%)
T2%=AddTriangle(Surf%, V1%,V4%,V3%)
End Function
camera=CreateCamera()
MoveEntity camera,0,0,-10
Repeat
UpdateWorld
RenderWorld
Flip
Until KeyHit(1)