Dreamotion3D

Généralités sur la programmation 3D
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

Je me suis inspiré de ma Camera. En faite c'est POSSIBLE.
En voici la preuve :

Code : Tout sélectionner

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

InitKeyboard() : InitSprite()

; init 3D engine
DM_Graphics3D(600,600, 32,  0, 1)
*meshp = DM_CreateCube()
DM_EntityVisible(*meshp,0)
*mesh = DM_CreateCube(*meshp) 
*camera = DM_CreateCamera()
DM_TranslateEntity(*camera,0,0,-20) 

; light
DM_AmbiantLight(150,  150,  150) 
*light = DM_CreateLight(#D3DLIGHT_POINT,*mesh)
DM_TranslateEntity(*light,0,20,-20) 

DM_RotateEntity(*meshp,50,0,0)

Repeat
       ExamineKeyboard()
       If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow 
              Quit=1
       EndIf

       DM_BeginScene()
       DM_RenderWorld()
       DM_TurnEntity(*mesh,0,1,0)

       If KeyboardReleased(#PB_Key_F12)
              DM_ScreenShot()
       EndIf

       	If KeyboardPushed(#PB_Key_Up)
	 	      DM_TurnEntity(*meshp,1,0,0)
        EndIf
        
        If KeyboardPushed(#PB_Key_Down)
	 	      DM_TurnEntity(*meshp,-1,0,0)
        EndIf

       DM_EndScene()
Until Quit=1

DM_ClearGraphics()
End
Anonyme

Message par Anonyme »

tu n'a pas compris le problème, nous te disons que ce n'est PAS possible sans bidouillé

Imagine que cette scene represente un avion en vol , essaye de le piloter, enclenche un virage a droite et essaye de faire monter le nez en tirant sur le manche

Code : Tout sélectionner

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

InitKeyboard() : InitSprite()

; init 3D engine
DM_Graphics3D(600,600, 32,  0, 1)


*meshp = DM_CreateCube()
DM_ScaleEntity(*meshp,0.5,0.5,2)

*meshp2 = DM_CreateCube(*meshp)
DM_ScaleEntity(*meshp2,10,0.1,0.1)




*camera = DM_CreateCamera()
DM_TranslateEntity(*camera,0,0,-20)

; light
DM_AmbiantLight(150,  150,  150)
*light = DM_CreateLight(#D3DLIGHT_POINT,*mesh)
DM_TranslateEntity(*light,0,20,-20)


Repeat
  ExamineKeyboard()
  If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
    Quit=1
  EndIf
  
  DM_BeginScene()
  DM_RenderWorld()
  ;DM_TurnEntity(*mesh,0,1,0)
  
  If KeyboardReleased(#PB_Key_F12)
    DM_ScreenShot()
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    DM_TurnEntity(*meshp,1,0,0)
  EndIf
  
  If KeyboardPushed(#PB_Key_Down)
    DM_TurnEntity(*meshp,-1,0,0)
  EndIf
  
  If KeyboardPushed(#PB_Key_Right)
    DM_TurnEntity(*meshp,0,0,1)
  EndIf
  
  If KeyboardPushed(#PB_Key_Left)
    DM_TurnEntity(*meshp,0,0,-1)
  EndIf
  
  
  DM_EndScene()
Until Quit=1

DM_ClearGraphics()
End
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

En faite je ne sais même pas si c'est considéré comme de la bidouille ou pas en partant du principe que c'est ma 1er experience avec un moteur 3D (donc pour moi là, c'est normal de faire ca :oops:). Si les 3 lignes et les 3 modifications (Right,Left et le parent de meshp) que j'ai rajouté c'est considéré comme de la bidouille alors je suis d'accord que c'est un manque du moteur.

Code : Tout sélectionner

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

InitKeyboard() : InitSprite()

; init 3D engine
DM_Graphics3D(600,600, 32,  0, 1)

*mesh = DM_CreateCube()
DM_ScaleEntity(*mesh,0.5,0.5,2)
DM_EntityVisible(*mesh,0)

*meshp = DM_CreateCube(*mesh)
DM_ScaleEntity(*meshp,0.5,0.5,2)

*meshp2 = DM_CreateCube(*meshp)
DM_ScaleEntity(*meshp2,10,0.1,0.1)

*camera = DM_CreateCamera()
DM_TranslateEntity(*camera,0,0,-20)

; light
DM_AmbiantLight(150,  150,  150)
*light = DM_CreateLight(#D3DLIGHT_POINT,*mesh)
DM_TranslateEntity(*light,0,20,-20)


Repeat
  ExamineKeyboard()
  If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
    Quit=1
  EndIf
 
  DM_BeginScene()
  DM_RenderWorld()
  ;DM_TurnEntity(*mesh,0,1,0)
 
  If KeyboardReleased(#PB_Key_F12)
    DM_ScreenShot()
  EndIf
 
  If KeyboardPushed(#PB_Key_Up)
    DM_TurnEntity(*meshp,1,0,0)
  EndIf
 
  If KeyboardPushed(#PB_Key_Down)
    DM_TurnEntity(*meshp,-1,0,0)
  EndIf
 
  If KeyboardPushed(#PB_Key_Right)
    DM_TurnEntity(*mesh,0,0,1)
  EndIf
 
  If KeyboardPushed(#PB_Key_Left)
    DM_TurnEntity(*mesh,0,0,-1)
  EndIf
 
 
  DM_EndScene()
Until Quit=1

DM_ClearGraphics()
End
GG
Messages : 239
Inscription : jeu. 09/déc./2004 12:23

Message par GG »

Bonjour,

Des news sur tmyke et son projet dreamotion3d ?
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 »

Cela évolue, et quasi toutes les semaines il y a une petite mise à jours.

La dans la dernière mise a jour, j'ai repris un nouveau moteur de collisions,
donc exit la DLL 'coldet'. Cela a permis en plus d'inserer quelques instructions
simple de gestion de physique (sans pour autant faire appel a l'artillerie
lourde comme PhysX en module externe).

On bosse sur la doc, meme si cela n'avance pas vite, je pense d'ailleurs
remettre pour les francophones et PB l'aide sous forme de CHM dans le Pack.

Le mois a venir aura certainement pour thème les animations, un des gros
point faible de DM3D (plus deux trois petits effets supplémentaires comme
la reflection, etc...)

voila, pas de quoi s'ennuyer en tous les cas... :)
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 »

Un petit code en passant, qui illustre l'emploi de la 2D de PureBasic, avec
la 3D de Dreamotion3D. J'ai pas éprouvé la chose, mais cela peut-etre interressant
pour certains...

Code : Tout sélectionner

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



; Globales

  Global *light.CEntity
  Global	*camera.CEntity
  Global	*mesh.CEntity
  Global	*font.CFont
   
  ;  Init PB modules
  If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
    End
  EndIf

  ; set graphic window 3D
  DM_Graphics3D(800,600,32, 0, 1)
  ; change directory
  SetCurrentDirectory("media/")
  
  *light = DM_CreateLight(3)
  
  ; ---------------------------------------
  ;           create some mesh
  ; ---------------------------------------
  For i = 0 To 30
    *mesh  = DM_CreateCube()
    DM_TranslateEntity(*mesh, 25-Random(50),25-Random(50),Random(4)+5)
    DM_EntityColor(*mesh, Random(255), Random(255), Random(255), 255)
  Next
  ; ---------------------------------------
  ;          create one camera
  ; ---------------------------------------
  *camera   = DM_CreateCamera()
  DM_MoveEntity(*camera, 0,0,-70)
  DM_CameraClsColor(*camera, 125, 125, 125)
  DM_CameraProjRatio(*camera, 800,600, 50000)


  ; ---------------------------------------
  ;           Main loop
  ; ---------------------------------------
   Largeur=200
   Hauteur=200
 Repeat
  	ExamineKeyboard()
  	ExamineMouse() 
  	ShowCursor_(1)
  	
 	
    ; if Escape Key, exit	  	
    If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
  	  Quit=1
    EndIf
  
  	; move camera with dir key and mouse (left click)
    If KeyboardPushed(#PB_Key_Up)
  	 	DM_MoveEntity(*camera, 0,0,4)
    ElseIf KeyboardPushed(#PB_Key_Down) 
  	  DM_MoveEntity(*camera, 0,0,-4)
    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

 

  	; ----------------------------
  	;      Render 3D with DM3D-
  	; ----------------------------
  	DM_BeginScene()
     	DM_RenderWorld()
   	DM_EndScene()
   	; ----------------------------
  	;      Render 2D with PB
  	; ----------------------------
    StartDrawing(WindowOutput(0))
      x = Largeur/2
      y = Hauteur/2
      For Rayon = Hauteur/2 To 10 Step -10
        Circle(x, y, rayon ,RGB(Random(255),Random(255),Random(255)))
      Next Rayon
      DrawText(200,350,"Hello, this is 2D test with PureBasic")
    StopDrawing() ; C'est absolument indispensable quand les opérations de dessins sont terminées !!! Ne jamais l'oublier !

  DM_TurnEntity(*light, 1,0,1)

  Until Quit=1

  DM_ClearGraphics()
  End
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 »

tmyke a écrit :Pour la simulation de vol d'avion, en effet, avec les commandes simple de DM3D, ce n'est pas trop
possible, mais rien n'est infesable, une petite adaptation du code
s'impose, d'ici peux un code pour voir comment faire... :wink:
C'est fait, dans la dernière mise a jour du moteur ( v3.0.8 ) , avec l'exemple n°40 qui
permet de faire voler un petit chasseur. A éprouver, mais les bases y sont...

;)
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tmyke a écrit :
tmyke a écrit :Pour la simulation de vol d'avion, en effet, avec les commandes simple de DM3D, ce n'est pas trop
possible, mais rien n'est infesable, une petite adaptation du code
s'impose, d'ici peux un code pour voir comment faire... :wink:
C'est fait, dans la dernière mise a jour du moteur ( v3.0.8 ) , avec l'exemple n°40 qui
permet de faire voler un petit chasseur. A éprouver, mais les bases y sont...

;)
ha ? tu m'interresse la :D peut etre une mise a jour de PureGolo ? :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tmyke a écrit : ( v3.0.8 ) ,
l'installateur m'indique v3.0.6 !! 8O

Je viens d'essayer l'exemple de l'avion, c'est exactement le comportement que je désirai pour mon LOGO :D

t'as fait fort, Chapeau bas, M'sieur !! :D tu fait un heureux ! :D

Manque plus qua savoir comment ça marche !!
La doc, n'as pas l'air d'avoir beaucoup avancer :? :)
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 le numero de version, c'est une étourderie, c'est bien la v3.0.8.

Pour le code, c'est a éprouver, il y a de plus encore quelques limitations, mais
cela va venir.

La doc est succinte, mais pour l'instant je suis tout seul et donc je ne peux faire
vraiment mieux. Les modifications sont pourtant dedant ... :wink:
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tmyke a écrit :Les modifications sont pourtant dedans ... :wink:
je ne suis pas arrivé a trouver une explication de la fonction

Code : Tout sélectionner

  DM_RotationType(*fighter, #True)
je suppose que cela agit sur la façon dont se comporte l'avion,en attendant une reponse de ta part, je vais faire un test :D

[reedit]

ok je crois avoir compris !!

mon probleme reste entier (mem si une grand amelioration a eu lieu)!!

pourrai tu envisager la possibiliter de faire que :

Code : Tout sélectionner

 DM_TurnEntity(*fighter, 0,******,0, #True)  
que les parametres "*****" puis etre exprimer en degres absolu

genre

Code : Tout sélectionner

 DM_TurnEntity(*fighter, 0,30,0, #True)  
oriente l'avion a 30 degres de l'horizontale ! et ne bouge plus

puis qu'un autre

Code : Tout sélectionner

 DM_TurnEntity(*fighter, 0,0,0, #True)  
ramene l'avion a l'horizontale !! et ne bouge plus

je pense qu'il vaut mieux laisser au programmeur la gestion de l'angle plutot que d'avoir un mode automatique, ou finalement on ne sait a un moment precis quel angle a l'avion !! :D

je prefererai pouvoir faire un truc du genre

Code : Tout sélectionner


angle =angle+1
DM_TurnEntity(*fighter, 0,angle,0, #True) 
plutot qu'un

Code : Tout sélectionner

DM_TurnEntity(*fighter, 0,1,0, #True) 
comme actuellement !!
j'ai l'impression que le Moteur me vole la possibilitée de controler l'angle , ce qui est embetant ! , immagine une tourelle de char , va essayer de viser en ayant que des aproximation de +1,+2,-1,-2 ect...

Suggestion :
pourquoi pas creer une fonction nouvelle
qui permette de changer ce comportement comme on le désire
soit comme actuellement, soit comme je le propose :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 »

Cette fonction existe déjà, c'est DM_RotateEntity(), ou la tu passe une valeur angulaire pour
positionner une Entity.

Pour l'instant, par contre elle ne prends pas en compte les nouveaux systeme d'angle comme
pour DM_TurnEntity(),

mais cela devrais venir dans la semaine... :wink:
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tmyke a écrit : Pour l'instant, par contre elle ne prends pas en compte les nouveaux systeme d'angle comme
pour DM_TurnEntity(),

mais cela devrais venir dans la semaine... :wink:
Cool ! :D n'oublie pas de nous (ME :D ) tenir au courant :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 »

OK, c'est codé, mise en ligne demain si tout va bien ;)
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

haaa! :D
Répondre