Dreamotion3D

Généralités sur la programmation 3D
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Je viens de faire un test vite fait en recopiant ton exemple water dans purepatator

Code : Tout sélectionner

  ; ---------------------------------------
  ;    une petite étendu d'eau
  ; ---------------------------------------  
  DM_SetWater(64,64)
  *water = DM_CreateWater("wave0.dds", "wave1.dds", "grassenvmap1024.dds")
  If *water<>#Null
    DM_PositionEntity(*water,0,-120,0)
    DM_ScaleEntity(*water,30,30,30)
    DM_TranslateEntity(*water, 0,1,0)
    DM_WaterColor(*water, 110,110,110,180)
    DM_WaterShift(*water, 0.003, 0.003)
  EndIf  
C'est juste pour voir ce que ça pourrait donner, il reste à enlever le plain qui représente l'eau sous Deled, et ajuster les dimensions et la position de l'eau dans le code, mais ça rend pas mal :)
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

C'est fais, je met cela en ligne dans moins de 30 mn...
Force et sagesse...
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

C'est OK, et c'est ici:

http://www.dreamotion3d.com/_downloads/ ... atator.zip

cela m'a donné l'occasion de voir certaines imperfections, niveau particule par exemple,
ou il y a un effet désagréable sur le rendu quand elle sont dans l'eau.

Image
Force et sagesse...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Super , ça rend bien et le FPS ne bronche pas, toujours à 60 :)
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

C'est vrai que ça rend bien! Il fait juste un peut sombre je trouve :?
Sinon niveau FPS, rien à dir... en 1280*1024 sans synchro je tourne entre 1800-2400 ! :twisted:
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

cederavic a écrit :Sinon niveau FPS, rien à dir... en 1280*1024 sans synchro je tourne entre 1800-2400 ! :twisted:
Wow ! Chez moi ça tourne à 150 en moyenne sans la synchro en 1280*1024.

J'ai remarqué qu'en 1280*1024 la sphere est décalée par rapport à la croix.
jusqu'à 1024*768 la sphère suit bien la croix , bizarre !

[EDIT]
C'est pas si bizarre que ça :
640/480 = 1,333
800/600 = 1,333
1024/768 = 1,333
1280/1024 = 1,25 --> faudrait en tenir compte pour corriger je ne sais quoi ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

he ho ! qu'est devenu la fonction
DM_PivotEntity() ???

je m'en servi pour positioner mes aiguilles dans mon Horloge 3d ! :?

je fais comment pour mettre l'axe a la base de mes aiguilles

avant je faisais

Code : Tout sélectionner

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)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

à l'occasion faudra corriger le source PurePatator, l'eau ne touche pas les murs partout, il faut corriger comme ça :

Code : Tout sélectionner

DM_PositionEntity(*water,-550,-200,0)
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Ok, merci, je fais cela.

@Dobro, pour les pivot a toi de les créer:

exemple:

Code : Tout sélectionner

  *pivot = DM_CreatePivot()
  *mesh  = DM_CreateCube(*pivot)
   DM_TranslateEntity(*mesh, 0,10,0)

 ....

DM_TurnEntity(*pivot, 0,0,1)
c'est nettement plus sein et controlable...
:wink:
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tmyke a écrit :Ok, merci, je fais cela.

@Dobro, pour les pivot a toi de les créer:

exemple:

Code : Tout sélectionner

  *pivot = DM_CreatePivot()
  *mesh  = DM_CreateCube(*pivot)
   DM_TranslateEntity(*mesh, 0,10,0)

 ....

DM_TurnEntity(*pivot, 0,0,1)
c'est nettement plus sein et controlable...
:wink:

ha le pivo deviens un objet a part entiere alors :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

mais il me semble imposible de bouger le pivo sans bouger l'objet auquel il est attaché !

j'ai fait des aiguilles (des cones) j'ai cree un pivot pour chaque aiguilles
et je cherche a deplacer le pivot de ces aiguilles a la base du cone
(par defaut le pivot est au centre)

mais lorsque je cherche a deplacer le pivot par rapport a l'objet cone
(enfant du pivot ) le Cone bouge aussi ! (normal c'est l'enfant)

mais justement un pivot en 3d n'est pas l'enfant ou le parent de l'objet
il est une composante , la avec ce system, je ne vois pas comment faire ! :?


voici mon code d'horloge :

autre chose , je trouve que la mise en route du programme est tres tres longue chez moi .. bizard, cela n'etais pas le cas avec l'ancienne version :?



Code : Tout sélectionner

;  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"
  ShowCursor_(0) 
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\include") ; 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
; on cree les pivots

*pivo_seconde=DM_CreatePivot.l()
*pivo_minute=DM_CreatePivot.l()
*pivo_heure=DM_CreatePivot.l()


posxe.f=100
posye.f=4
posze.f=100 



; j'essaie de deplacer le pivot avant qu'il soit attacher a l'objet 
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)

; mais cela ne fonctionne pas ...

*aiguille_seconde=DM_CreateCone.l(8, *pivo_seconde) ; on peut creer un cylindre avec 8 cotés
*aiguille_minute=DM_CreateCone.l(8, *pivo_minute) ; on peut creer un cylindre avec 8 cotés
*aiguille_heure=DM_CreateCone.l(8, *pivo_heure) ; on peut creer un cylindre avec 8 cotés

; ici le pivot est quand meme au centre des Cone !!


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



DM_TurnEntity(*pivo_seconde,0,90,0) ; on va tourner l'objet pour le mettre debout
DM_TurnEntity(*pivo_minute,0,90,0) ; on va tourner l'objet pour le mettre debout
DM_TurnEntity(*pivo_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() 
  
    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()
  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



tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

En fait, c'est plus simple qu'il n'y parait. Les pivot sont, comme tu le dis d'ailleurs,
des entity 3D comme les autres, mais sans apparence physique.
Le Sample de Comtois dans le pack (pivots) met très bien en lumière
leurs utilisation.
Pour le cas de ton aiguille, ton pivot est le centre de rotation, il suffit de faire
glisser ton auiguille par rapport au pivot pour la décaler, exemple:

Code : Tout sélectionner

; Fichiers Include 
IncludePath "Include\"  : IncludeFile "dreamotion3d.pbi"

  ;  Initialisation des différents modules
  If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
    End
  EndIf

  ; Initialise la fenêtre graphique
  DM_Graphics3D(800, 600, 32,  0, 1)
  ; p'tite lumière
  DM_CreateLight(3)
  ; ---------------------------------------
  ;           Gestion des meshs
  ; ---------------------------------------
  *pivot = DM_CreatePivot() ; le pivot, qui sert de père
  
  *mesh  = DM_CreateCube(*pivot) ; la branche de l'aiguille
  DM_SCaleMesh(*mesh, 0.5,2.5,0.5)
  DM_TranslateEntity(*mesh, 0,5,0)  ; translation de 5 sur l'axe des Y 

  *mesh  = DM_CreateCone(8,*pivot)  ; le bout de l'aiguille
  DM_RotateMesh(*mesh, -90,90,0) ; pour orienter dans le bon sens l'aiguille
  DM_TranslateEntity(*mesh, 0,12,0) ; idem, mais un peu plus haut de le cube

  ; ---------------------------------------
  ;          Gestion des caméras
  ; ---------------------------------------
  *camera   = DM_CreateCamera()
  DM_MoveEntity(*camera, 0,0,-40.0)
  DM_CameraClsColor(*camera, 15, 15, 15)

  
  ; ---------------------------------------
  ;           Boucle principale
  ; ---------------------------------------
  Repeat
  	ExamineKeyboard()  	
    If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
  	  Quit=1
    EndIf
  	
  	DM_TurnEntity(*pivot,0,0,1)
  	; ---------------
  	;      Rendu
  	; ---------------
  	DM_BeginScene()
    	DM_RenderWorld()
  	DM_EndScene() 	
Until Quit=1
DM_ClearGraphics()
End
La tu as un pivot, dont le centre de rotation se fait par rapport a l'axe Z, et dessus
j'ai place un cube et un cone pour faire une aiguille, que j'ai déplacé par rapport au
pivot sur l'axe des Y.
Comme tu dis, si tu bouge le pivot, tous les enfants bougent aussi (logique), mais
ne t'empeche de bouger les enfants seuls, enfin j'espère avoir été assez claire.
De toute façon, je ne m'en fait pas, car si mes expli sont pas terrible, le
petit code que j'ai mis va te sauter au yeux de suite...
:wink:

PS: ne remet pas la ligne 'Include "d3dx9.pbi" ', car elle est desormais dans
le fichier Dreamotion3d.pbi, donc en fait cela veut dire que tu importes
deux fois tous les Headers D3D, c'est peut-etre la la source de cettee
lenteur au lancement, que tu n'avais pas avant...
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je crois avoir compris :D

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 :lol:

bon voici l'exemple terminé, qui Fonctionne chez moi

cependant j'aimerai bien que tu l'essaie , car chez moi le lancement mets bien 5 a 6 secondes !! :?

voici le code (que tu pourra mettre avec les exemples si tu veux :D )


; 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



Dernière modification par Backup le mer. 17/janv./2007 20:42, modifié 1 fois.
VPureBasic
Messages : 7
Inscription : lun. 11/juil./2005 22:33
Localisation : Quebec - Canada

Message par VPureBasic »

Salut tmyke,

J'aime ton travail effectue avec DM, c'est un moteur tres efficace et tres performant... Pour ma part, il surpasse facilement ogre! Depuis quelques jours, j'effectue divers test afin de le maitriser au mieu ( lorsque que j'ai quelque minutes de libre... travail 54 hrs semaines + petite famille de sept enfants ). N'ayant pas encore trouver comment effectuer un affichage orthographic des meshes, je me dois de faire appel a ta maitriser pour svp pondre un petit snipet...

merci
Roger - Quebec
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

@Dobro: excellent, je saute sur la perche que tu as tendu, je le mettrait
dans les sample du prochain pack... :wink:

Concernant la lenteur de démarrage, c'est toujours du à cette fonction de
calcul des NormalSmooth issus de DirectX. Comtois avait rencontré le meme
genre de soucis dans son exemple du flag, ou la mise a jour des normals en
temps réél etait affreusement longue. Quand j'aurais un peu de temps, j'écrirais
moi meme une routine faisant la meme chose, mais beaucoup rapide...
Sinon, tu peux quand meme accélerer un peu le lancement en créant des sphere
un peu moins dense, de 16 slices par exemple au lieu de 32.
En final, tu passe de environ 135000 faces pour tes sphère a 34500 environs.
Un gains substentiel, pour une altération visuelle peux perseptible en fait:
DM_CreateSphere() au lieu de DM_CreateSphère(32, #Null).

@VPureBasic: merci pour l'interet que tu porte à Dreamotion3D. Pour ce qui
de l'affichage orthographique des mesh, en fait pour l'instant cela n'est pas
vraiment possible. Mais si tu a vraiement besoin de ce type de représentation
il y a toujours moyen de rajouter un fonction permettant d'y arriver...

Image Image
Force et sagesse...
Répondre