Page 1 sur 1

[v4 beta 3] : EntityRenderMode()

Publié : sam. 18/févr./2006 9:28
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

Publié : lun. 21/avr./2008 11:33
par djes
Hello! Je fais remonter ça pour savoir si tu avais trouvé une solution?

Publié : lun. 21/avr./2008 22:16
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.

Publié : mar. 22/avr./2008 11:43
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

Publié : mar. 22/avr./2008 16:33
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.

Publié : mar. 22/avr./2008 17:10
par Patrick88
je me disais aussi :roll:

pat

Publié : mar. 22/avr./2008 18:43
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...?

Publié : mar. 22/avr./2008 18:58
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 :)