PureBasic
https://www.purebasic.fr/french/

[v4 beta 3] : EntityRenderMode()
https://www.purebasic.fr/french/viewtopic.php?f=7&t=4533
Page 1 sur 1

Auteur:  comtois [ Sam 18/Fév/2006 9:28 ]
Sujet du message:  [v4 beta 3] : EntityRenderMode()

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:
;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:
;{- 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

Auteur:  djes [ Lun 21/Avr/2008 11:33 ]
Sujet du message: 

Hello! Je fais remonter ça pour savoir si tu avais trouvé une solution?

Auteur:  comtois [ Lun 21/Avr/2008 22:16 ]
Sujet du message: 

J'ai mis ça de côté , j'attends la 4.30 . Et pour tout dire je tourne au ralenti en ce moment.

Auteur:  Patrick88 [ Mar 22/Avr/2008 11:43 ]
Sujet du message: 

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

Auteur:  comtois [ Mar 22/Avr/2008 16:33 ]
Sujet du message: 

non , j'ai essayé

Citation:
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.

Auteur:  Patrick88 [ Mar 22/Avr/2008 17:10 ]
Sujet du message: 

je me disais aussi :roll:

pat

Auteur:  djes [ Mar 22/Avr/2008 18:43 ]
Sujet du message: 

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...?

Auteur:  comtois [ Mar 22/Avr/2008 18:58 ]
Sujet du message: 

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 :)

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/