Dreamotion3D

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

Message par Backup »

j'ai un problem avec Dreamotion 3D

j'ai deux fenetres ouverte en meme temps !

une fenetre avec éditeur
une fenetre graphique (ecran standard du Purebasic)

les deux cohabitent sans problèmes , on passe de l'une a l'autre
(le cas du listing ci dessous tel quel ! !)

impossible de faire la même chose avec l'écran de Dreamotion3D !! 8O

dans le listing ci dessous

commente les lignes 30,34,35
et Décommente les lignes 29,36,37

pour voir le problème !! :)

j'ai absolument besoin de faire cohabiter un éditeur avec le monde 3D
pour mon langage "PureGolo" :?

le code :

Code : Tout sélectionner

 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"


Declare ecran3d()
Declare Open_Window_0()
Declare ecran_graphique()

;- Window Constants
;
Enumeration
    #Window_0
    #ecran_graphique
    #ecran3D
EndEnumeration

;- Gadget Constants
;
Enumeration
    #Editor_0
EndEnumeration
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
    End 
EndIf


Open_Window_0()
;ecran3d() ; ecran 3D  OU ça 1 !!!
ecran_graphique() ; ecran Graphique OU ça 2!!!

End
Procedure Open_Window_0()
    OpenWindow(  #ecran_graphique,0,0,800,600,"ecran",#PB_Window_SystemMenu) ; ecran Graphique OU ça 1 !!!
    OpenWindowedScreen(WindowID(  #ecran_graphique),0,0,800,600,1,1,1)  ; ecran Graphique OU ça 1 !!!
    ;Handle=DM_Graphics3D(1024,768, 32,  #False, #True) ; ; ecran 3D OU ça 2 !!!
  ;  *Camera = DM_CreateCamera(#Null) ;  ecran 3D OU ça 2 !!!
    
    
    If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
        If CreateGadgetList(WindowID(#Window_0))
            EditorGadget(#Editor_0, 120, 50, 350, 220)
            
        EndIf
    EndIf
    Repeat ; Start of the event loop 
        Event = WaitWindowEvent() ; This line waits until an event is received from Windows 
        WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures 
        GadgetID = EventGadget() ; Is it a gadget event? 
        EventType = EventType() ; The event type 
        ;You can place code here, and use the result as parameters for the procedures
        If Event_type= #PB_EventType_LeftClick 
         ;   SetActiveWindow(#ecran_graphique) ; on réactive l'ecran graphique
        EndIf
        
        If Event = #PB_Event_Gadget 
            If GadgetID = #Editor_0 
            EndIf
        EndIf 
        
    Until Event = #PB_Event_CloseWindow ; End of the event loop
    
EndProcedure



Procedure ecran3d()

Repeat   
   
    ExamineKeyboard() 
    ExamineMouse() 
    
    If 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    

    
   
    DM_TurnEntity(*Camera, MouseDeltaY()/8, MouseDeltaX()/8,0) 
 
    
    
    
    ;      Render  c'es ce qui permet de voir le resultat !
    DM_BeginScene() 
    DM_RenderWorld() 
    DM_EndScene() 
    ; *************************************
Until KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow 
DM_ClearGraphics()
ShowCursor_(1) 
EndProcedure

End


Procedure ecran_graphique() 
    Repeat   
        Event=WindowEvent()
           Delay(2)
        ExamineKeyboard() 
        ExamineMouse() 
        
       If KeyboardPushed(#PB_Key_Up ) 
          
        ElseIf KeyboardPushed(#PB_Key_Down )  
          
        ElseIf KeyboardPushed(#PB_Key_Left )  
        ElseIf KeyboardPushed(#PB_Key_Right )  
        EndIf       
        Debug Event
        If MouseButton(1) 
        EndIf  
        
        
        StartDrawing( ScreenOutput())  
        StopDrawing() 
        
        
        FlipBuffers():; affiche l'ecran
        ClearScreen(RGB(0, 0, 0)) :;efface l'ecran
        
        
    Until Event=#PB_Event_CloseWindow Or  KeyboardPushed( #PB_Key_Escape)   ; press touche droit
   
EndProcedure

End
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, voici un petit code qui fait a peu près ce que tu souhaites, en
reprenant celui que tu donnes au dessus:

Code : Tout sélectionner

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

Global  *cube.CEntity

Declare ecran3d()
Declare Open_Window_0()
Declare ecran_graphique()

;- Window Constants
;
Enumeration
    #Window_0
    #ecran_graphique
    #ecran3D
EndEnumeration

;- Gadget Constants
;
Enumeration
    #Editor_0
EndEnumeration
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
    End
EndIf


Open_Window_0()
;ecran3d() ; ecran 3D  OU ça 1 !!!
ecran_graphique() ; ecran Graphique OU ça 2!!!

End


Procedure Open_Window_0()
    OpenWindow(  #ecran_graphique,0,0,640,480,"ecran",#PB_Window_SystemMenu) ; ecran Graphique OU ça 1 !!!
    OpenWindowedScreen(WindowID(  #ecran_graphique),0,0,800,600,1,1,1)  ; ecran Graphique OU ça 1 !!!

    
    DM_Graphics3DGadget(640, 480, WindowID(  #ecran_graphique), 1)   
    *Camera = DM_CreateCamera()
    DM_CameraClsColor(*camera, 50, 50, 50)
    DM_TranslateEntity(*Camera,0,0,-10)
    *cube=DM_CreateCube()
    DM_CreateLight(3)
    
    
    ; deuxième fenetre
    If OpenWindow(#Window_0, 640, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
        If CreateGadgetList(WindowID(#Window_0))
            EditorGadget(#Editor_0, 120, 50, 350, 220)      
        EndIf
    EndIf 
EndProcedure



Procedure ecran_graphique()
    Repeat   
        Event=WindowEvent()
        ;   Delay(2)
        ExamineKeyboard()
        ExamineMouse()
       
      DM_TurnEntity(*cube, 0,1,0)
     	DM_BeginScene()
    	  DM_RenderWorld()
    	DM_EndScene()

    Until Event=#PB_Event_CloseWindow Or  KeyboardPushed( #PB_Key_Escape)   ; press touche droit
   
EndProcedure

End
Après pour la gestion des evenements, pas toujours évident de sauter d'une
fenetre a l'autre, mais dans la gestion de ce genre de chose, tu es beaucoup plus fort que moi...

sinon, dans le pack tu as le sample qui s'apelle '14-Gadget.pb' qui est sympa
et qui montre comment intégrer dans un systeme de fenetre et gadget une
fenetre DM3D (des fois c'est mieux une fenetre principale avec un sous ecran graphique et sur le coté les boutons et autres menus...)
:wink:
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ha bah oui !
tu me la sort d'ou cette commande "DM_Graphics3DGadget" :lol:

c'est sur , :D vivement que la Doc soit fini :D :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ouuuaaa :D

rien qu'avec cette petite fonction et pratiquement sans avoir changé quoi que ce soit a mon prg , j'ai pu faire cohabiter le monde 3D avec ma sortie 2D

ce qui m'ouvre une opportunité genial, puisque juste en ayant une option
dans l'interface on pourra avoir la sortie direct sur l'ecran 2D ou 3D
a la demande :D

j'avais peur de devoir modifier en profondeur la structure de mon interpreteur pour adapter la 3D dessus, ben meme pas :lol: !!

ça va etre bien plus simple que j'aurai Crus !! :D

Merci encore pour ce moteur 3D :D c'est de la Balle ! :D
Vous arretez pas surtout hein ? :? meme si l'n vous pourri la vie avec
nos Bugs, vous allez enrhumer OGRE ! :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 »

Dobro a écrit :...meme si l'n vous pourri la vie avec
nos Bugs...
c'est un échange de bon procedé finalement quand t'y pense.
C'est en codant avec DM3D que vous faites remonter les info et les bug,
que nous, on corrige, que le moteur s'améliore, ce qui amène
d'autre a coder avec, etc...

A chaque fois, c'est une valeur ajoutée des deux cotés, meme si DM3D n'en est qu'à ses début...


:wink:
Force et sagesse...
Anonyme

Message par Anonyme »

Salut Tmyke ! je vois que cela continue à bien avancé !
je récupère d'ici à une 15'aine de jour le net, mais je n'aurais plus trop de temps pour la prog, sauf les wiquaine :wink:
un repository + turtoise SVN serais le top pour les mise à jour de ton moteur.

@++
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 »

Tu récupère le net dans une 15ene, super, meme si ce n'est que le
WE pour quelques echanges, c'est déjà pas mal.
Pour le systeme de mise a jour une fois la Release sortie, faudra
que l'on se penche dessus, ainsi qu'un véritable prog d'installation...
:wink:
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 »

Teins, puisque j'en parle voici le pack avec un petit installeur maison,
ce qui devrait facilité l'install:

http://www.dreamotion3d.com/_downloads/ ... s/pack.rar

http://www.dreamotion3d.com/_downloads/ ... module.rar

a essayer pour confirmer que cela fonctionne bien chez vous. Si c'est le cas,
alors je le mettrait en ligne définitivement...

La prochaine étape sera d'intégrer le zip dans le code pour ne plus avoir a décompresser avant l'instal...[/url]
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

j'ai une erreur au lancemant de "Installeur.exe"
L'aplication n'as pas reussi a s'initialiser correctement (0xc0000135)
Cliquez sur ok pour arreter l'application
:?
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 »

Je n'avais pas pris la peine d'essayer sur mes autres machines, mais
j'ai aussi le soucis. Bizarre, cela tourne sur une becanne, pas sur les autres,
des fois, je me pose des questions...

Copie a revoir donc, je redonnerais des nouvelles de l'installateur quand cela sera mieux finalisé...

Merci quand meme... :wink:
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 »

nouvelle tentative, cette fois cela tourne sur mes autre bécannnes, alors...

http://www.dreamotion3d.com/_downloads/ ... kagePB.rar

http://www.dreamotion3d.com/_downloads/ ... dulePB.rar
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Sublime le Logo, !! :D

l'install a l'air de fonctionner !!

je te passe un code, qui retrouve tout seul le chemin du Purebasic
(l'endroit ou l'utilisateur l'a installé :D)

le code


Procedure.s GetPB_DirectoryInstallation()
  
  Buffer$ = Space (10000) : BufferSize = Len (Buffer$) - 1
  
   ; Windows NT/XP
   If GetVersion_ () & $FF0000
     If RegOpenKeyEx_ ( #HKEY_CLASSES_ROOT , "Applications\PureBasic.exe\shell\open\command" , 0, #KEY_ALL_ACCESS , @key) = #ERROR_SUCCESS
       If RegQueryValueEx_ (key, "" , 0, @type, @Buffer$, @BufferSize) = #ERROR_SUCCESS
        OutputDirectory$ = GetPathPart ( Mid (Buffer$, 2, Len (Buffer$) - 7))
       EndIf
     EndIf
   Else ; The same for Win9x
     If RegOpenKeyEx_ ( #HKEY_LOCAL_MACHINE , "Software\Classes\PureBasic.exe\shell\open\command" , 0, #KEY_ALL_ACCESS , @key) = #ERROR_SUCCESS
       If RegQueryValueEx_ (key, "" , 0, @type, @Buffer$, @BufferSize) = #ERROR_SUCCESS
        OutputDirectory$ = GetPathPart ( Mid (Buffer$, 2, Len (Buffer$) - 7))
       EndIf
     EndIf
   EndIf
  
   ProcedureReturn OutputDirectory$
EndProcedure


Debug GetPB_DirectoryInstallation()
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Encore plus simple :)

Code : Tout sélectionner

Debug #PB_Compiler_Home
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
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 »

excelent ton code, je vais voir pour l'intégrer, mais j'ai peur qu'il y est
comme moi certains qui bouge le rep de PB.
Le miens par exemple a changé d'endroit, et donc la base de registre dans
ce cas induit en erreur, mais bon, des comme moi il doit pas y en avoir
des masses...
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

comtois a écrit :Encore plus simple :)

Code : Tout sélectionner

Debug #PB_Compiler_Home
et revoici ce que Dri t'avais repondu Comtois
Dr. Dri a écrit :@comtois
ton code n'est valable qu'en test... si jamais tu distribue un exe ca ne sera plus vrai vu que chacun l'installe où il veut ^^

Dri
:)
Répondre