Texture et matérial

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Texture et matérial

Message par microdevweb »

Bonjour,

Voila je me lance dans la 3D, je voudrais faire un mur

Code : Tout sélectionner

CreateCube(#MeshBlock100,10)
 TransformMesh(#MeshBlock100,0,0,0,10,1,1,0,0,0)
Et utiliser une texture de 252X160

Si j'utilise TransformMesh ma texture est étirée, comment faire pour quel soir répétée.

Merci
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Texture et matérial

Message par falsam »

TransformMesh() c'est pour travailler sur le mesh et non pas sur le material qui sera la partie visible.

C'est donc sur le material que tu vas devoir travailler en utlisant la fonction ScaleMaterial()

Code : Tout sélectionner

Enumeration Window
  #Mainform
EndEnumeration

Enumeration Entities
  #Mur
EndEnumeration

Enumeration Mateterial
  #Damier
EndEnumeration

Global Event

InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()

;Pour cette démonstration, je me servirais des textures du dossier exemple
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Textures", #PB_3DArchive_FileSystem)

OpenWindow(#Mainform, 0, 0, 800, 600, "Travailler le material", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Mainform),0,0,800,600)

;Lumiere et ombre
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), 0, 0, 100)
WorldShadows(#PB_Shadow_Additive)

;Camera 
Camera = CreateCamera(#PB_Any,0,0,100,100)
CameraBackColor(Camera, RGB(145, 182, 201))

MoveCamera(Camera, 2, 5, 15)  
CameraLookAt(Camera, 0,0,0)   

;Création du materiel
CreateMaterial(#Damier, TextureID(LoadTexture(#PB_Any, "MRAMOR6X6.jpg"))) 

;Commente la ligne qui suit pour voir la différence
ScaleMaterial(#Damier, 0.2, 1)

;Création d'un cube de base d'une unité
CreateEntity(#Mur, MeshID(CreateCube(#PB_Any, 1)), MaterialID(#Damier))

;Redimentionnement du mur (On utilise un facteur d'échelle)
ScaleEntity(#Mur, 10, 2, 1)


Repeat
  Repeat
    Event  = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
        
    EndSelect
  Until Event = 0
  
  If ExamineKeyboard()
    
    If KeyboardPushed (#PB_Key_Escape)
      Break
    EndIf
  EndIf
  
   
  ; Affiche le rendu de la scéne
  RenderWorld(80)
  FlipBuffers()  
ForEver
Ce code comporte deux fois Repeat dans la boucle événementielle.
- Le premier Repeat traite les événements 3D
- Le second Repeat traite et vide les événements Windows. On a tendance à l'oublier et le code tôt ou tard se plante.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Texture et matérial

Message par microdevweb »

Merci Falsam,

Je crois que j'ai compris la marche à suivre.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Texture et matérial

Message par microdevweb »

Encore une petite chose, donc si je veux créer plusieurs entités de différente taille, je devrai chaque fois créer un nouveau matérial?
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Texture et matérial

Message par falsam »

microdevweb a écrit :Encore une petite chose, donc si je veux créer plusieurs entités de différente taille, je devrai chaque fois créer un nouveau matérial?
Tant que c'est la texture ne change pas, tu peux garder le même materiel.

Si tu dois juste dupliquer un mur tu peux aussi copier le précédent en passant par exemple par un tableau.

Code : Tout sélectionner

Enumeration Window
  #Mainform
EndEnumeration

Enumeration Mateterial
  #Damier
EndEnumeration

Global Event

Dim Entities(10)
  

InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()


;Pour cette démonstration, je me servirais des textures du dossier exemple
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Textures", #PB_3DArchive_FileSystem)

OpenWindow(#Mainform, 0, 0, 800, 600, "Travailler le material", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Mainform),0,0,800,600)

;Lumiere et ombre
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), 0, 0, 100)
WorldShadows(#PB_Shadow_Additive)

;Camera 
Camera = CreateCamera(#PB_Any,0,0,100,100)
CameraBackColor(Camera, RGB(145, 182, 201))

MoveCamera(Camera, 2, 5, 15)  
CameraLookAt(Camera, 0,0,0)   

;Création du materiel
CreateMaterial(#Damier, TextureID(LoadTexture(#PB_Any, "MRAMOR6X6.jpg"))) 

;Commente la ligne qui suit pour voir la différence
ScaleMaterial(#Damier, 0.2, 1)

;Création d'un cube de base d'une unité
Entities(0) = CreateEntity(#PB_Any, MeshID(CreateCube(#PB_Any, 1)), MaterialID(#Damier))

;Redimentionnement du mur (On utilise un facteur d'échelle)
ScaleEntity(Entities(0), 10, 2, 1)

;Copie du mur précédent et manipulation de cette nouvelle entité
CopyEntity(Entities(0), Entities(1))
MoveEntity(Entities(1), -5, 0, 5)
RotateEntity(Entities(1), 0, 90, 0)

Repeat
  Repeat
    Event  = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
        
    EndSelect
  Until Event = 0
  
  If ExamineKeyboard()
    
    If KeyboardPushed (#PB_Key_Escape)
      Break
    EndIf
  EndIf
  
   
  ; Affiche le rendu de la scéne
  RenderWorld(80)
  FlipBuffers()  
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre