Page 1 sur 1

Texture et matérial

Publié : mer. 17/déc./2014 14:38
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

Re: Texture et matérial

Publié : mer. 17/déc./2014 14:55
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.

Re: Texture et matérial

Publié : mer. 17/déc./2014 15:08
par microdevweb
Merci Falsam,

Je crois que j'ai compris la marche à suivre.

Re: Texture et matérial

Publié : mer. 17/déc./2014 15:59
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?

Re: Texture et matérial

Publié : mer. 17/déc./2014 16:03
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