Dreamotion3D

Généralités sur la programmation 3D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

effectivement c'etais ça !! :D

j'ai corrigé le source ci dessus
j'ai aussi acceleré le deplacement avec les Fleche du clavier

lorsque j'aurai un peut de temps j'ajouterai au fur a mesure des petites choses auquel je pense , mais aps tout de suite, donc tu peux le prendre tel quel :D
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 »

ça roule, cela sera donc bien dan le pack d'ici peu... :wink:
Force et sagesse...
VPureBasic
Messages : 7
Inscription : lun. 11/juil./2005 22:33
Localisation : Quebec - Canada

Message par VPureBasic »

Salut tmyke,

Si ma comprehension du 3D est bonne, je crois que l'ajout d'une telle commande qui permettrait l'affichage en mode orthograhique pourrait surement aider ou permettre la realisation d'un modelisateur de monde pour DM ou autres outils afin d'aider a la realisation d'un jeu, etc.

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 »

Alors, pas de soucis , je me penche sur le problème et je tiens au courant, disons
avant la fin du WE... :wink:
Force et sagesse...
VPureBasic
Messages : 7
Inscription : lun. 11/juil./2005 22:33
Localisation : Quebec - Canada

Message par VPureBasic »

Salut tmyke,

J'ai oublie lors de ma suggestion d'une commande pour l'affichage orthographique, qu'elle soit pour les cameras et non pour l'ouverture du screen comme dans ton exemple des deux types d'affichage. Le changement par camera seulement permettera de faire afficher plusieurs vues ( Viewports ) de compositions orthographique telque dessus, devant et cote, en plus permettre une vision globale en perspective dans un seul ecran.

J'aurais une autre requete qui porte dans le meme sens... est-qu'il te serait possible d'incorporer une commande de reconnaissance de la position du curseur dans les differents viewports. Le tout afin de pouvoir effectuer rapidement le picking ou du dessin en 2D, etc.

Peut-etre des commandes telque:
vp.l = DM_Viewport() ; vp = *Camera

Pour finalement pour voir demande la position du curseur avec:
x = DM_MouseX( vp )
y = DM_MouseY( vp )

C'est nouvelles commandes pourraient servir pour localiser un point dans le monde 3D afin d'y ajouter des points, lignes, surfaces etc... toujours dans l'optique de creer des outils pour DM.

Merci d'etre a notre ecoute... et ce aussi rapidement!

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 »

Pour la gestion de vue et du picking, il existe déjà je pense les fonctions
nescessaire, voici un petit code en guise d'exemple, peut-etre pas des
plus élégant, mais assez explicite pour en montrer le mécanisme:
Pour la 2D, il suffit de te fier au position souris relatives...

Click gauche + dirKey pour bouger dans chaque vue.
Click droit, picking dans chaque vue pour positionner la petite boule.
;)

Code : Tout sélectionner

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


Declare  FreeCam(*camera.CEntity, posx.l, posy.l)
Declare  PickCam(*camera.CEntity, posx.l, posy.l)

; Globales
Global	anglex.f, angley.f, flagXDown.w
Global	mox.f, omx.f, moy.l, omy.l



  Global	*camera1.CEntity
  Global	*camera2.CEntity
  Global	*camera3.CEntity
  Global	*camera4.CEntity
  Global *mesh.CEntity
  Global *boule.CEntity

  
  ;  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)
  ; Lumière
  DM_CreateLight(3)
  
  ; ---------------------------------------
  ;           Creation des mesh
  ; ---------------------------------------
  ; un teapot pour exemple
  *mesh = DM_CreateTeapot()

  *boule = DM_CreateSphere()
  ; réduit la boule
  DM_ScaleMesh(*boule, 0.125, 0.125, 0.125)
  ; en bleu
  DM_EntityColor(*boule, 50,100,200,255)
  ; désactive le picking sur le petite boule bleu
  DM_EntityPickMode(*boule, #False)

  ; ---------------------------------------
  ;         Nos 4 camera avec les 4 vues
  ; ---------------------------------------
  *camera1 = DM_CreateCamera()
    DM_TranslateEntity(*camera1, 0,0,-10)
    DM_CameraClsColor(*camera1, 200, 0, 0)
    DM_CameraViewPort(*camera1, 0,0,399,299)


  *camera2 = DM_CreateCamera()
    DM_TranslateEntity(*camera2, 0,10,0)
    DM_RotateEntity(*camera2, 90,0,0)
    DM_CameraViewPort(*camera2, 400,0,400,300)
    DM_CameraClsColor(*camera2, 0, 200, 0)
    
  *camera3 = DM_CreateCamera()
    DM_TranslateEntity(*camera3, 10,0,0)
    DM_RotateEntity(*camera3, 0,-90,0)
    DM_CameraViewPort(*camera3, 0,300,400,300)
    DM_CameraClsColor(*camera3, 0, 0, 200)

  *camera4 = DM_CreateCamera()
    DM_TranslateEntity(*camera4, -10,0,0)
    DM_RotateEntity(*camera4, 0,90,0)
    DM_CameraViewPort(*camera4, 400,300,399,299)
    DM_CameraClsColor(*camera4, 0, 0, 0)

  ; ---------------------------------------
  ;           Boucle principale
  ; ---------------------------------------
  ; si plein ecran, permet d'avoir la fleche
  ;change_curseur( #IDC_ARROW  )
  Repeat
    	ExamineKeyboard()
    	ExamineMouse() 
    	ShowCursor_(1)
  	
  	If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
  	  Quit=1
  	EndIf

  
  	; Gestion de la caméra
 		mx.l = MouseX()  :  			my.l = MouseY()
    If( (mx<400) And (my<300) )
      FreeCam(*camera1, MouseX(), MouseY())
    ElseIf ( (mx>=400) And (my<300) )
      FreeCam(*camera2, MouseX()-400, MouseY())
    ElseIf ( (mx<400) And (my>=300) )
      FreeCam(*camera3, MouseX(), MouseY()-300)
    ElseIf ( (mx>=400) And (my>=300) )
      FreeCam(*camera4, MouseX()-400, MouseY()-300)
    EndIf
    
    
  	
    ; Picking
    If MouseButton(#PB_MouseButton_Right)
      If( (mx<400) And (my<300) )
          PickCam(*camera1, MouseX(), MouseY())
       ElseIf ( (mx>=400) And (my<300) )
          PickCam(*camera2, MouseX()-400, MouseY())
       ElseIf ( (mx<400) And (my>=300) )
          PickCam(*camera3, MouseX(), MouseY()-300)
       ElseIf ( (mx>=400) And (my>=300) )
          PickCam(*camera4, MouseX()-400, MouseY()-300)
       EndIf
       
    EndIf

  	; ---------------
  	;      Rendu
  	; ---------------
  	DM_BeginScene()
    	DM_RenderWorld()
  	DM_EndScene()
  Until Quit=1
  DM_ClearGraphics()
  End
 
  
; gestion des picking
Procedure PickCam(*camera.CEntity, posx.l, posy.l)
  Protected *pickedmesh
       
  *pickedmesh = DM_CameraPick(*camera, posx, posy)
  If *pickedmesh<> #Null
      DM_PositionEntity(*boule, DM_PickedX(),DM_PickedY(),DM_PickedZ())
  EndIf
EndProcedure
; gestion camera libre
Procedure FreeCam(*camera.CEntity, posx.l, posy.l)
  	; Gestion de la caméra
  	If KeyboardPushed(#PB_Key_Up)
  	 	DM_MoveEntity(*camera, 0,0,1)
  	EndIf
  	If KeyboardPushed(#PB_Key_Down) 
  	  DM_MoveEntity(*camera, 0,0,-1)
  	EndIf
  	If KeyboardPushed(#PB_Key_Right)
  	 	DM_MoveEntity(*camera, 1,0,0)
  	EndIf
  	If KeyboardPushed(#PB_Key_Left) 
  	  DM_MoveEntity(*camera, -1,0,0)
  	EndIf

  	If MouseButton(#PB_MouseButton_Left)
  		If flagXdown=0
  			omx = MouseX()
  			omy = MouseY()
  			flagXDown=11
  		Else
  			moy = MouseY()-omy
  			angley=(moy/5.0)
  			omy= MouseY()
  			mox = MouseX()-omx
  			anglex=(mox/5.0)
  			omx= MouseX()
  			DM_TurnEntity(*camera, angley,anglex,0)
  		EndIf
  	Else
  	 		flagXDown=0
    EndIf
EndProcedure
Force et sagesse...
VPureBasic
Messages : 7
Inscription : lun. 11/juil./2005 22:33
Localisation : Quebec - Canada

Message par VPureBasic »

Salut tmyke,

Tout simplement remarquable! Comme je te disais plus haut, j'ai vraiment beaucoup a apprendre :oops:

Merci encore!

Roger - Quebec
GG
Messages : 239
Inscription : jeu. 09/déc./2004 12:23

Message par GG »

Bonjour à tous,

Je ne peux que féliciter tmyke, CPL.Bator, Comtois, Dobro et tous ceux participant à cette aventure DreamMotion3D. J'avoue avoir été un peu sceptique au début, mais force est de reconnaître que le moteur prend plus que jamais forme...
Je n'ai pas vu la question être déjà posée, alors je la pose, elle est peut être idiote : Quelle va être la politique de développement, et l'orientation qui va être donnée à DreamMotion3D avec Vista et son DirectX10 ? De nouvelles contraintes risquent-elles d'apparaître ?
En tout cas, je n'ai pas encore développé avec, mais je pense que ca va être imminent...

Gaëtan
PureBasic 6.03 - Windows 11 22H2 (64 bits)
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 »

Salut Gaëtan. Dreamotion3d est comme les ordi qui se vendent en ce moment:
'ready to Vista', enfin ici surtout 'Ready to DirectX10'

En d'autre thermes, il est conçu pour une adaptation la plus aisé possible a la
nouvelle API de Microsoft. Cela ne se fera pas un un WE, mais cela fait des objectif de fin d'année,
passer à DX10. (je sais je vois loin)
En fait, il s'agira d'une version spécifique, on devrait donc avoir DM3D DX9c et un
DM3D DX10, avec les fonctions spécifiques a la derniere API. Mais nous essayeront
de toujours garder la meme phylosophie, c-à-d simplicité d'utilisation.

Mais pour l'instant, on va laisser arriver Vista et surtout les carte et leurs
pilotes DX10, pendant ce temps, Dreamotion3D va murir (et il en a besoin)
et s'éttofer un peu. Au mois de juin le moteur soufflera sa première bougie
et avec, sa première Release, et Si tout va bien, au mois de octobre le
moteur aura 16 mois, et la on fera le point pour commencer une passerelle DX10 qui
tiens le route. (et l'aquisition d'une plateforme Vista avec une carte video rééllement
DX10, genre NV 8800) :wink:
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Salut ! :D

j'ai un petit problem avec Dream

voila le listing ci dessous

ecrit une phrase dans une image, scane la phrase et creer un tableau de points relatif a l'ecriture "Blanche" de la phrase

ensuite je lance dream, et je lui fait afficher des cubes, en fonction du tableau precedement crée !
cela marche .. mais

voici la code et apres je pose le blem :lol:

Code : Tout sélectionner

;  Init different modules
; Fichiers Include 
; voir le dreamotion3d.pbi pour le details des commandes reconnu

Dim tableau(1024,15)
Enumeration 
    #fenetre
    #Police
    #curseur
    #image
EndEnumeration

Structure cube
    numero.l
    x.f
    Y.f
    z.f
EndStructure

Dim cube.cube(1000)

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
    End 
EndIf

SetCurrentDirectory("media/")


FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=hauteur de l'ecran
    
    
    WindowID = OpenWindow(#fenetre, 0, 0,EcranX,EcranY,  "hello",#PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered ) 
    Result = OpenWindowedScreen(WindowID(#fenetre) ,0,0, EcranX,EcranY, 1, 0,0)
    CreateImage(#image,1024,768,32)
    
    StartDrawing( ImageOutput(#image))
    DrawText(0, 0, "Dreamotion3d Votre Moteur 3D" ,RGB(255,255,255),RGB(0,0,0))
    
    For Y =0 To 15
        For x=0 To 1024
            tableau(x,Y)=Point(x,Y)   
        Next x
    Next Y 
    StopDrawing()  
    CloseWindow(#fenetre)
    
    
    
    
    IncludePath "D:\PureBasic\dobro\Exemple Perso\3Dreammotion\Samples\Include\"
    IncludeFile "D:\PureBasic\dobro\Exemple Perso\3Dreammotion\Samples\include\d3dx9.pbi"
    IncludeFile "D:\PureBasic\dobro\Exemple Perso\3Dreammotion\Samples\include\dreamotion3d.pbi"
    
    ; demarre le moteur 3D
    
    DM_Graphics3D(1024,768, 32,  #False, #False) ; Initialize graphic windows
    
    
    *Camera = DM_CreateCamera(#Null) ; on cree une camera 
    
    
    For Y =0 To 15
        For x=0 To 1024 
            If tableau(x,Y)<>0
                ; creer un Cube
                nb=nb+1
                cube=DM_CreateCube.l(#Null) ; on peut creer un Cube 
                scalex.f=4: scaley.f=4: scalez.f=4 
                DM_ScaleEntity(cube, scalex.f, scaley.f, scalez.f); 
                posxe.f =x*10
                posye.f=Y*10
                posze.f=0 
                cube(nb)\x=posxe.f
                cube(nb)\Y=posye.f
                cube(nb)\z=posze.f
                DM_PositionEntity(cube, cube(nb)\x, cube(nb)\Y, cube(nb)\z)
            EndIf 
        Next x
    Next Y
    
    
    ; **************** bouger la camera ********************
    ;- bouger camera
   
    poz.f=500 ; avance/recule ; pour le terrain
    posy.f=-100
    DM_MoveEntity(*Camera, posx,posy,poz); on recule la camera
    Rouge=0
    Vert=10
    Bleu=0
    DM_CameraClsColor(*Camera, Rouge, Vert, Bleu)  ; on choisi une couleur de fond 
    rotxc.f=-20 ; oui de la tete
    rotyc.f=150; non de la tete
    rotzc.f=180; droite gauche pour un avion
    DM_TurnEntity(*Camera, rotxc.f, rotyc.f, rotzc.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
    ; *********************************
    
    
    Repeat 
        
        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.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 ) 
            ;rotx.f=30 ; oui de la tete
            rotyc.f= rotyc.f+0.8; non de la tete
            ;rotz.f=0; droite gauche pour un avion
            DM_RotateEntity(*Camera, rotxc.f, rotyc.f, rotzc.f)
        ElseIf KeyboardPushed(#PB_Key_Right ) 
            ; rotx.f=30 ; oui de la tete
            rotyc.f=rotyc.f-0.8; non de la tete
            ; rotz.f=0; droite gauche pour un avion
            DM_RotateEntity(*Camera, rotxc.f, rotyc.f, rotzc.f) 
        EndIf      
        If MouseButton(#PB_MouseButton_Left)  
            Quit=1
        EndIf
        DM_TurnEntity(*Camera, -MouseDeltaY()/8,- MouseDeltaX()/8,0) 
        
        
        translatex.f=-0.2
        translatey.f=0
        translatez.f=0
        
        
        ; For nume=0 To nb
            ; cube(nume)\x=cube(nume)\x-0.2
            ; DM_TranslateEntity(cube, cube(nume)\x, cube(nume)\Y, cube(nume)\z, glob.b=#False)
        ; Next nume
        ;  
        
        
        ;      Render  c'es ce qui permet de voir le resultat !
        DM_BeginScene() 
        DM_RenderWorld() 
        DM_EndScene() 
        ; *************************************
    Until Quit=1
    
    DM_ClearGraphics()
    
    End

le blem je voulais faire bouger tous ces cubes crées pour faire un scroll
dans le sens des X (des -X pour etre exacte)

pour ça au moment de la creation, je n'ai eu aucun mal a mettre les emplacements de mes cubes dans une structure "Cube\x,Cube\y,Cube\z"
mon problem concerne l'indice du cube

en effet tu utilise non pas une variable mais un pointeur pour indicer les objets

me voila bien embarassé :oops:
je voulais faire une truc du genre

Code : Tout sélectionner

For nume=0 To nb
      cube(nume)\x=cube(nume)\x-0.2
      DM_TranslateEntity(cube(nume)\numero, cube(nume)\x, cube(nume)\Y, cube(nume)\z, glob.b=#False)
 Next nume
note le "cube(nume)\numero" comme on le fait en purebasic
mais avec ces satanés pointeurs, c'est pas pratique :?

car actuellement comment creer a la volée une pleiyade de Cube
qui auraient chacun un numero diferencié
de façon ace qu'on puisse les bougers en utilisant une boucle par exemple ? 8O

Franchement si vous pouviez rendre ce moteur accessible aux variables
tableaux, structure , a la place de ces pointeurs , se serai un grand pas !!

si cela devai rester en l'etat, je ne serai plus trop interressé par ce moteur :?

Je prefere te le dire franchement, ce system de pointeur est ANTI CONVIVIALE au possible :?

imagine si les index n'etaient pas des pointeurs, nous pourrions
aisement traiter des lots d'objets, faire des tris, sans ce prendre la tete

vous devez avoir une bonne raison d'utiliser les pointeurs, mais
c'est pas genial a appliquer ... :?

Faut dire qu'en plus je suis pas tres a l'aise avec les pointeurs,
comme la majorité des programmeurs Basic d'ailleurs
nous avions bien VARPTR , mais qui s'en souviens encore :lol:
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 »

Pour l'indexation plutot que les pointeurs, c'est un sujet délicat.

En fait, j'y ai déjà pense, mais cela pose quelques problèmes techniques
niveau moteur, le gestion des liste de tableaux dynamiques sur plusieurs
types de structure n'est pas évidente, et de plus cela plombe
un peu les perf du moteur, donc pour l'instant, en l'état, je ne pense
pas que cela soit une piste que nous suivront.

Par contre, ton code doit marcher, meme sans cette indexation au niveau
du moteur, avec la structure que tu as écrite, il ne devrait pas y avoir
de soucis, dans la mesure ou la plage mémoire des machine autorise sans
soucis ce genre d'écriture.

Tu peux aussi écrire aussi un truc du genre

Code : Tout sélectionner

Structure cube
    *numero.CEntity
    x.f
    Y.f
    z.f
EndStructure 
avec une affectation du genre cube(num)\numero = DM_CreateCuve().

Par contre, ton code plante chez moi, et si je puis me permette,
j'ai du écrire plutot ceci

Code : Tout sélectionner

  For Y =0 To 15
        For x=0 To 1024
            If tableau(x,Y)<>0
                ; creer un Cube
                *cube_c.CEntity=DM_CreateCube() ; on peut creer un Cube
                scalex.f=4: scaley.f=4: scalez.f=4
                DM_ScaleEntity(*cube_c, scalex.f, scaley.f, scalez.f);
                posxe.f =x*10
                posye.f=Y*10
                posze.f=0
                cube(nb)\x=posxe.f
                cube(nb)\Y=posye.f
                cube(nb)\z=posze.f
                cube(nb)\numero = *cube_c
                DM_PositionEntity(*cube_c, cube(nb)\x, cube(nb)\Y, cube(nb)\z)
		nb=nb+1
            EndIf
        Next x
    Next Y
car si ton élément '0' n'est pas initialisé, cela donne '0' aussi dans la
structure cube\numero dans la structure, et effectivement les pointeur
'null', ça aime pas

et donc aussi

Code : Tout sélectionner

         For nume= 0 To nb-1
             cube(nume)\x=cube(nume)\x-0.2
             DM_TranslateEntity(cube(nume)\numero, cube(nume)\x, cube(nume)\Y, cube(nume)\z)
         Next nume 
je ne vois rien a l'ecran, mais les entity semblent bien crées et gérées...
Quand au pointeurs, il ne faut pas en fait s'en soucier, ils faut simplement les
utiliser comme des données comme les autres, c'est tout. On peux en faire des tableaux
les manipuler, etc... C'est que sous PB, contrairement a la plupart des langages, tu es
obligé de toujours coller cet '*' disgracieux, mais c'est une habitude.
;)
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

non ton exemple ne marche pas ! c'est pour ça que cela n'affiche rien :)

pour te faire comprendre le problemme je vais te poser une seule question :D


comment fait tu pour creer 1000 cubes hrizontalement, et ne déplacer
qu'un cube sur 2 apres placement en ligne de ceux ci

je veux pouvoir voir les cubes allignés, et ensuite un cube sur deux avancer
de 50 par exemple , cette deuxiem rangé devra avancer ensemble !

ou bien :

faire que un par un ces cube se mettent a monter de 50
(qu'on puisse le voir faire !)


je veux attirer ton attention sur le fait, qu'actuellement on créer un objet
l'un apres l'autre, en lui donnant un "nom" (le pointeur)

(ce qui n'est pas normal d'ailleurs, c'est qu'en lui donnant le meme nom (le même pointeur) le moteur creer quand meme plusieurs objet !!)
ex :

Code : Tout sélectionner

For x=0 To 1000  
            ; creer un Cube
            nb=nb+1 
            *cube=DM_CreateCube.l(#Null) ; on peut creer un Cube  
            scalex.f=4: scaley.f=4: scalez.f=4 
            DM_ScaleEntity(  *cube, scalex.f, scaley.f, scalez.f); 
            posxe.f =x*10   
            DM_PositionEntity( *cube, posxe, Y, z) 
    Next x

mais le problème de la création tel quel c'est qu'on ne peux pas
creer 1000 cubes, et se dire "tiens! je bouge le 50 eme" !

en effet comment connaitre le 50 eme cube dans ce cas ?

le problem se posera pour les collisions entre autre :D



je demandais a pouvoir faire ça !

Code : Tout sélectionner

Structure cube 
    index.l
    x.f
    Y.f
    z.f
EndStructure

Dim cube.cube(1000)

puis

Code : Tout sélectionner

For x=0 To 1000  
            ; creer un Cube
            nb=nb+1 
           cube(nb)\index=DM_CreateCube.l(#Null) ; on peut creer un Cube  
            scalex.f=4: scaley.f=4: scalez.f=4 
            DM_ScaleEntity( cube(nb)\index, cube(nb)\x, cube(nb)\Y, cube(nb)\z); 
             cube(nb)\x =cube(nb)\x*10   
            DM_PositionEntity( cube(nb)\index, cube(nb)\x, cube(nb)\Y, cube(nb)\z) 
    Next x

ça cela aurai ete geant :D
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 »

Pour un exemple de ce type, facile, mais je me suis limité à 20 cube
:)

Code : Tout sélectionner

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

; Globales
  Global *camera.CEntity

  ;  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)
  DM_CreateLight(3)

  ;--------------------------------------------------------------
  ; p'tite struct et creation des cubes
  ;--------------------------------------------------------------

Structure struct_cube
    *mesh.CEntity
    x.f
    Y.f
    z.f
EndStructure

Dim cube.struct_cube(20) 
  
  ; creation des cube
  For t= 0 To 19
    cube(t)\mesh = DM_CreateCube()
    DM_TranslateEntity(cube(t)\mesh, 3.0*t,0,0)
  Next 
  ; ---------------------------------------
  ;          Gestion des caméras
  ; ---------------------------------------
  *camera   = DM_CreateCamera(#Null)
  DM_MoveEntity(*camera, 30,10,-70)
  DM_CameraClsColor(*camera, 125, 125, 125)

index.l=0
  ; ---------------------------------------
  ;           Boucle principale
  ; ---------------------------------------
  ; si plein ecran, permet d'avoir la fleche
  ;change_curseur( #IDC_ARROW  )
  Repeat
  	ExamineKeyboard()
  	ExamineMouse() 
  	ShowCursor_(1)
     	
  	If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
  	  Quit=1
  	EndIf
  	

    DM_TranslateEntity( cube(index)\mesh, 0,1,0)
    index +1
    If (index>19) : index=0 : EndIf
  
  	
  	; ---------------
  	;      Rendu
  	; ---------------
  	DM_BeginScene()
    	DM_RenderWorld() 	    
  	DM_EndScene()
  	

  Until Quit=1

  DM_ClearGraphics()
  End
:wink:
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

haaaaaa ! ben ok alors :D


merci pour l'exemple :D

il faudrai imperativement mettre ceci dans la Doc alors,
car sinon je ne vais pas etre le seul a te tanner :lol:


Merci Mec :D
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 »

Pas de soucis, et bonne idée pour la doc, cela devrait en effet
répondre à certaines intérogation, et rien de mieux qu'un petit exemple... :)
Force et sagesse...
Répondre