the problem is when we speed the motor too much it will collapse and damaged. may be there is a threshold inside the engine can be set before the motor damaged. or we can prevent the user from speeding the gears over some limit.

Code: Select all
;// Project Title: MP 3D Engine Beispielprogramme
;// Dateiname: MP_GearsTest.pb
;// Erstellt am: 30.8.2013
;// Update am :
;// Author: Michael Paulwitz
;//
;// Info:
;// Gear Test
;// Zahnrad Test
;//
;//
;////////////////////////////////////////////////////////////////
ExamineDesktops()
Global bitplanes.b=DesktopDepth(0),RX.w=DesktopWidth(0),RY.w=DesktopHeight(0),s_bg.i
MP_Graphics3D(RX,RY,0,1);MP_VSync(0)
;MP_Graphics3D (640,480,0,1)
SetWindowTitle(0, "MP3D Physik Gear Demo , press arrows carefully to start the engine")
camera = MP_CreateCamera() ; Kamera erstellen
MP_PositionCamera(camera, 0, 5, -5 )
MP_CameraLookAt(camera,0,0,0)
light= MP_CreateLight(0) ; Es werde Licht
Mesh = MP_CreateRectangle (2,0.03,0.5)
ang.f=10
num = (360/ang) / 2
For i=1 To num
Mesh2 = MP_CreateRectangle (2,0.03,0.5)
angle.f+ang
MP_RotateEntity(Mesh2 , 0 , 0, angle, 1) : MP_ChangeMeshCoord(Mesh2)
MP_AddMesh(Mesh2 , Mesh ) : MP_FreeEntity(Mesh2)
Next
Mesh2 = MP_CopyEntity(Mesh)
Mesh7 = MP_CreateRectangle (0.05,4,0.05) ; axes for the middle gear
MP_RotateEntity(Mesh7 , 90 , 0, 0, 1) : MP_ChangeMeshCoord(Mesh7)
MP_AddMesh(Mesh7 , Mesh2 ) :MP_FreeEntity(Mesh7)
teapot = MP_CreateTeapot()
MP_ResizeMesh(teapot,0.5,0.5,0.5)
MP_PositionEntity (teapot,0,0,-2)
MP_RotateEntity(teapot , -90 , 0, 0, 1) : MP_ChangeMeshCoord(teapot)
MP_AddMesh(teapot , Mesh2 ) :MP_FreeEntity(teapot)
MP_FreeEntity(Mesh)
Mesh = MP_CreateRectangle (0.5,0.03,0.5)
angle = 0: ang=45
num = (360/ang) / 2
For i=1 To num
Mesh3 = MP_CreateRectangle (0.5,0.03,0.5)
angle+ang
MP_RotateEntity(Mesh3 , 0 , 0, angle, 1) : MP_ChangeMeshCoord(Mesh3)
MP_AddMesh(Mesh3 , Mesh ) : MP_FreeEntity(Mesh3)
Next
Mesh3 = MP_CopyEntity(Mesh)
MP_FreeEntity(Mesh)
MP_PositionEntity (Mesh3,-1.2,0,0) ;left gear
MP_PositionEntity (Mesh2,0,0,0) ; middle gear
MP_RotateEntity(Mesh3, 90, 0, 0 )
MP_RotateEntity(Mesh2, 90, 0, 0 )
Mesh4 = MP_CopyEntity(Mesh3)
MP_ResizeMesh(Mesh4,0.5,0.5,0.2)
MP_PositionEntity (Mesh4,0,0,-1)
MP_RotateEntity(Mesh4 , -90 , 0, 0, 1)
MP_ChangeMeshCoord(Mesh4)
MP_AddMesh(Mesh4 , Mesh2 ) : MP_FreeEntity(Mesh4)
Mesh5 = MP_CopyEntity(Mesh2)
MP_PositionEntity (Mesh5,1.2,1.1,0) ; right gear
MP_EntitySetNormals (Mesh3)
MP_MaterialDiffuseColor (Mesh3,255,255,0,0)
MP_MaterialSpecularColor (Mesh3, 255, 255 ,0, 0,5)
MP_EntitySetNormals (Mesh2)
MP_MaterialDiffuseColor (Mesh2,255,255,128,50)
MP_MaterialSpecularColor (Mesh2, 255, 255 ,255, 155,5)
MP_EntitySetNormals (Mesh5)
MP_MaterialDiffuseColor (Mesh5,255,255,255,50)
MP_MaterialSpecularColor (Mesh5, 255, 255 ,255, 155,5)
; repositioning of all meshes
MP_PositionEntity (Mesh3,-1.7,-0.5,0) ; left gear
MP_PositionEntity (Mesh2,-0.5,-0.5,0) ; middle gear
MP_PositionEntity (Mesh5,0.7,0.6,0) ; right gear
MP_PhysicInit()
MP_EntityPhysicBody(Mesh3 , 5, 10)
MP_ConstraintCreateHinge (Mesh3,0,1,0)
MP_EntityPhysicBody(Mesh2, 5, 10)
MP_ConstraintCreateHinge (Mesh2,0,10,0)
MP_EntityPhysicBody(Mesh5 , 5, 10)
MP_ConstraintCreateHinge (Mesh5,0,10,0)
MP_AmbientSetLight (RGB(0,100,200))
While Not MP_KeyDown(#PB_Key_Escape) And Not WindowEvent() = #PB_Event_CloseWindow; Esc abfrage oder Windows Schliessen
If MP_KeyDown(#PB_Key_Up)
omega.f + 0.5
ElseIf MP_KeyDown(#PB_Key_Down)
omega.f - 0.5
EndIf
MP_EntitySetOmega(Mesh3, 0 , omega ,0)
MP_PhysicUpdate()
MP_RenderWorld() ; Erstelle die Welt
MP_Flip () ; Stelle Sie dar
Wend
MP_PhysicEnd()