Dreamotion3D

Généralités sur la programmation 3D
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 »

au moins cela permet d'une certaine façon de valider la commande, merci Dobro ;)
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tmyke a écrit :au moins cela permet d'une certaine façon de valider la commande, merci Dobro ;)
voici mon petit code de test :D

Code : Tout sélectionner




;  Init different modules
; Fichiers Include 
IncludePath "D:\PureBasic4\Dreamotion3D\SamplesDM3D\include"
;IncludeFile "D:\PureBasic4\Dreamotion3D\SamplesDM3D\include\d3dx9.pbi"
IncludeFile "D:\PureBasic4\Dreamotion3D\SamplesDM3D\include\dreamotion3d.pbi"



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


; Initialize graphic windows
DM_Graphics3D(600,600, 32,  #False, #False)

;  a little camera
*camera.l   = DM_CreateCamera()
DM_TurnEntity(*camera, 25, 0, 0, glob.b=#False) ; baisse la tete de 25°
DM_TranslateEntity(*camera,0,250,-500); monte de 250, et recule de 50

; une lumiere
*light=DM_CreateLight( #D3DLIGHT_POINT ) 
DM_TranslateEntity(*light,-100,250,0) ; la lumiere 1 est a 250 d'altitude, plus haut que les 2 cubes au dessus du cube 1
*light2=DM_CreateLight( #D3DLIGHT_POINT ) 
DM_TranslateEntity(*light2,100,250,0); la lumiere 2 est a 250 d'altitude, plus haut que les 2 cubes au dessus du cube 2
DM_LightRange(*light,1500.0)


; 2 cubes
*cube=DM_CreateCube.l( )  ;on creer le cube 1 ROUGE
DM_TranslateEntity(*cube,-100,0,0); on le deplace a gauche a 50 d'altitude
DM_ScaleMesh( *cube, 100,100, 100) ; on fait un gros cube
DM_EntityColor(*cube, 255, 0, 0, 0)

*cube2=DM_CreateCube.l( )  ; on creer le cube 2  BLEU
DM_TranslateEntity(*cube2,200,0,0); on le deplace a droite de l'autre a 0 d'altitude, mais il fait 100 de haut !!
DM_ScaleMesh( *cube2, 100,100, 100) ; on fait un gros cube
DM_EntityColor(*cube2, 0,0,255, Alpha.b)

DM_AddMesh(*cube, *cube2, copy.b=#True) ; d'apres Doc on copie le rouge sur le bleu (copie de cube dans cube2)

DM_FreeEntity(*cube2) ; on efface le cube 2 , reste le cube 1 (sur la gauche de la camera)
;DM_FreeEntity(*cube1) ; on efface le cube 1 , reste le cube 2 (sur la droite de la camera)


Repeat 
    ExamineKeyboard() 
    ExamineMouse() 
    ShowCursor_(1) 
    
    ; *****************************************************************************
    ;-3D Control Camera  pendant dessin
    If KeyboardReleased(#PB_Key_Escape) Or  MouseButton(#PB_MouseButton_Left) 
        Quit=1  
    ElseIf KeyboardPushed(#PB_Key_Up ) 
        poz=1
        DM_MoveEntity(*camera, 0,0,0.08); on recule/avance la camera
    ElseIf KeyboardPushed(#PB_Key_Down )  
        poz=-1 
        DM_MoveEntity(*camera, 0,0,-0.08); on recule/avance la camera
    ElseIf KeyboardPushed(#PB_Key_Left ) 
        DM_MoveEntity(*camera, -0.08,0,0); on recule/avance la camera
        
    ElseIf KeyboardPushed(#PB_Key_Right ) 
        DM_MoveEntity(*camera, 0.08,0,0); on recule/avance la camera
    ElseIf KeyboardPushed(#PB_Key_PageUp) 
        DM_MoveEntity(*Camera, 0,0.08,0); eleve la camera 
    ElseIf KeyboardPushed(#PB_Key_PageDown ) 
        DM_MoveEntity(*Camera, 0,-0.08,0); baisse la camera   
    EndIf
    DM_TurnEntity(*Camera, MouseDeltaY()/8, MouseDeltaX()/8,0)  
; *****************************************************************************
; ***************************************************************************** 
    
    ;      Render 
    DM_BeginScene() 
    DM_RenderWorld() 
    DM_EndScene() 
Until Quit=1

DM_ClearGraphics()

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 »

Salut. Ok, bon j'ai repris un peu ton code pour mieux symboliser la chose.
En fait, quand tu copie un mesh dans un autre, tu les fait au niveau des coordonnées
de Vertices. Dans ton cas, tu déplace tes entity par les instructions générales, qui n'on un effet
que sur le rendu de sortie, mais qui ne change pas les coordonnées physiques des éléments,
q'ou le soucis que tu as parfois je pense sur le résultat.
(d'ailleurs je vais voir pour changer cela)

Voici le meme code, mais en jouant sur les coordonnée physique des mesh
(DM_TranslateMesh au lieu de DM_TranslateEntity par exemple)
Dans l'ancien code tu ajoutais deux cubes de meme dimension avec les meme coordonnées
d'ou l'impression que la copy ne se faisait pas, vue que tu n'en vois qu'un, l'autre étant maqué par le premier...
Par contre, il semble que j'ai un bug sur la fonction DM_TranslateMEsh, qui ne semble ne pas fonctoinner
si on la place avant DM_ScaleMesh()... je verais ça ce soir.

Code : Tout sélectionner

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


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


; Initialize graphic windows
DM_Graphics3D(800,600, 32,  0,1)

;  a little camera
*camera.l   = DM_CreateCamera()
DM_TurnEntity(*camera, 25, 0, 0, glob.b=#False) ; baisse la tete de 25°
DM_TranslateEntity(*camera,0,250,-500); monte de 250, et recule de 50

; une lumiere
*light=DM_CreateLight(3 )


; 2 cubes
*cube=DM_CreateCube.l( )  ;on creer le cube 1 ROUGE
DM_ScaleMesh( *cube, 100,100, 100) ; on fait un gros cube
DM_TranslateMesh(*cube,-100,0,0); on le deplace a gauche a 50 d'altitude
DM_EntityColor(*cube, 255, 0, 0, 255)

*cube2=DM_CreateCube()  ; on creer le cube 2  BLEU
DM_ScaleMesh( *cube2, 100,100, 100) ; on fait un gros cube
DM_TranslateMesh(*cube2,150,0,0); on le deplace a droite de l'autre a 0 d'altitude, mais il fait 100 de haut !!
DM_EntityColor(*cube2, 0,0,255, 255)

DM_AddMesh(*cube, *cube2, #True) ; d'apres Doc on copie le rouge sur le bleu (copie de cube dans cube2)


DM_TranslateEntity(*cube2, 0,50,0)
DM_FreeEntity(*cube) ; on efface le cube 2 , reste le cube 1 (sur la gauche de la camera)
;DM_FreeEntity(*cube2) ; on efface le cube 1 , reste le cube 2 (sur la droite de la camera)


Repeat
    ExamineKeyboard()
    ExamineMouse()
    ShowCursor_(1)
   
    ; *****************************************************************************
    ;-3D Control Camera  pendant dessin
    If KeyboardReleased(#PB_Key_Escape) Or  MouseButton(#PB_MouseButton_Left)
        Quit=1 
    ElseIf KeyboardPushed(#PB_Key_Up )
        poz=1
        DM_MoveEntity(*camera, 0,0,0.08); on recule/avance la camera
    ElseIf KeyboardPushed(#PB_Key_Down ) 
        poz=-1
        DM_MoveEntity(*camera, 0,0,-0.08); on recule/avance la camera
    ElseIf KeyboardPushed(#PB_Key_Left )
        DM_MoveEntity(*camera, -0.08,0,0); on recule/avance la camera
       
    ElseIf KeyboardPushed(#PB_Key_Right )
        DM_MoveEntity(*camera, 0.08,0,0); on recule/avance la camera
    ElseIf KeyboardPushed(#PB_Key_PageUp)
        DM_MoveEntity(*Camera, 0,0.08,0); eleve la camera
    ElseIf KeyboardPushed(#PB_Key_PageDown )
        DM_MoveEntity(*Camera, 0,-0.08,0); baisse la camera   
    EndIf
    DM_TurnEntity(*Camera, MouseDeltaY()/8, MouseDeltaX()/8,0) 
; *****************************************************************************
; *****************************************************************************
   
    ;      Render
    DM_BeginScene()
    DM_RenderWorld()
    DM_EndScene()
Until Quit=1

DM_ClearGraphics()

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

Message par Backup »

tmyke a écrit : il semble que j'ai un bug sur la fonction DM_TranslateMEsh, qui ne semble ne pas fonctionner
si on la place avant DM_ScaleMesh()... je verais ça ce soir

ha bah! si en plus je te permet de trouver des bug, s'en m'en rendre compte !! :lol: :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

a propos du gros plantage memoire, il semblerai bien que cel arrive a la creation d'objet , j'ai eu le probleme sur un "*ll = DM_CreateCube()"
"erreur memory acces" !

je crois que la liberation de la memoire, n'est pas correcte
pourtant j'utilise DM_ClearGraphics()
a 2 endroits !! un avant d'ouvrir l'ecran 3D (en fenetre chez moi)
et un a la fermeture de l'ecran

j'ai fini par en mettre 2 car ça déconne toujours
surtout sur les tres tres gros objet (je ne sait pas comment compter les meshs... ) , je vais chercher :)




n'oublie pas que cela reste dans le cadre : ouverture d'une fenetre avec Dreamotion dedans ()

Code : Tout sélectionner

 DM_Graphics3DGadget(largeur_ecran, hauteur_ecran, WindowID, 1)
et dessins,refermeture, et reouverture, ect ....

bref peut etre est-ce cette particularité qui met a mal les libérations de ressource system ... ??
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 ragarde cela c e soir, et je met a l'épreuve la chose...
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tmyke a écrit :Je ragarde cela c e soir, et je met a l'épreuve la chose...
n'hesite pas en plus a lui faire creer plein d'objets pour que ça prenne un max de ram :D (style 90000 cubes) :lol:

en faisant ça tu vas le provoquer, le bug va sortie de sa tanière :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 »

Bon, effectivement, j'ai bien un soucis avec la libération de certaines ressources. Je n'ai pas pu régler ce soir le soucis, mais d'ici au WE prochain,
cela devrais etre possible.
Je m'absente quelques jours, je verais cela a mon retour ... ;)
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tmyke a écrit :Bon, effectivement, j'ai bien un soucis avec la libération de certaines ressources. Je n'ai pas pu régler ce soir le soucis, mais d'ici au WE prochain,
cela devrais etre possible.
Je m'absente quelques jours, je verais cela a mon retour ... ;)
haaaa ! :D ça faisait un moment que je criais aux loups, je commençai a me demander si c'était pas que mon ordinateur :lol:

ouf ! :D

faut dire que mon PureGolo, avec le nombre d'objets qu'il peut créer en un rien de temps, et les rotations, et tout l'cirque ça fait un bon prg de test :D

apres j'attaquerai les textures :lol:
ça va ? t'as pas trop mal aux cheveux ? :lol:
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Il y a les opérations booléennes de volumes sur ce moteur 3D pour les adapter sur le PureGolo?
Anonyme

Message par Anonyme »

Dobro, ca serais sympa de pouvoir manipuler la caméra via tes scripts, a moi que cela soit déjà possible ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Cpl.Bator a écrit :Dobro, ca serais sympa de pouvoir manipuler la caméra via tes scripts, a moi que cela soit déjà possible ?
non ça n'est pas possible, mais tu me donne une idée , en tout cas :)

tu pensais a quoi exactement ?

car pour l'instant le but suprême de PureGolo étant de faire effectuer des dessin a une "tortue"

toute les manipulations se font sur l'objet "*tortue3D"
il me suffirait de remplacer le pointeur actuel par une variable ,
contenant le pointeur choisi ...
et du coup lui passer "*camera" a la place pour voir tout les manipulations effectuées par la camera, rien de bien compliquer a mettre en oeuvre :D
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Si on peut "scripter" le déplacement de la camera, ça peut être intéressant de créer une vidéo du parcours. De plus, avec ce procédé, peut importe le temps du rendu de chaque image, la vidéo sera toujours nickel. Tu peux solliciter mon aide en MP, si tu en as besoin pour faire cela. :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

erix14 a écrit :Si on peut "scripter" le déplacement de la camera, ça peut être intéressant de créer une vidéo du parcours. De plus, avec ce procédé, peut importe le temps du rendu de chaque image, la vidéo sera toujours nickel. Tu peux solliciter mon aide en MP, si tu en as besoin pour faire cela. :wink:
:D Merci

a savoir que Puregolo a deja une routine qui permet de creer des video
mem en Divx !! (Merci Nico)
mais pour l'instant je ne l'utilise qu'en 2D :D

marche deja depuis plusieurs version
sauve_avi "chemin\nom de l'image",type de compression
save_avi "chemin\nom de l'image",type de compression

Cette commande va transformer les images contenus dans le dossier animation en un fichier AVI compressé
cette commande ne peut fonctionner que si dans le meme listing
la commande sauve_image "xxxx.ani" a ete utilisée avant !!
car les images utilisées pour creer l'AVI sont mis dans un buffer par
la commande sauve_image "xxxx.ani"....
les types de compression peuvent etre : je vais ajouter un exemple de compression pour un fichier video

divx311 <-- meilleur taux de compression 30 k
divx4 <-- le divx 4.12 44 k
indeov5 <-- indeoV5 73 k
cinepak <-- cinepak 799 k
msvc <-- microsoft video 1 1480 k
il est noter que si le codec n'est pas present le fichier ne sera pas crée !!

Ex :

let taille=10
FPOS 1,580
pour [carre],taille
repete 4
AV taille
TD 90
fin_repete
fin_pour

repete 25
couleur 255,255,255
[carre],taille
sauve_image "test.ani"
couleur 0,0,0
[carre],taille
let taille={taille}+10
fin_repete

;on rejoue l'animation
repete 2
joue_image 1
joue_image 0
fin_repete
sauve_avi "carre.avi",divx311
:D , il est prevu d'adapter ceci pour la 3D :D Merci
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tmyke a écrit :Bon, effectivement, j'ai bien un soucis avec la libération de certaines ressources. Je n'ai pas pu régler ce soir le soucis, mais d'ici au WE prochain,
cela devrais etre possible.
Je m'absente quelques jours, je verais cela a mon retour ... ;)

t'a trouvé ? 8O :?
Répondre