Soucis de texture de dès

Généralités sur la programmation 3D
Mesa
Messages : 1097
Inscription : mer. 14/sept./2011 16:59

Re: Soucis de texture de dès

Message 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.
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Soucis de texture de dès

Message 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)
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.
Mesa
Messages : 1097
Inscription : mer. 14/sept./2011 16:59

Re: Soucis de texture de dès

Message 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.
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Soucis de texture de dès

Message par Ar-S »

Tu as essayé sur une installation "fraiche" de pb ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Mesa
Messages : 1097
Inscription : mer. 14/sept./2011 16:59

Re: Soucis de texture de dès

Message 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.
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Soucis de texture de dès

Message 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.
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
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Soucis de texture de dès

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Mesa
Messages : 1097
Inscription : mer. 14/sept./2011 16:59

Re: Soucis de texture de dès

Message 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.
Répondre