on se déplace comme dans CS
les touches fleché + souris
la souris c'est le regards
les touche haut/bas = avance recule
les touche droite/gauche = pas lateral droite et gauche
@ Tmyke ya quand même un problème avec les pivots !!
car cela déplace bel et bien l'objet , hors en principe ça ne devrai pas !!
voir la ligne 65 qui décale le pivo vers la base des aiguilles de 5 (mais décale aussi l'objet)
sans le rattrapage que je fait ligne 71 mes aiguilles ne serai pas centré sur la sphère central !!
ce qui prouve le décalage des objets !!

tout mes objet sont en principe centré sur la coordonée x,y,z (100,4,100)
donc ce ratrapage ne devrai pas avoir lieu !!
n'oubliez pas de corriger le chemin des includes sur votre ordi
voici le code de mon horloge

; 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 "d3dx9.pbi"
IncludeFile "dreamotion3d.pbi"
Enumeration
EndEnumeration
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
SetCurrentDirectory ( "D:\PureBasic\dobro\Exemple Perso\3Dreammotion\Samples\media\" ) ; mettre le bon chemin
Handle=DM_Graphics3D(1024,768, 32, #False , #False ) ; Initialize graphic windows
*Camera = DM_CreateCamera( #Null ) ; on cree une camera
; **************** bouger la camera ********************
;- bouger camera
posx.f=100 ; droite gauche
posy.f=2 ;monte/descends
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 des 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 *******************
;-creer un cone
*aiguille_seconde=DM_CreateCone.l(8, #Null ) ; on peut creer un cylindre avec 8 cotés
*aiguille_minute=DM_CreateCone.l(8, #Null ) ; on peut creer un cylindre avec 8 cotés
*aiguille_heure=DM_CreateCone.l(8, #Null ) ; 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
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
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
; ******************** tmyke a voir ça !! *******************************
DM_PivotEntity(*aiguille_seconde, 0, 0, -5) ; cela créé un decalage de l'objet complet !!
DM_PivotEntity(*aiguille_minute, 0, 0, -5)
DM_PivotEntity(*aiguille_heure, 0, 0, -5)
posxe.f=100
posye.f=4
posze.f=105 ; ratrappe le décalage de Pivo entity !!!!! <---------- RUSTINE var mes objets sont toous en 100,4,100
DM_PositionEntity(*aiguille_seconde, posxe.f, posye.f, posze.f)
DM_PositionEntity(*aiguille_minute, posxe.f, posye.f, posze.f)
DM_PositionEntity(*aiguille_heure, posxe.f, posye.f, posze.f)
DM_TurnEntity(*aiguille_seconde,0,90,0) ; on va tourner l'objet pour le mettre debout
DM_TurnEntity(*aiguille_minute,0,90,0) ; on va tourner l'objet pour le mettre debout
DM_TurnEntity(*aiguille_heure,0,90,0) ; on va tourner l'objet pour le mettre debout
; ****** 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(32, #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(*aiguille_seconde,angle_seconde,0,0) ; on va faire tourner l'objet
DM_TurnEntity(*aiguille_minute, angle_minute,0,0) ; on va fairel'objet
DM_TurnEntity(*aiguille_heure,angle_heure,0,0) ; 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(*aiguille_seconde,angle_seconde,0,0) ; on va faire tourner l'objet
memseconde= Seconde
EndIf
If Memminute<>Minute
angle_minute.f=6
DM_TurnEntity(*aiguille_minute, angle_minute,0,0) ; on va fairel'objet
Memminute= Minute
EndIf
If memheure<>Heure
angle_heure.f=30
DM_TurnEntity(*aiguille_heure,angle_heure,0,0) ; on va faire l'objet
memheure= Heure
EndIf
ExamineKeyboard ()
ExamineMouse ()
ShowCursor_ (1)
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.1) ; on recule/avance la camera
ElseIf KeyboardPushed ( #PB_Key_Down )
poz=-1
DM_MoveEntity(*Camera, 0,0,-0.1) ; on recule/avance la camera
ElseIf KeyboardPushed ( #PB_Key_Left )
DM_MoveEntity(*Camera, -0.1,0,0) ; on recule/avance la camera
ElseIf KeyboardPushed ( #PB_Key_Right )
DM_MoveEntity(*Camera, 0.1,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()
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