[v4 beta 3] : EntityRenderMode()

Archive.
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

[v4 beta 3] : EntityRenderMode()

Message par comtois »

Pour tester il faut copier le fichier dans le répertoire Examples/Sources.

Le mode WireFrame ne fonctionne pas avec EntityRenderMode(0, 1)
ou du moins , dans le code qui suit , ça fonctionne partiellement , en se baladant sur la matrice , on peut voir une texture grise apparaitre.

Je viens juste de m'apercevoir que si je changeais la valeur 1000 ici CreateMesh(0,1000) :

- En diminuant la valeur , la texture n'apparait plus , mais c'est le mesh qui disparait .
- En augmentant la valeur , le mesh est bien présent, mais la texture grise apparait en permanence.

Autre phénomène étrange , si je commente ces lignes :

Code : Tout sélectionner

;LoadMesh   (1, "Robot.mesh")
;LoadTexture(1, "r2skin.jpg")
;CreateEntity (1, MeshID(1), CreateMaterial(1, TextureID(1)))
;AnimateEntity(1, "Walk")  
le mode WireFrame ne fonctionne plus du tout !

Code : Tout sélectionner

;{- Initialisation
If InitEngine3D() = 0
   MessageRequester( "Erreur" , "Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll" , 0 )
   End
ElseIf InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse()=0
   MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
   End
ElseIf OpenScreen( 800 , 600 , 32 , "M3D_Matrix3D" ) = 0
   MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
   End
EndIf

Add3DArchive("Data\", #PB_3DArchive_FileSystem) 

#CameraSpeed = 10

Define.f KeyX, KeyY, MouseX, MouseY
Structure Vertex
   px.f
   py.f
   pz.f
   nx.f
   ny.f
   nz.f
   U.f
   V.f
EndStructure
Structure Facette
   P1.Vertex
   P2.vertex
   P3.Vertex
   P4.Vertex
EndStructure
Structure Face
   f1.w
    f2.w
    f3.w
    f4.w
    f5.w
    f6.w
EndStructure   

Declare MakeMatrice()

;-Pourquoi ces constantes ne sont pas dans les résidents ? une raison particulière ?
#PB_Entity_Solid      = 0
#PB_Entity_Wireframe  = 1 << 0
#PB_Entity_Plot       = 1 << 1
#PB_Entity_CastShadow = 1 << 2

WorldShadows(#PB_Shadow_Additive)
 
;-Mesh
MakeMatrice()
       
;-Texture
CreateTexture(0,64,64)
StartDrawing(TextureOutput(0))
Box(0,0,64,64,RGB(0,200,0))
StopDrawing()

;-Material
CreateMaterial(0, LoadTexture(0,"background.png"))

;-Entity
CreateEntity(0, MeshID(0), MaterialID(0))
EntityRenderMode(0, 1)

;-Light   
AmbientColor(RGB(128,128,128))
CreateLight(0, RGB(255,255,255))
 
;-Camera
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0,0,200,500)
CameraLookAt(0,0,50,100)

;-Robot
LoadMesh   (1, "Robot.mesh")
LoadTexture(1, "r2skin.jpg")
 
CreateEntity (1, MeshID(1), CreateMaterial(1, TextureID(1)))
AnimateEntity(1, "Walk")  
     
Repeat
 
  ClearScreen(0)
       
  If ExamineKeyboard()
   
    If KeyboardPushed(#PB_Key_Left)
      KeyX = -#CameraSpeed
    ElseIf KeyboardPushed(#PB_Key_Right)
      KeyX = #CameraSpeed
    Else
      KeyX = 0
    EndIf
             
    If KeyboardPushed(#PB_Key_Up)
      KeyY = -#CameraSpeed
    ElseIf KeyboardPushed(#PB_Key_Down)
      KeyY = #CameraSpeed
    Else
      KeyY = 0
    EndIf

  EndIf
 
  If ExamineMouse()
    MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
    MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
  EndIf
  
  RotateCamera(0, MouseX, MouseY, RollZ)
  MoveCamera  (0, KeyX, 0, KeyY)
 
  RenderWorld()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1

End


Procedure MakeMatrice()
   CreateMesh(0,1000)
   NbFacetteX=50
   NbFacetteZ=50
   TailleFacetteX=40
   TailleFacetteZ=40
   *VBuffer=AllocateMemory(SizeOf(Facette) * NbFacetteX * NbFacetteZ )
   *PtrV.Facette=*VBuffer
 
     For b=0 To NbFacetteZ-1
       For a=0 To NbFacetteX-1

         ;Point 1
         ;Position
         *PtrV\P1\px=a * TailleFacetteX
         *PtrV\P1\py=0
         *PtrV\P1\pz=b * TailleFacetteZ
         ;Normale
         *PtrV\P1\nx=0
         *PtrV\P1\ny=1
         *PtrV\P1\nz=0
         ;Coordonnées texture
         *PtrV\P1\u =0
         *PtrV\P1\v =0
                
         ;Point 2
         ;Position
         *PtrV\P2\px=(a + 1) * TailleFacetteX
         *PtrV\P2\py=0
         *PtrV\P2\pz=b * TailleFacetteZ
         ;Normale
         *PtrV\P2\nx=0
         *PtrV\P2\ny=1
         *PtrV\P2\nz=0
         ;Coordonnées texture
         *PtrV\P2\u =1
         *PtrV\P2\v =0 
   
         ;Point 3
         *PtrV\P3\px=(a + 1) * TailleFacetteX
         *PtrV\P3\py=0
         *PtrV\P3\pz=(b + 1) * TailleFacetteZ
        
         *PtrV\P3\nx=0
         *PtrV\P3\ny=1
         *PtrV\P3\nz=0
      
         *PtrV\P3\u =1
         *PtrV\P3\v =1
        
         ;Point 4
         *PtrV\P4\px=a * TailleFacetteX
         *PtrV\P4\py=0
         *PtrV\P4\pz=(b + 1) * TailleFacetteZ
        
         *PtrV\P4\nx=0
         *PtrV\P4\ny=1
         *PtrV\P4\nz=0
        
         *PtrV\P4\u =0
         *PtrV\P4\v =1
        
         *PtrV + SizeOf(Facette)
     
       Next a
  Next b
  *IBuffer=AllocateMemory(SizeOf(Face) * NbFacetteX * NbFacetteZ * 2)
  *PtrF.Face  =  *IBuffer
  For b=0 To NbFacetteZ-1
       For a=0 To NbFacetteX-1
         P1=(a+(NbFacetteX*b))*4
          P2=P1+1
          P3=P2+1
          P4=P3+1
          ;Face 1
          *PtrF\f1=P4 : *PtrF\f2=P2 : *PtrF\f3=P1
          *PtrF\f4=P2 : *PtrF\f5=P4 : *PtrF\f6=P3
          *PtrF + SizeOf(Face)
       Next
  Next
 
  SetMeshData(0, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate, *VBuffer,NbFacetteX * NbFacetteZ * 4)
  SetMeshData(0, #PB_Mesh_Face, *IBuffer, NbFacetteX * NbFacetteZ * 2)
EndProcedure
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.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Hello! Je fais remonter ça pour savoir si tu avais trouvé une solution?
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

J'ai mis ça de côté , j'attends la 4.30 . Et pour tout dire je tourne au ralenti en ce moment.
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.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

vu dans la doc de pb sur CreateMesh(#Mesh, TailleMaximum)

'TailleMaximum' permet de définir la dimension maximale de la mesh.
C'est important de bien renseigner 'TailleMaximum', faute de quoi il est possible que l'entité qui sera créée avec cette mesh ne soit pas affichée correctement.

cela vient peut-être de là ...

pat
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

non , j'ai essayé
Je viens juste de m'apercevoir que si je changeais la valeur 1000 ici CreateMesh(0,1000) :

- En diminuant la valeur , la texture n'apparait plus , mais c'est le mesh qui disparait .
- En augmentant la valeur , le mesh est bien présent, mais la texture grise apparait en permanence.
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.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

je me disais aussi :roll:

pat
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Oui, et puis moi je ne crée pas les meshs, je les charge ;)

J'ai essayé aussi en éditant les fichiers .material, rien n'y fait. J'ai regardé le code Ogre utilisé par fred, apparemment il n'y a rien à mettre en cause. Du coup je pense plutôt que l'initialisation d'ogre force les meshs à un material opaque par défaut...?
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

non je n'ai pas ce problème avec d'autres meshs fait main.

Mais encore une fois , je ne suis plus dans le coup , je reprendrai tout ça plus tard avec la 4.30 :)
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.
Répondre