en plus tout a l'heure je deplacais bien mes objets par raport au pivots, mais je continuais obstinement a rotationner les objets , pas les pivots
cependant j'aimerai bien que tu l'essaie , car chez moi le lancement mets bien 5 a 6 secondes !!
; Init different modules
; Fichiers Include
; voir le dreamotion3d.pbi pour le details des commandes reconnu
IncludePath "D:\PureBasic\dobro\Exemple Perso\3Dreammotion\Samples\include\" ; mettre le bon chemin
IncludeFile "dreamotion3d.pbi"
ShowCursor_ (0)
Global timer
Declare.f RotationX(x, angle.f, dist)
Declare.f RotationY(Y, angle.f, dist)
If InitSprite () = 0 Or InitKeyboard () = 0 Or InitMouse () = 0
End
EndIf
Handle=DM_Graphics3D(1024,768, 32, #False , #True ) ; Initialize graphic windows
*Camera = DM_CreateCamera( #Null ) ; on cree une camera
; **************** bouger la camera ********************
;- bouger camera
posy.f=2 ;monte/descends
posx.f=100 ; droite gauche
poz.f=50 ; avance/recule
DM_MoveEntity(*Camera, posx,posy,poz) ; on recule la camera
Rouge=0
Vert=0
Bleu=0
DM_CameraClsColor(*Camera, Rouge, Vert, Bleu) ; on choisi une couleur de fond
; **************************************************
; on peut creer les objets
; **********************************
; ******** Text 3d ******************
;-creer du text3D
*text=DM_CreateText3D.l( "Comic Sans MS" , "by DOBRO" , 12, #Null ) ; on peut creer du text
posxe.f=96.5 ;
posye.f=-3.5 ;
posze.f=100 ;
DM_PositionEntity(*text, posxe.f, posye.f, posze.f)
scalex.f=2: scaley.f=2: scalez.f=2
DM_ScaleEntity(*text, scalex.f, scaley.f, scalez.f) ; on change l'echelle du cone
; **********************************
; ****** Cone LES AIGUILLES *******************
;-creer un cone
; on cree les pivots
; objet aiguille des secondes
*pivo_seconde=DM_CreatePivot.l()
*aiguille_seconde=DM_CreateCone.l(8, *pivo_seconde) ; on peut creer un cylindre avec 8 cotés
scalex.f=1: scaley.f=0.5: scalez.f=1
DM_ScaleEntity(*aiguille_seconde, scalex.f, scaley.f, scalez.f) ; on change l'echelle du cone
DM_RotateMesh(*aiguille_seconde,0,90,0) ; on va tourner l'objet pour le mettre debout
DM_TranslateEntity(*aiguille_seconde, 5, 0, 0)
; objet aiguille des minutes
*pivo_minute=DM_CreatePivot.l()
*aiguille_minute=DM_CreateCone.l(8, *pivo_minute) ; on peut creer un cylindre avec 8 cotés
scalex.f=0.7: scaley.f=0.5: scalez.f=0.7
DM_ScaleEntity(*aiguille_minute, scalex.f, scaley.f, scalez.f) ; on change l'echelle du cone
DM_RotateMesh(*aiguille_minute,0,90,0) ; on va tourner l'objet pour le mettre debout
DM_TranslateEntity(*aiguille_minute, 4, 0, 0)
; objet aiguille des heures
*pivo_heure=DM_CreatePivot.l()
*aiguille_heure=DM_CreateCone.l(8, *pivo_heure) ; on peut creer un cylindre avec 8 cotés
scalex.f=0.5: scaley.f=0.5: scalez.f=0.5
DM_ScaleEntity(*aiguille_heure, scalex.f, scaley.f, scalez.f) ; on change l'echelle du cone
DM_RotateMesh(*aiguille_heure,0,90,0) ; on va tourner l'objet pour le mettre debout
DM_TranslateEntity(*aiguille_heure, 3, 0, 0)
posxe.f=100
posye.f=4
posze.f=100
; deplacer les pivots (donc les aiguilles)
DM_PositionEntity(*pivo_seconde, posxe.f, posye.f, posze.f)
DM_PositionEntity(*pivo_minute, posxe.f, posye.f, posze.f)
DM_PositionEntity(*pivo_heure, posxe.f, posye.f, posze.f)
; ****** Sphere *******************
;-Creer le centre
*sphere=DM_CreateSphere.l(32, #Null ) ; on peut creer une sphere avec 32 segments
posxe.f=100
posye.f=4
posze.f=100
DM_PositionEntity(*sphere, posxe.f, posye.f, posze.f)
Dim *sphere(60)
For i=1 To 60
compt=compt+1
*sphere(i)=DM_CreateSphere.l(8, #Null ) ; on peut creer une sphere avec 32 segments
posxe.f=100
posye.f=4
posze.f=100
degres =degres+6 : If degres=360:degres=0: EndIf :
xc.f=RotationX(posxe.f, degres, 10)
Yc.f=RotationY(posye.f, degres, 10)
DM_PositionEntity(*sphere(i), xc, Yc, posze.f)
If compt=5
compt=0
scalex.f=0.7: scaley.f=0.7: scalez.f=0.7
DM_ScaleEntity(*sphere(i), scalex.f, scaley.f, scalez.f) ; on change l'echelle du cone
Else
scalex.f=0.5: scaley.f=0.5: scalez.f=0.5
DM_ScaleEntity(*sphere(i), scalex.f, scaley.f, scalez.f) ; on change l'echelle du cone
EndIf
Next i
; *********************************
; ****** Tore *******************
;-creer un tore
InnerRadius.f =1 ; taille interieur
OuterRadius.f=11 ; taille exterieur
Sides.l=8 ; nombre de segment pour le "pneu"
Rings.l=360 ; nombre de segment pour la "roue"
*tore=DM_CreateTorus.l(InnerRadius.f, OuterRadius.f, Sides.l, Rings.l, #Null ) ; on peut creer un Tore
rotx=0:roty=0:rotz=0
DM_TurnEntity(*tore,rotx,roty,rotz) ; on va tourner l'objet
posxe.f=100
posye.f=4
posze.f=100
DM_PositionEntity(*tore, posxe.f, posye.f, posze.f)
; *********************************
; ****** Lumiere *****************
; cree une petite lumière, type POINT
;-creer une lumiere
light = DM_CreateLight(1, Null)
Red.w=255
Green.w=10
Blue.w=100
Alpha.w=2
DM_LightColor(light, Red.w, Green.w, Blue.w, Alpha.w) ; change la couleur de la lumiere
; *********************************
date = Date ()
Heure= Hour (date)
Minute = Minute (date)
Seconde= Second (date)
angle_seconde.f=Seconde*6-90
angle_minute.f= Minute *6-90
angle_heure.f=Heure*30-90
DM_TurnEntity(*pivo_seconde,0,0,-angle_seconde) ; on va faire tourner l'objet
DM_TurnEntity(*pivo_minute, 0,0,0-angle_minute) ; on va fairel'objet
DM_TurnEntity(*pivo_heure,0,0,-angle_heure) ; on va faire l'objet
memseconde= Seconde
Memminute= Minute
memheure= Heure
Repeat
date = Date ()
Heure= Hour (date)
Minute = Minute (date)
Seconde= Second (date)
If memseconde<> Seconde
angle_seconde.f=6
DM_TurnEntity(*pivo_seconde,0,0,-angle_seconde) ; on va faire tourner l'objet
memseconde= Seconde
EndIf
If Memminute<>Minute
angle_minute.f=6
DM_TurnEntity(*pivo_minute, 0,0,-angle_minute) ; on va fairel'objet
Memminute= Minute
EndIf
If memheure<>Heure
angle_heure.f=30
DM_TurnEntity(*pivo_heure,0,0,-angle_heure) ; on va faire l'objet
memheure= Heure
EndIf
ExamineKeyboard ()
ExamineMouse ()
If KeyboardReleased ( #PB_Key_Escape ) Or WindowEvent ()= #PB_Event_CloseWindow
Quit=1
ElseIf KeyboardPushed ( #PB_Key_Up )
poz=1
DM_MoveEntity(*Camera, 0,0,0.8 ) ; on recule/avance la camera
ElseIf KeyboardPushed ( #PB_Key_Down )
poz=-1
DM_MoveEntity(*Camera, 0,0,-0.8 ) ; on recule/avance la camera
ElseIf KeyboardPushed ( #PB_Key_Left )
DM_MoveEntity(*Camera, -0.8,0,0) ; on recule/avance la camera
ElseIf KeyboardPushed ( #PB_Key_Right )
DM_MoveEntity(*Camera, 0.8,0,0) ; on recule/avance la camera
EndIf
; If MouseButton(#PB_MouseButton_Left)
DM_TurnEntity(*Camera, MouseDeltaY ()/8, MouseDeltaX ()/8,0)
; EndIf
; Render c'es ce qui permet de voir le resultat !
DM_BeginScene()
DM_RenderWorld()
DM_EndScene()
; *************************************
Until Quit=1
DM_ClearGraphics()
ShowCursor_ (1)
End
Procedure.f RotationX(x, angle.f, dist)
ProcedureReturn x + Cos (angle.f* #PI /180)*dist
EndProcedure
Procedure.f RotationY(Y, angle.f, dist)
ProcedureReturn Y + Sin (angle.f* #PI /180)*dist
EndProcedure