Page 2 sur 2

Re: Soucis de texture de dès

Publié : mer. 27/janv./2016 19:40
par Mesa
Ajoute #PB_Engine3D_DebugLog en paramètre de initEngine3D() pour créer le fichier log.
C'est bien ce que j'a fait, initEngine3D(#PB_Engine3D_DebugLog) et initEngine3D(#PB_Engine3D_DebugOutput) pour la console.

M.

Re: Soucis de texture de dès

Publié : mer. 27/janv./2016 21:56
par comtois
Mesa a écrit :
Ajoute #PB_Engine3D_DebugLog en paramètre de initEngine3D() pour créer le fichier log.
C'est bien ce que j'a fait, initEngine3D(#PB_Engine3D_DebugLog) et initEngine3D(#PB_Engine3D_DebugOutput) pour la console.

M.
D'accord, et tu n'as pas de fichier en faisant initEngine3D(#PB_Engine3D_DebugLog) ? C'est étonnant

Si tu veux les 2 à la fois tu dois faire :
InitEngine3D(#PB_Engine3D_DebugLog | #PB_Engine3D_DebugOutput)

Re: Soucis de texture de dès

Publié : jeu. 28/janv./2016 9:21
par Mesa
Toujours pareil.

Avec les exemples fournis avec pb (et qui marchent), j'ai bien un log mais la console ne s'ouvre pas.

M.

Re: Soucis de texture de dès

Publié : jeu. 28/janv./2016 10:18
par Ar-S
Tu as essayé sur une installation "fraiche" de pb ?

Re: Soucis de texture de dès

Publié : jeu. 28/janv./2016 11:53
par Mesa
@Ars: j'hésite car plein de code fonctionnent quand même, comme celui-ci http://www.purebasic.fr/french/viewtopi ... 13&t=15498 ou celui-là http://www.purebasic.fr/french/viewtopi ... 13&t=15604 (en enlevant l'antialiasing).

C'est quand même plus que bizarre. :?

M.

Re: Soucis de texture de dès

Publié : jeu. 28/janv./2016 14:35
par comtois
Tu le sais sûrement, mais juste pour être sûr qu'on se comprenne bien:
Pour que la console s'affiche, il faut aller dans les options du compilo et sélectionner 'Console' pour le format de l'exécutable.

Re: Soucis de texture de dès

Publié : jeu. 28/janv./2016 15:23
par falsam
Un code permettant de créer un cube mesh composé de 6 submeshs matérialisant chacune des faces.

Comment ça fonctionne ?
Au lieu d'utiliser la fonction CreateCube(), utiliser la fonction CreateCubeMesh(Mesh.i, Size.f = 1.0)

Exemple : CreateCubeMesh(1) 1 est l'identifiant du mesh.

Les faces sont composées de submeshs numérotés de 0 à 5.

    0 : UP face
    1 : Down face
    2 : Front face
    3 : Back face
    4 : Left face
    5 : Right face

La fonction native SetMeshMaterial() va permettre de texturer chacune de ces faces.
Syntax SetMeshMaterial(#Mesh, MaterialID , SubMesh)

Exemple pour texturer la face du dessus (Submesh 0) avec un material : SetMeshMaterial(1, MaterialID(1), 0)

Créer ensuite l'entité correspondante avec la fonction native CreateEntity() sans indiquer de material (#PB_Material_None).

Vous pouvez aussi utiliser la fonction ScaleEntity() pour redimensionner le cube et en faire un parallélépipède par exemple.

■ Avec ce code, les faces supérieur et inférieur d'un cube seront texturées avec la texture Caisse.png. Les autres faces seront texturées avec la texture Geebee2.bmp. Ces textures se trouvent dans le dossier d'installation de PureBasic.

Le cube tombe sur un sol. Pour le faire rebondir utiliser la touche Espace.

Escape permet de quitter l'application.

Code : Tout sélectionner

EnableExplicit

Global Event, Collide.b

Declare CreateCubeMesh(Mesh.i, Size.f = 1.0)
Declare AddMesh(Mesh, NewX.f=0 , NewY.f=0, NewZ.f=0, ScaleX.f=1, ScaleY.f=1, ScaleZ.f=1, RotateX.f=0, RotateY.f=0, RotateZ.f=0)

InitEngine3D() : InitKeyboard() : InitSprite()

OpenWindow(0,0,0,1024,768,"Demo CreateCubeMesh")
OpenWindowedScreen(WindowID(0),0,0,1024,768)

;Les textures se trouvent dans le dossier d'installation de PureBasic
Add3DArchive(#PB_Compiler_Home + "Examples\3D\Data\Textures", #PB_3DArchive_FileSystem)

;Caméra, Lumiere & Ombre
CreateCamera(0, 0, 0, 100, 100)
CameraBackColor(0, RGB(245, 222, 179))
MoveCamera(0, 5, 15, 60)
CameraLookAt(0, 0, 0, 0)
CreateLight(0, RGB(255, 255, 255), -100, 200, 100)
WorldShadows(#PB_Shadow_Additive)

;Création des materiaux (Les textures)
CreateMaterial(0, TextureID(LoadTexture(-1, "Dirt.jpg")))   ;Sol
CreateMaterial(1, TextureID(LoadTexture(-1, "Caisse.png"))) ;Dessus et dessous du cube
CreateMaterial(2, TextureID(LoadTexture(-1, "Geebee2.bmp")));Les autres faces

;Creation du sol ((Identifiant 0))
CreatePlane(0, 500, 500, 100, 100, 25, 25)
CreateEntity(0, MeshID(0), MaterialID(0))
CreateEntityBody(0, #PB_Entity_StaticBody, 1, 0.1, 1)   

;Création du cube (Identifiant 1) 
; 1 - Création du mesh  : CreateCubeMesh(#Mesh, Size.f)
CreateCubeMesh(1)

; 2 - Application du material sur chaque face du mesh
SetMeshMaterial(1, MaterialID(1), 0)  ;UP face
SetMeshMaterial(1, MaterialID(1), 1)  ;Down face
SetMeshMaterial(1, MaterialID(2), 2)  ;Front face
SetMeshMaterial(1, MaterialID(2), 3)  ;Back face
SetMeshMaterial(1, MaterialID(2), 4)  ;Left face
SetMeshMaterial(1, MaterialID(2), 5)  ;Right face

; 3 - Creation de l'entité (physic)
CreateEntity(1, MeshID(1), #PB_Material_None, 0, 10, 10)
CreateEntityBody(1, #PB_Entity_BoxBody, 1, 1, 1)   

ScaleEntity(1, 3, 3, 3)

While #True  
  ;Evenement window
  Repeat
    Event  = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until Event = 0    
  
  ;Evenement clavier
  If ExamineKeyboard()  
    If KeyboardReleased(#PB_Key_Escape)
      Break
    EndIf
    
    If KeyboardReleased(#PB_Key_Space) And Collide = #True
      ApplyEntityImpulse(1, 0, 15, 0)
    EndIf
  EndIf
  
  ;Le cube est en l'air ou Collision avec le sol ? 
  If Not EntityCollide(0, 1)
    RotateEntity(1, 1, 1, 1, #PB_Relative)
    Collide = #False
  Else
    Collide = #True
  EndIf
      
  RenderWorld()
  FlipBuffers()
Wend

;Ce qui suit peut etre placé dans un include (module ou pas)

;Result = CreateCubeMesh(#Mesh, Size)
Procedure CreateCubeMesh(Mesh.i, Size.f = 1.0)
  Protected Dim SubMesh(5)
  Protected CubeMesh = CreateMesh(#PB_Any, #PB_Mesh_TriangleList, #PB_Mesh_Dynamic)
  
  If Mesh = #PB_Any
    Mesh = CreateMesh(#PB_Any, #PB_Mesh_TriangleList, #PB_Mesh_Dynamic)
  Else
    CreateMesh(Mesh, #PB_Mesh_TriangleList, #PB_Mesh_Dynamic)
  EndIf
  
  AddMesh(CreatePlane(-1, Size, Size, 1, 1, 1, 1),     0.0,  Size/2,     0.0, 1, 1, 1,   0, 180,   0)  ;SubMesh 0 UP face
  AddMesh(CreatePlane(-1, Size, Size, 1, 1, 1, 1),     0.0, -Size/2,     0.0, 1, 1, 1, 180, 180,   0)  ;SubMesh 1 Down face
  AddMesh(CreatePlane(-1, Size, Size, 1, 1, 1, 1),     0.0,       0,  Size/2, 1, 1, 1, -90, 180,   0)  ;SubMesh 2 FRont face
  AddMesh(CreatePlane(-1, Size, Size, 1, 1, 1, 1),     0.0,       0, -Size/2, 1, 1, 1, -90,   0,   0)  ;SubMesh 3 BacK face
  AddMesh(CreatePlane(-1, Size, Size, 1, 1, 1, 1), -Size/2,       0,     0.0, 1, 1, 1, -90,   0, -90)  ;SubMesh 4 LeFt face
  AddMesh(CreatePlane(-1, Size, Size, 1, 1, 1, 1),  Size/2,       0,     0.0, 1, 1, 1, -90,   0,  90)  ;SubMesh 5 RighT face
  
  FinishMesh(#True)
  
  ProcedureReturn Mesh
EndProcedure


Procedure AddMesh(Mesh, NewX.f=0 , NewY.f=0, NewZ.f=0, ScaleX.f=1, ScaleY.f=1, ScaleZ.f=1, RotateX.f=0, RotateY.f=0, RotateZ.f=0)
  Protected Dim MeshData.PB_MeshVertex(0)
  Protected Dim MeshDataInd.PB_MeshFace(0)
  Protected ArrSize, ArrSizeInd, c, i, x.f, y.f, z.f
  
  TransformMesh(Mesh, NewX,NewY,NewZ, ScaleX,ScaleY,ScaleZ, RotateX,RotateY,RotateZ)
  GetMeshData(Mesh,0, MeshData(), #PB_Mesh_Vertex | #PB_Mesh_UVCoordinate, 0, MeshVertexCount(Mesh)-1)
  GetMeshData(Mesh,0, MeshDataInd(), #PB_Mesh_Face, 0, MeshIndexCount(Mesh, 0)-1)
  
  ArrSize = ArraySize(MeshData())
  For c=0 To ArrSize    
    x = MeshData(c)\x 
    y = MeshData(c)\y
    z = MeshData(c)\z
    MeshVertexPosition(x,y,z)
    MeshVertexTextureCoordinate(MeshData(c)\u, MeshData(c)\v)        
  Next   
  
  ArrSizeInd = ArraySize(MeshDataInd()) 
  For i=0 To ArrSizeInd Step 3
    MeshFace(MeshDataInd(i)\Index, MeshDataInd(i+1)\Index,MeshDataInd(i+2)\Index)
  Next
  
  AddSubMesh(#PB_Mesh_TriangleList)
EndProcedure
La procédure AddMesh() est pratique pour créer des meshs personnalisés.

Re: Soucis de texture de dès

Publié : ven. 29/janv./2016 10:30
par Mesa
Ça y est !
C'est mon antivirus qui a décidé de bloquer tout exe et toute dll dans certains dossiers et pas dans d'autres et même en le désactivant, il s'en fiche, il bloque quand même ! ! ! 8O

C'est sans doute pour ça qu'il ni avait pas de log, et une console vide.

J'avais oublié qu'il fallait mettre le flag console du compilo, je vais l'ajouter dans la doc car je ne l'ai vu nulle part.

Désolé du ramdam :mrgreen:
S'il faut faire gaffe aux bugs des antivirus maintenant, on n'est pas arrivé :D

M.