Dreamotion3D

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

Message par Backup »

voici donc ce que je voulais faire :D

en ayant la methode c'est plus simple :D

dit moi si cela marche chez toi 8O

on peut changer la phrase du debut :D

ce peut etre une solution pour creer des niveaux
en utilisant un dessin, qui represente des immeuble ou bien des murs

il suffirai alors de creer le dessin a plat , au lieu de verticalement comme ici :D


Merci encore ta solution me reconcilie avec Dreamotion :D





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

Text$= "Dreamotion3d Votre Moteur 3D " ; < changez ce text : D

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

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

Dim cube.cube(1024*15)

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,Text$ , 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(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, 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(nb)\index, 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.6
        translatey.f=0
        translatez.f=0
        
         For nume=1 To nb
            DM_TranslateEntity(cube(nume)\index, translatex, translatey, translatez, 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
    
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 marche impec, très sympa comme code, et comme tu le dis, c'est
un principe a retenir, car pour constituer des formes ou des niveaux, cela
peut etre très pratique, et très utile.

Ton code m'a en plus permis de constater qu'il y avait interférence entre une
macro DX9 et une fonction PB -> DrawText().
J'ai donc corrigé le bug dans le fichier 'pbi' du pack pour éviter désormais le
soucis. En ligne d'ici le WE prochain...

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

Message par Backup »

tmyke a écrit : Ton code m'a en plus permis de constater qu'il y avait interférence entre une
macro DX9 et une fonction PB -> DrawText().
c'est pour ça que je scan d'abord la phrase qui va servir pour les dessins 3D

et qu'en suite je démarre Dreamotion3D

car si l'on démarre Dreamotion3D au debut du listing ça plante ? :D
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Par curiosité ,tu utilises quelle version de PhysX ? la toute dernière ou une autre ?
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 »

En fait j'utilise une version assez ancienne, le 2.3.1, car par la suite,
les versions de PhysX qui sont sorties nescessitent l'installation
des drivers PhysX (un peu comme DirectX) pour pouvoir tourner.
Plutot lourd pour quelqu'un qui veux juste faire un peu de physique après
avoir chargé le module physique pour DM3D.
Mais, j'avoue que parfois c'est tentant d'embayer sur la dernière version,
qui apporte forcement quelques améliorations...
Ils en sont a la 2.7.0 ...
Force et sagesse...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tmyke a écrit :En fait j'utilise une version assez ancienne, le 2.3.1, car par la suite,
les versions de PhysX qui sont sorties nescessitent l'installation
des drivers PhysX (un peu comme DirectX) pour pouvoir tourner.
Plutot lourd pour quelqu'un qui veux juste faire un peu de physique après
avoir chargé le module physique pour DM3D.
Mais, j'avoue que parfois c'est tentant d'embayer sur la dernière version,
qui apporte forcement quelques améliorations...
Ils en sont a la 2.7.0 ...
ok merci je vais essayer de retrouver la même que toi ,mais apparemment la plus petite version c'est la 2.6.2 ?
Il faut peut-être les dernières versions pour trouver les commandes pour gérer une voiture ?

Je te mets un extrait du tut que j'ai trouvé
1 Introduction
In this chapter, we learn how to contruct vehicles. The basic building blocks of a vehicle are rigid body shapes (box, sphere, capsule, convex) for its chassis, and wheel shapes for its wheels. The wheel shape is a shape specially constructed for vehicles. It is an entity that “rolls” (actually, “slides”) on the ground with a certain friction and springiness. You can get it to supply forces to (“drive”) an actor it is attached to depending on its contact with the ground and other objects. You can steer it and brake it as well.

In this lesson, we will build and actor from one rigid body shape and one wheel.



2 Wheel Shapes
We recently introduced an all new "Wheel Shape", NxWheelShape, to complement the current list of plane, box, sphere, capsule, convex, and trimesh shapes. This shape is a special shape used for simulating a car wheel. You can still use the capsule method described in the 2.2 “Lesson 309: Raycast Car”, but once we release 2.3.1, it is recommended you move over to the new shape.

NxWheelShape has a radius, width, suspension travel distance, and suspension spring. Suspension and contact of the wheel with the ground works like this. The -Y axis of the wheel shapeshould be directed toward the ground. A ray is cast from the shape's origin along the -Y axis. When the ray strikes something, and the distance is:

1. Less than wheelRadius from the shape origin: a hard contact is created
2. Between wheelRadius and (suspensionTravel + wheelRadius): a soft suspension contact is created
3. Greater than (suspensionTravel + wheelRadius): no contact is created.

Thus at the point of greatest possible suspension compression the wheel axle will pass through at the shape's origin. At the point greatest suspension extension the wheel axle will be a distance of suspensionTravel from the shape's origin.

The suspension's targetValue is 0 for real cars, which means that the suspension tries to extend all the way. Otherwise one can specify values [0,1] for suspensions which have a spring to pull the wheel up when it is extended too far. 0.5 will then fall halfway along suspensionTravel.

The +Z axis is the 'forward' direction of travel for the wheel. -Z is backwards. The the wheel rolls forward when rotating around the positive direction around the X axis.

A positive wheel steering angle corresponds to a positive rotation around the shape's Y axis. (Castor angles are not modeled.)

The coordinate frame of the shape is rigidly fixed on the car.

The wheel shape also has a notion of wheel mass, steer angle, axle speed, motor torque, and brake torque.
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 »

Très interessant en effet, va faloir que je me penche sur le truc, et que
je décortique cela.
La plus petite version chargeable est en effet une des version 2.6.x.
Je vais voir cela, et comment faire cohabiter le tuto 2.6.x
avec un code 2.3.x. Je pense que cela va pas etre facile, mais je vais essayer...
Force et sagesse...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Je viens de télécharger la 2.6.2 , les samples sont sympas :)

Par contre je suis perdu dans la doc et dans les codes sources, heureusement que tu nous as simplifié tout ça pour qu'on puisse tout de même faire joujou :)
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 »

Oui. D'une manière générale, les moteur physiques (que ce soit PhysX ou les autres d'ailleurs)
ne sont pas d'une mise en oeuvre facile. La physique dans l'espace étant déjà en
soit un sujet pas forcement toujours évident...
Dans le cas de PhysX, un bon apprentissage est nescessaire, mais une fois
que tu intégré les grands principes, alors tu arrives a peut près a faire ce que tu souhaite avec...
Force et sagesse...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Bon je m'aperçois que je me suis trompé de post pour parler du moteur physique, alors tant pis je continue ici .
En fait j'utilise une version assez ancienne, le 2.3.1, car par la suite,
les versions de PhysX qui sont sorties nescessitent l'installation
des drivers PhysX (un peu comme DirectX) pour pouvoir tourner.
Plutot lourd pour quelqu'un qui veux juste faire un peu de physique après
avoir chargé le module physique pour DM3D.
Mais, j'avoue que parfois c'est tentant d'embayer sur la dernière version,
qui apporte forcement quelques améliorations...
Ils en sont a la 2.7.0 ...
C'est un fichier de plus à installer , pas si lourd que ça :) et si ça permet de ne pas copier soi même les Dll dans le répertoire Windows/System32 c'est aussi bien :)
Enfin tu fais comme tu le sens, mais pour moi ce n'est pas un problème d'avoir un fichier drivers à installer. ça peut être gênant si tu n'as pas le droit de le diffuser avec ton moteur(je ne connais pas les droits d'utilisation et de diffusion ?), en clair s'il faut s'inscrire sur le site ageia pour télécharger les drivers ça peut être un frein important, sinon c'est juste quelques Mo de plus, mais c'est surtout beaucoup de boulot en plus pour toi , donc je comprends si tu ne te précipites pas sur la dernière version :)
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 »

Pour l'utilisation, PhysX a changé de status dernièrement, donc cela ne devrait
plus etre un gros problème, meme si par précaution je me renseignerais plus
précisement. Quand a l'install des drivers, je n'avais pas vue les choses comme
cela avec les DLL, et dans le fond tu as plutot raison. Je vais donc investiguer la dessus
dès ce WE (la je veux finir les shadows). Quand au travaille, il est possible qu'il ne soit pas
si important, car les version de cher PhysX qui se succèdent, gardent toujours
cette compatibilité ascendante, donc pas de gros recodage important normalement...
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 »

Bon, j'ai regardé les avancées du dernier package, et il est vrai qu'elles sont
asser importantes, pour ne pas dire plus, et c'est très tentant d'embrayer dessus.
Mais, pour pouvoir en porfiter, il faut installer les drivers, tu pense a priori
que cela ne représente pas un soucis, mais le fichier drivers fait quand meme
32 Mo, donc j'ai peur que cela freine certaines ardeurs.
Ou alors, pour motiver, faudra que je donne des screenshots qui déchire pour
pousser les éventuels utilisateur a faire le pas...

dans ce genre la ...

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

Message par Backup »

c'est la premiere fois que je vois un moteur physic gerer le sable ! 8O
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Ah ! C'est du sable, car je n'arrivais pas à déterminer ce que c'était !
Je penchais vers un tapis qui se déchirait !
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 bien un tapis qui se déchire après l'impact d'un cube... :)
Force et sagesse...
Répondre