Code: Select all
ExamineDesktops()
RX.u=DesktopWidth(0)*2/3:RY.u=DesktopHeight(0)*2/3
InitEngine3D()
InitMouse():InitSprite():InitKeyboard()
OpenWindow(0,0,0,RX,RY,"test",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,RX,RY,1,0,0,#PB_Screen_WaitSynchronization)
Add3DArchive(#PB_Compiler_Home+"examples/3D/Data/Textures",#PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"examples/3D/Data/Packs/skybox.zip",#PB_3DArchive_Zip)
Parse3DScripts()
Enumeration; Texturas
#CuerpoTextura
#RodamientoTextura
#BielaTextura
#SueloTextura
EndEnumeration
Enumeration; Materiales
#CuerpoMaterial
#RodamientoMaterial
#BielaMaterial
#SueloMaterial
EndEnumeration
Enumeration; Mallas
#PlataformaMalla
#RodamientoMalla
#PesoMalla
#BielaMalla
EndEnumeration
Enumeration; Entidades
#Plataforma
#Biela
#Pesoi
#Pesod
#Rodamientobielai
#Rodamientobielad
#Rodamientoi
#Rodamientod
EndEnumeration
Enumeration; Ligaduras
#Rodamientobielajuntai
#Rodamientobielajuntad
#Rodamientojuntai
#Rodamientojuntad
EndEnumeration
Global OX.f=0,OY.f=0,OZ.f=0
Global longejeaejedebiela.f=0.5,longejeamasa.f=0.5,distanciaentreejes.f=2,longbiela.f=Sqr(Pow(longejeaejedebiela+longejeamasa,2)+distanciaentreejes*distanciaentreejes),grosorbiela.f=0.08
Global longitudrotor.f=0.15,grosorrotor.f=0.08,grosorpeso.f=longitudrotor;0.4
Global cuerpomasa.f=1.0,cuerpoElasticidad.f=0.58,cuerpoRozamientoDinamico.f=0.91
Global separacionz.f=2*longitudrotor
;Texturas y Materiales:
LoadTexture(#CuerpoTextura,"Dirt.jpg")
LoadTexture(#RodamientoTextura,"White.jpg")
LoadTexture(#BielaTextura,"RustySteel.jpg")
CreateMaterial(#CuerpoMaterial,TextureID(#CuerpoTextura))
CreateMaterial(#RodamientoMaterial,TextureID(#RodamientoTextura))
CreateMaterial(#BielaMaterial,TextureID(#BielaTextura))
SetMaterialColor(#CuerpoMaterial,#PB_Material_DiffuseColor,$799ddeca)
SetMaterialColor(#RodamientoMaterial,#PB_Material_DiffuseColor,$9ddeca79)
;luzsuelocieloycamara()
CreateLight(0,$EEEEEE,4,4,2,#PB_Light_Point):SetLightColor(0,#PB_Light_DiffuseColor,$EEEEEE):MoveLight(0,4,4,2,#PB_Absolute)
LoadTexture(#SueloTextura,"Wood.jpg"):CreateMaterial(#SueloMaterial,TextureID(#SueloTextura))
SkyBox("stevecube.jpg")
CreateCamera(0,0,0,100,100)
;mallas()
CreateCylinder(#Rodamientomalla,grosorrotor.f/2,longitudrotor.f,10,1,1); junta de bisagra
TransformMesh(#Rodamientomalla,0,0,0,1,1,1,90,0,0,0):NormalizeMesh(#Rodamientomalla,0):UpdateMeshBoundingBox(#Rodamientomalla)
CreateCylinder(#Bielamalla,grosorbiela/2,longbiela,4,1,1)
CreateCylinder(#Pesomalla,grosorpeso/2,grosorpeso,8,1,1); cuerpo fisico
CreateCube(#PlataformaMalla,2)
;entidades()
CreateEntity(#Plataforma,MeshID(#PlataformaMalla),MaterialID(#SueloMaterial),OX,OY,OZ-separacionz):ScaleEntity(#Plataforma,2,1,0.1,#PB_Absolute)
CreateEntity(#Rodamientoi,MeshID(#Rodamientomalla),MaterialID(#RodamientoMaterial),OX-distanciaentreejes/2,OY,OZ)
CreateEntity(#Rodamientod,MeshID(#Rodamientomalla),MaterialID(#RodamientoMaterial),OX+distanciaentreejes/2,OY,OZ)
CreateEntity(#Rodamientobielai,MeshID(#Rodamientomalla),MaterialID(#RodamientoMaterial))
CreateEntity(#Rodamientobielad,MeshID(#Rodamientomalla),MaterialID(#RodamientoMaterial))
CreateEntity(#Pesoi,MeshID(#Pesomalla),MaterialID(#CuerpoMaterial),OX-distanciaentreejes/2,OY-longejeamasa.f,0)
CreateEntity(#Pesod,MeshID(#Pesomalla),MaterialID(#CuerpoMaterial),OX+distanciaentreejes/2,OY+longejeamasa.f,0)
CreateEntity(#Biela,MeshID(#Bielamalla),MaterialID(#BielaMaterial),OX,OY,OZ-separacionz/2)
AttachEntityObject(#Biela,"",EntityID(#Rodamientobielai)):MoveEntity(#Rodamientobielai,0,longbiela/2,0,#PB_Absolute)
AttachEntityObject(#Biela,"",EntityID(#Rodamientobielad)):MoveEntity(#Rodamientobielad,0,-longbiela/2,0,#PB_Absolute)
CreateEntityBody(#Pesoi,#PB_Entity_BoxBody,cuerpomasa,cuerpoElasticidad,cuerpoRozamientoDinamico)
CreateEntityBody(#Pesod,#PB_Entity_BoxBody,cuerpomasa,cuerpoElasticidad,cuerpoRozamientoDinamico)
CreateEntityBody(#Plataforma,#PB_Entity_StaticBody,0.1,cuerpoElasticidad,cuerpoRozamientoDinamico)
CreateEntityBody(#Biela,#PB_Entity_CylinderBody,0.1,cuerpoElasticidad,cuerpoRozamientoDinamico)
;ligaduras()
GenericJoint(#Rodamientojuntai,EntityID(#Plataforma),-distanciaentreejes/2,0,OZ+separacionz,EntityID(#Pesoi),0,longejeamasa.f,0)
SetJointAttribute(#Rodamientojuntai,#PB_Joint_NoLimit,1,5) ; <- rotación sobre eje z
;Ligadura entre masa derecha y eje derecho:
GenericJoint(#Rodamientojuntad,EntityID(#Plataforma),distanciaentreejes/2,0,OZ+separacionz,EntityID(#Pesod),0,-longejeamasa,0)
SetJointAttribute(#Rodamientojuntad,#PB_Joint_NoLimit,1,5) ; <- rotación sobre eje z
;Ligadura entre biela y su eje izquierdo:
GenericJoint(#Rodamientobielajuntai,EntityID(#Biela),0,longbiela/2,OZ+separacionz/2,EntityID(#Pesoi),0,longejeamasa+longejeaejedebiela,0)
SetJointAttribute(#Rodamientobielajuntai,#PB_Joint_NoLimit,1,5) ; <- rotación sobre eje z
;Ligadura entre biela y su eje derecho:
GenericJoint(#Rodamientobielajuntad,EntityID(#Biela),0,-longbiela/2,OZ+separacionz/2,EntityID(#Pesod),0,-longejeamasa-longejeaejedebiela,0)
SetJointAttribute(#Rodamientobielajuntad,#PB_Joint_NoLimit,1,5) ; <- rotación sobre eje z
RotateEntity(#Biela,0,0,90-Degree(Atan2(distanciaentreejes,longejeaejedebiela+longejeamasa)),#PB_Absolute)
MoveCamera(0,0,0,5,#PB_Absolute)
Repeat
ExamineMouse():ExamineKeyboard()
WaitWindowEvent()
If KeyboardReleased(#PB_Key_Right)
ApplyEntityImpulse(#Pesod,0.1,0,0,0,0,0,#PB_Local)
EndIf
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)