Page 4 sur 62

Publié : dim. 01/oct./2006 17:06
par comtois
:oops: je n'avais pas vu :

Code : Tout sélectionner

DM_Graphics3D(1280, 1024, 32, 1, 1)
Alors effectivement ça plante aussi chez moi avec cette ligne .

Par contre j'avais fait ça :

Code : Tout sélectionner

DM_Graphics3D(1280, 1024, 32, 0, 1)


là ça fonctionne en mode fenêtré.

Et si je change ta procédure

Code : Tout sélectionner

Procedure DM_Graphics3D(Width.l, Height.l, Depth.l,  FullScreen.c, Sync.c)
  ;DM_hwnd = OpenWindow(0, 0, 0, Width, Height, "Dreamotion3D...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ;OpenWindowedScreen(WindowID(0), 0, 0, Width, Height, 0, 0, 0)
  OpenScreen(Width, height, 32, "Dreamotion3D...")
     DM_hwnd = ScreenID()
     DM_InitGraphics(DM_hwnd, Depth, Fullscreen ,sync)
     *DM_d3d9    =    DM_GetD3D9()
     *DM_d3dDev9 =    DM_GetDevice9()
     DM_WIDTH   =   Width
     DM_HEIGHT   =   Height
     ProcedureReturn DM_hwnd
EndProcedure
ça fonctionne en mode plein écran 1280x1024

Publié : dim. 01/oct./2006 17:16
par tmyke
Merci comtois, tu viens d'apporter une partie de la reponse, je vais
refondre ma routine, il faut que je différencie le mode fenetre et le mode
plein ecran.
Et que je vois pour récuperer en plein ecran la fleche souris et me débarasser
de se putai... de sablier

;)

Publié : dim. 01/oct./2006 17:43
par tmyke
Voici la routine qui devrait bien améliorer les choses:

Code : Tout sélectionner

Procedure DM_Graphics3D(Width.l, Height.l, Depth.l,  FullScreen.c, Sync.c)
  If FullScreen <>0
    OpenScreen(Width, height, Depth, "Dreamotion3D...")
    DM_hwnd = ScreenID()
    DM_InitGraphics(DM_hwnd, Depth, Fullscreen ,sync) 
  Else
    DM_hwnd = OpenWindow(0, 0, 0, Width, Height, "Dreamotion3D...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    OpenWindowedScreen(WindowID(0), 0, 0, Width, Height, 0, 0, 0)
	  DM_InitGraphics(DM_hwnd, Depth, Fullscreen ,sync)
  EndIf
	  *DM_d3d9 	= 	DM_GetD3D9()
	  *DM_d3dDev9 = 	DM_GetDevice9()
	  DM_WIDTH	=	Width
	  DM_HEIGHT	=	Height
	  ProcedureReturn DM_hwnd
EndProcedure

Publié : dim. 01/oct./2006 18:12
par erix14
Merci, ça marche nickel!
J'ai changé la gestion de la caméra

Code : Tout sélectionner

     DM_TurnEntity(*camera, MouseDeltaY()/8, MouseDeltaX()/8, 0)
On se croirait vraiment dans un bon jeu de FPS.
J'attends le moteur physique avec impatience :D

Publié : dim. 01/oct./2006 19:09
par Guimauve
@tmyke

Le document promis sur l'attraction gravitationnelle vient d'être envoyé.

A+
Guimauve

Publié : lun. 02/oct./2006 21:33
par comtois
J'ai un problème de texture dans l'exemple 2 - HLSL

j'avais déjà rencontré le problème lors de mon premier test de tes démos.
Mais ensuite je n'avais pas réussi à reproduire le phénomène, et là ça recommence.
Juste avant j'avais fait joujou avec l'exemple 1 et en testant les différentes touches F1 à F6. ça n"a sûrement aucun rapport, mais bon je n'ai pas d'autres indices pour le moment.

Je referai le test une autre fois quand j'aurai redémarré mon ordi en commençant directement avec l'exemple 2.

Publié : mar. 03/oct./2006 5:30
par tmyke
Cela fait quoi a l'ecran, texture non visible, déformée, ...

Je sais qu'il y a un bug avec certaines cartes ATI, par exemple sur un de
mes portable et son ATI Radeon 9700 pro, j'ai le probleme, c'est
comme si il y avait plusieurs couches bizarre...
Mon pote I-Pnose a le meme soucis avec son ATI 9600. Nous cherchons
l'origine du prob mais nous n'avons pas encore trouvés la soluce... :x

Publié : mar. 03/oct./2006 11:30
par comtois
oui j'ai une ATI radeon 9800; les drivers datent de l'année dernière.
détails du pilote :
6.14.10.0303

et la texture est déformée. des rayures noires et blanches et on peut distinguer la forme d'un triangle au milieu.

Sinon , je n'ai pas vu d'exemple avec une entity animée ?
je cite de mémoire , le moteur gère le format obj, le format blitz et le format x , c'est ça ?

C'est quoi ce format x ? je n'arrive pas à le relire avec DeleD.
les fichiers au format x que je connais , c'est de l'ASCII, on peut lire le fichier dans un éditeur de texte, pas les tiens.

D'autre part, tu as prévu de gérer le format 3DS ?
C'est un format qui m'intéresserait.

Publié : mer. 04/oct./2006 5:27
par tmyke
Pour les Shader et les carte ATI serie 9XXX je pédale dessus, et je poste
dès que j'ai réussi.

Pour les formats supportés, ils sont les suivant:

Mesh statiques: '.x' (format DirectX), '.3DS' (format 3DStudio) et '.b3d' (format Blitz3D)

Mesh animés: '.md2' et '.x'

Formats a venir: '.obj' pour statique et '.b3d' pour les anim...

donc 3DS est déjà supporté...
;)

Publié : mer. 04/oct./2006 14:41
par Coolman
Heureux :) de voir un projet de moteur 3d serieux en cours de realisation pour purebasic (en esperant que ce ne sera pas un feu de paille) , je telecharge en ce moment bien que ca va me prendre du temps (acces rtc 56k), a ce propos, serait il possible de compresser avec 7-zip qui est beaucoup plus performant lors de la compression en activant les options qu'il faut...
Pour le reste, bravo pour le boulot et bonne continuation :)

Publié : mer. 04/oct./2006 16:37
par tmyke
@Coolman: Je sais qu'un fichier d'environ 10Mo pour ceux qui n'ont pas l'ADSL, cela représente un gros
téléchargement. Mais il est difficile de reduire, meme avec un autre zippeur (on gagnerait 500Ko,
ce qui ne changerait pas grand chose dans le fond). Mais je vais séparer les éléments, et dans certains cas
il ne sera pas nescessaire de re-télécharger le package complet, mais seulement les 'samples' ou les Lib/Dll par exemples.
Je fournirais les liens...
Pour le feu de paille, a moins d'un gros soucis (perso par exemple), tu n'as
pas a t'en faire, nous avons bien l'intention d'aller loin, et de faire de DM3D un moteur digne de ce nom
(on pense déjà à l'adaptation vers DX10), et donc d'offrir aux fan de 3D sous PB quelque chose qui leur conviennent.
Nous sommes qu'au début de la beta-test, et nous sommes des amateurs, nous codons donc pendant
nos loisirs. Donc cela avancera pas toujours aussi vite que nous le souhaiterions mais cela avancera toujours...

liens Dreamotion3D pour Pure Basic
http://www.dreamotion3d.com/PureBasic/PackPB.zip
http://www.dreamotion3d.com/PureBasic/modulePB.zip (uniquement DLL + lib)
http://www.dreamotion3d.com/PureBasic/samplesPB.zip (uniquement les exemples)

Publié : mer. 04/oct./2006 17:07
par Coolman
tmyke a écrit :@Coolman: Je sais qu'un fichier d'environ 10Mo pour ceux qui n'ont pas l'ADSL, cela représente un gros
téléchargement. Mais il est difficile de reduire, meme avec un autre zippeur (on gagnerait 500Ko,
ce qui ne changerait pas grand chose dans le fond). Mais je vais séparer les éléments, et dans certains cas
il ne sera pas nescessaire de re-télécharger le package complet, mais seulement les 'samples' ou les Lib/Dll par exemples.
Je fournirais les liens...
Pour le feu de paille, a moins d'un gros soucis (perso par exemple), tu n'as
pas a t'en faire, nous avons bien l'intention d'aller loin, et de faire de DM3D un moteur digne de ce nom
(on pense déjà à l'adaptation vers DX10), et donc d'offrir aux fan de 3D sous PB quelque chose qui leur conviennent.
Nous sommes qu'au début de la beta-test, et nous sommes des amateurs, nous codons donc pendant
nos loisirs. Donc cela avancera pas toujours aussi vite que nous le souhaiterions mais cela avancera toujours...
Il est vrai que si ca contient des medias (images ou videos), ca n'y fera pas grand chose :(

Merci :) d'envisager de separer les elements de l'archive pour ceux qui comme moi n'ont pas l'adsl, c'est tres cool
8)

Publié : dim. 08/oct./2006 11:45
par comtois
je tente de faire un mesh manuel et j'ai ce message, où est l'erreur ?
---------------------------
PureBasic
---------------------------
Ligne 109: DM_CreateMesh(): Incorrect number of parameters.
---------------------------
OK
---------------------------
C'est pas fini, y'a sûrement d'autres erreurs, mais pour l'instant je bloque sur cette erreur.

Code : Tout sélectionner

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


Declare CreateCube()

Global  anglex.F, angley.f, flagXDown

Global  mox.f, omx.f, moy.f, omy.f, speed.f, mfar.f


Global  *camera.CEntity

Global  *mesh.CEntity

Global  *brush.CBrush

Global  *texture.CTexture

Global  *ent.CEntity


; ouvre un ecran  

DM_Graphics3D(800, 600, 32, 0, 1) 

 

CreateCube()

;'--------------------------------------------------------------

;' UNE PETITE CAMERA POUR VOIR NOTRE SCENE

;'--------------------------------------------------------------

*camera = DM_CreateCamera(#Null)

DM_MoveEntity(*camera, 0,0,-100.0)

DM_CameraClsColor(*camera, 125, 125, 125)

Repeat



ExamineKeyboard()
ExamineMouse()        

        ;' controle camera pour se balader

        If KeyboardPushed(#PB_Key_Up) : DM_MoveEntity(camera, 0,0,2) : EndIf

        If KeyboardPushed(#PB_Key_Down) : DM_MoveEntity(camera, 0,0,-2) : EndIf

        If MouseButton(1)

               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

        EndIf

        If MouseButton(1) = #False : flagXDown = 0 : EndIf

 

        ;'---------------

        ;' debut rendu

        ;'---------------

        DM_BeginScene()

        ;' rendu scene

        DM_Renderworld()

        ;' fin rendu

        DM_EndScene()

Until KeyboardPushed(#PB_Key_Escape)


DM_ClearGraphics()

 

Procedure CreateCube()

        *bb.CBrush

        *texture.CTexture

        *ent = DM_CreateMesh(12, 8, #Null)

        ;' les vertex

 
        DM_SetVertexBuffer(*ent, 0, 8, ?vertex) 

        ;' les triangles

        DM_SetTriangleBuffer(*ent, 0, 12, ?indice)



        ;' on crée une petite Brush 

        bb = DM_CreateBrush("cube")

        DM_BrushAmbient(bb, 255,128,0,255)

        DM_BrushDiffuse(bb, 255,128,0,255)

        ;' une texture

        texture = DM_GetTexture(bb, 0)

        DM_LoadTexture(texture, "tex64.bmp")

        DM_AddRenderState(bb, D3DRS_CULLMODE, D3DCULL_NONE)

        ;' calcul des normal

        DM_UpdateNormal(ent)

        ;' affecte la brush créee

        DM_PaintEntity(ent, bb, 0)

        ;' une p'tite rot vite fait

        DM_RotateMesh(ent, 0, 0, 45)

        ;'---------------------------------

EndProcedure

DataSection
Vertex:
Data.f -10.0,10.0,-10.0,0.0,0.0,10.0,10.0,-10.0,1.0,0.0,-10.0,-10.0,-10.0,0.0,1.0,10.0,-10.0,-10.0,1.0,1.0,-10.0,10.0,10.0,0.0,0.0,10.0,10.0,10.0,1.0,0.0,-10.0,-10.0,10.0,0.0,1.0,10.0,-10.0,10.0,1.0,1.0
Indice:
Data.l 0,1,2,1,3,2,4,5,6,5,7,6,0,4,6,0,6,2,1,5,7,1,7,3,0,4,5,0,5,1,2,6,7,6,3,7
EndDataSection

Publié : dim. 08/oct./2006 12:29
par tmyke
J'analyse ton code et je te renvoie cela avec explications...

Publié : dim. 08/oct./2006 17:19
par tmyke
Tout d'abord voici un petit peu comment sont constituées les Entity
au niveau des mesh:

Tout d'abord il y a la liste des différent vertex:
'x-y-z' pour leur coordonnées
'nx-ny-nz' pour leurs normales
'color' pour leur couleur
'u0,v0' pour les coordonnées de textures (on aura un 'u1-v1' en plus si deux canaux de textures, etc...)

En suite, il y a les faces. Chaque face est composé de trois vertex dont on fournis
a chaque fois les numero. De plus chaque face est affilié a une surface (égale aux
nombre de brush de l'objet) qui determine la brush qui lui sera appliqué

face0 = vertice n° 0-1-2 surface 0
face1 = vertice n° 3-4-5 surface 0
etc...

en mémoire cela donne:

vertex_0
vertex_1
vertex_2
...
vertex_n
face_0
face_1
face_2
...
face_n
brush_0(pour surface 0)
brush_1(pour surface 1)
...
brush_n(pour surface n)

Voici le code que tu avait commencé a écrire (un Cube donc)

Code : Tout sélectionner

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


Declare CreateCube()

Global  anglex.F, angley.f, flagXDown
Global  mox.f, omx.f, moy.f, omy.f, speed.f, mfar.f

Global  *camera.CEntity
Global  *ent.CEntity
Global  *brush.CBrush
Global  *texture.CTexture
Global  *ent.CEntity


;  Initialisation des différents modules
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
    End
EndIf
; ouvre un ecran 3D
DM_Graphics3D(800, 600, 32,  0, 1)


; creation du cube
CreateCube()

;'--------------------------------------------------------------
;' UNE PETITE CAMERA POUR VOIR NOTRE SCENE
;'--------------------------------------------------------------
*camera = DM_CreateCamera(#Null)
DM_MoveEntity(*camera, 0,0,-100)
DM_CameraClsColor(*camera, 25, 25, 25)
Repeat

ExamineKeyboard()
ExamineMouse()       
        ;' controle camera pour se balader
        If KeyboardPushed(#PB_Key_Up) : DM_MoveEntity(*camera, 0,0,2) : EndIf
        If KeyboardPushed(#PB_Key_Down) : DM_MoveEntity(*camera, 0,0,-2) : EndIf
        If MouseButton(1)

               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
        EndIf
        If MouseButton(1) = #False : flagXDown = 0 : EndIf
        ;'---------------

        ;' debut rendu

        ;'---------------
        DM_BeginScene()
        ;' rendu scene
        DM_Renderworld()
        ;' fin rendu
        DM_EndScene()

Until KeyboardPushed(#PB_Key_Escape)
DM_ClearGraphics()

Procedure CreateCube()
        *bb.CBrush
        *texture.CTexture
        ; creation d'un mesh vide, un canal de texutre,
        ; 12 faces, 24 vertices, 1 surface, pas de parent
        *ent = DM_CreateMesh(12, 24, 1, #Null)
        ; les vertex 
        Restore Vertex
        For i= 0 To 23
          Read x.f
          Read y.f
          Read z.f
          Read u.f
          Read v.f
          ; les coordonnées de vertex
          DM_VertexCoords(*ent, i, x,y,z)
          ; les coordonnées de texture (canal 0)
          DM_VertexTexCoords(*ent, i, 0, u, v)
        Next i
        ; les triangles
        Restore Indice
        For i = 0 To 11
          Read v1.l
          Read v2.l
          Read v3.l
          DM_VertexTriangle(*ent, i, v1,v2,v3, 0)
        Next i
        ;' on crée une petite Brush, dont on récupère le pointeur
        *bb = DM_CreateBrush("cube")
        ; modifie certains paramètres de la brush
        DM_BrushAmbient(*bb, 255,128,0,255)
        DM_BrushDiffuse(*bb, 255,128,0,255)
        ; récupère le pointeur sur la première texture possible de la brush créée
        *texture = DM_GetTexture(*bb, 0)
        ; charge une texture
        DM_LoadTexture(*texture, "tex64.bmp")
        ; modifie l'état de rendu de la Brush pour voir de tous les cotés
        DM_BrushAddRender(*bb, #D3DRS_CULLMODE, #D3DCULL_NONE)
        ; affecte la brush créee a notre entity
        DM_PaintEntity(*ent, *bb, 0)
        ; génératon auto des normales de l'entity créée
        DM_UpdateNormal(*ent)
        ; p'tite rotation
        DM_RotateMesh(*ent, 45, 45, 0)
        ;'---------------------------------
EndProcedure

DataSection
Vertex:
; liste des 24 vertex avec eurs coordonnées de textures
Data.f -10,10,-10, 1,0, 10,10,-10,  1,1,-10,-10,-10, 0,0, 10,-10,-10,0,1 ,-10,10,10,0,0 , -10,-10,10, 0,1
Data.f 10,10,10,1,0 ,10,-10,10,1,1, -10,10,10, 0,0,10,10,10,  0,1,  -10,10,-10, 1,0,  10,10,-10,1,1 
Data.f -10,-10,10,1,0 , -10,-10,-10, 1,1, 10,-10,10,0,0 , 10,-10,-10,0,1, 10,10,-10,0,0 , 10,10,10, 0,1
Data.f 10,-10,-10,1,0 , 10,-10,10,1,1,-10,10,-10,1,0 , -10,-10,-10, 1,1,-10,10,10, 0,0 , -10,-10,10,0,1
Indice:
; liste des faces
Data.l 0,1,2,1,3,2,4,5,6,4,7,6,8,9,10,9,11,10,12,13,14
Data.l 13,15,14,16,17,18,17,19,18,20,21,22,21,23,22
EndDataSection
La syntaxe de DM3D a légèrement évoluée (par exemple plus d'instruction
genre SetVertexBuffer), désolé, c'est un peu l'incovénient des Beta-test,
certaines chose change un petit peu de temps en temps

dernière version du modules:
http://www.dreamotion3d.com/PureBasic/modulePB.zip