Global pivot,camera,mxs#,mys#,Light,testmesh
Graphics3D 480,360,0,2
SetBuffer BackBuffer()
Dither 0
pivot=CreatePivot()
PositionEntity pivot,0,0,-40
camera=CreateCamera(pivot)
CameraClsColor camera,0,75,151
light=CreateLight()
ScaleSprite CreateSprite(light),0.2,0.2
AmbientLight 15,15,15
timer1=MilliSecs()
r#=45
segments=380
lengthsegment=40
Dim opanki#(segments-1,2,lengthsegment)
MakeTube(r#,segments,lengthsegment,4)
timer2=MilliSecs()
While Not KeyHit(1)
timer3=MilliSecs()
PointEntity light,camera
PositionEntity light,25*Sin(MilliSecs()/30),25,25*Cos(MilliSecs()/30)
If KeyDown(57) Then
If zulu<>Int(MilliSecs()/1000) Then
zulu=Int(MilliSecs()/1000)
If z=0 Then z=1 Else z=0
WireFrame z
EndIf
yhuu
Else WireFrame 0
EndIf
UpdateWorld
RenderWorld
control(1,1.4)
Text 100,10,"polygons in view "+TrisRendered()
Text 100,20,"number of vertices in test mesh "+CountVertices(GetSurface (testmesh,1))
Text 100,30,"millisecs for creation mesh "+(timer2-timer1)
Text 100,40,"Frames per second is: "+1000/(MilliSecs()-timer3)
Text 100,50,"Do not press [spacebar]"
Flip 0
Wend
End
Function yhuu()
surf1=GetSurface(testmesh,1)
For i=0 To CountVertices(surf1)-1
VertexCoords (surf1,i,VertexX(surf1,i),VertexY(surf1,i)+Sin(Mil liSecs()+i/10),VertexZ(surf1,i))
Next
End Function
Function control(speed#,mousesensitivity#)
mxs#=mxs#+(MouseXSpeed()/5.0)
mys#=mys#+(MouseYSpeed()/5.0)
RotateEntity camera,mousesensitivity#*mys#,-mousesensitivity#*mxs#,0
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
If KeyDown(17) Or KeyDown(200) MoveEntity camera,0,0,speed#
If KeyDown(31) Or KeyDown(20

MoveEntity camera,0,0,-speed#
If KeyDown(30) Or KeyDown(203) MoveEntity camera,-speed#,0,0
If KeyDown(32) Or KeyDown(205) MoveEntity camera,speed#,0,0
PositionEntity pivot,EntityX#(camera,1),EntityY#(camera,1),Entity Z#(camera,1)
PositionEntity camera,0,0,0
End Function
Function MakeTube(r#,segments,lengthsegment,seglenth#)
If segments=<2 RuntimeError "Illegal number of vertices for each segment"
For d=0 To lengthsegment
For i=0 To segments-1
opanki(i,0,d)=R#*Cos(360*i/segments)
opanki(i,1,d)=R#*Sin(360*i/segments)
opanki(i,2,d)=-lengthsegment*seglenth/2+seglenth*d
Next
Next
;For d=0 To lengthsegment
;For i=0 To segments-1
;PositionEntity CreateCube(),cucaracha(i,0,d)-40,cucaracha(i,1,d),cucaracha(i,2,d)
;Next
;Next
testmesh=CreateMesh()
testsurf=CreateSurface(testmesh)
For d=0 To lengthsegment
For i=0 To segments-1
AddVertex(testsurf,opanki(i,0,d),opanki(i,1,d),opa nki(i,2,d))
Next
Next
For d=0 To lengthsegment-1
For i=0 To segments-2
AddTriangle(testsurf,d*segments+i,(d+1)*segments+i ,d*segments+i+1)
AddTriangle(testsurf,d*segments+i+1,(d+1)*segments +i,(d+1)*segments+i+1)
Next
Next
For d=0 To lengthsegment-1
AddTriangle(testsurf,d*segments+segments-1,(d+1)*segments,d*segments)
AddTriangle(testsurf,(d+2)*segments-1,(d+1)*segments,(d+1)*segments-1)
Next
UpdateNormals testmesh
flipped=CopyMesh(testmesh)
ScaleMesh flipped,-1.4,-1.4,-1.0
AddMesh flipped,testmesh
FreeEntity flipped
End Function