otherwise, to make it clean, you have to use entities for each link (“entitydirection” to orient them)
Code: Select all
InitEngine3D():InitSprite():InitKeyboard():InitMouse()
Procedure copyimagetotexture(im,tx,freeimage.b=1)
Protected n=CreateTexture(tx,ImageWidth(im),ImageHeight(im)):If tx=-1:tx=n:EndIf
StartDrawing(TextureOutput(tx))
DrawingMode(#PB_2DDrawing_AllChannels)
DrawImage(ImageID(im),0,0)
StopDrawing()
If freeimage:FreeImage(im):EndIf
ProcedureReturn tx
EndProcedure
ExamineDesktops()
OpenWindow(0, 0,0, DesktopWidth(0)*0.8,DesktopHeight(0)*0.8, "CreateShader - [Esc] quit",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0)
Add3DArchive(#PB_Compiler_Home + "examples\3D\Data\Textures", #PB_3DArchive_FileSystem)
Add3DArchive(GetCurrentDirectory(), #PB_3DArchive_FileSystem )
Parse3DScripts()
CreateCamera(0, 0, 0, 100, 100):MoveCamera(0,0,2,-2):CameraLookAt(0,0,0,0)
CreateLight(0,$ffffff, -100, 100, 100)
AmbientColor($111111*8)
CameraBackColor(0,$444488)
CreateImage(0,512,256,32,-1)
StartVectorDrawing(ImageVectorOutput(0))
AddPathBox(0,50,512,156)
VectorSourceColor($ff888888):FillPath()
AddPathCircle(150,128,127)
VectorSourceColor($ffaaaaaa):FillPath()
AddPathCircle(512-150,128,127)
VectorSourceColor($ffaaaaaa):FillPath()
AddPathCircle(150,128,50)
AddPathCircle(512-150,128,50)
VectorSourceColor($ff000000):StrokePath(3)
StopVectorDrawing()
copyimagetotexture(0,0)
CreateMaterial(0,TextureID(0))
MaterialShininess(0,64,$ffffff)
MaterialFilteringMode(0,#PB_Material_Anisotropic)
SetMaterialAttribute(0,#PB_Material_AlphaReject,128)
MaterialCullingMode(0,#PB_Material_NoCulling)
ScrollMaterial(0,1,0,#PB_Material_Animated)
;{----------------------------------------------------------------- mesh chain
Structure f2:x.f:y.f:EndStructure
Global Dim lpi.f2(1000)
Global Dim lpe.f2(1000)
Global n
Define.f x0,y0,r0,x1,y1,r1,x2,y2,r2, la, ai,af,a,da,u,r
Procedure.f lenght(*p0.f2,*p1.f2)
Protected.f dx=*p1\x-*p0\x,dy=*p1\y-*p0\y
ProcedureReturn Sqr(dx*dx+dy*dy)
EndProcedure
Procedure arc(x.f,y.f,r.f,ep.f,ai.f,af.f)
Protected.f a,da=360/64
a=ai
While a=<af
a+da
Lpi(n)\x=x+Cos(Radian(a))*r :lpi(n)\y=y+Sin(Radian(a))*r
Lpe(n)\x=x+Cos(Radian(a))*(r+ep):lpe(n)\y=y+Sin(Radian(a))*(r+ep)
n+1
Wend
EndProcedure
Procedure ameshvertex(*v.meshvertex, x.f,y.f,z.f,u.f,v.f)
*v\x=x
*v\y=y
*v\z=z
*v\u=u
*v\v=v
EndProcedure
x0= 1:y0= 0 :r0=0.3; coordinates x,y , radius cylinder
x1=-1:y1= 0 :r1=0.3
x2= 0:y2=-0.5:r2=0.3
la=0.1 ;chain width
ep.f=0.1; chain height
da=30
arc(x0,y0,r0,ep,-90+da,90)
arc(x1,y1,r1,ep,90,270-da)
arc(x2,y2,r2,ep,270-da,270+da)
arc(x0,y0,r0,ep,-90+da,-90+da)
Dim v.MeshVertex(n-1,23)
For i=0 To n-1
If i:u+lenght(lpi(i-1),lpi(i)):EndIf
j=0
Macro lpx(r):lpi(i)\x*r+lpe(i)\x*(1-r):EndMacro
Macro lpy(r):lpi(i)\y*r+lpe(i)\y*(1-r):EndMacro
aMeshVertex(v(i,j),lpi(i)\x,lpi(i)\y,-la*0.5,u,0.0):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpi(i)\x,lpi(i)\y,-la*0.2,u,0.0):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpx(0.3),lpy(0.3),-la*0.5,u,0.5):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpx(0.3),lpy(0.3), la*0.5,u,0.5):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpi(i)\x,lpi(i)\y, la*0.2,u,0.0):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpi(i)\x,lpi(i)\y, la*0.5,u,0.0):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpe(i)\x,lpe(i)\y, la*0.5,u,1.0):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpe(i)\x,lpe(i)\y, la*0.2,u,1.0):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpx(0.7),lpy(0.7), la*0.5,u,0.5):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpx(0.7),lpy(0.7),-la*0.5,u,0.5):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpe(i)\x,lpe(i)\y,-la*0.2,u,1.0):v(i,j+1)=v(i,j):j+2
aMeshVertex(v(i,j),lpe(i)\x,lpe(i)\y,-la*0.5,u,1.0):v(i,j+1)=v(i,0)
;Debug j
Next
CreateDataMesh(0,v(),8)
ScaleMaterial(0,u/30,1) ; to match start and end of conveyor belt
;}
CreateEntity(0,MeshID(0),MaterialID(0))
Define.f MouseX,Mousey,depx,depz,dist,val,blend
Repeat
While WindowEvent():Wend
ExamineKeyboard()
ExamineMouse()
If KeyboardPushed(#PB_Key_Space)=0:RotateEntity(0,0.2,0.2,0.2, #PB_Relative):EndIf
RenderWorld()
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(3)