Méthode "Font Tiles PNG" vers Sprite3D pour créer du texte.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Méthode "Font Tiles PNG" vers Sprite3D pour créer du texte.

Message par Ar-S »

Bonjour neigeux.
M'étant mis à la 2D et autres effets de particules depuis peu, j'aimerai savoir quelle est selon vous la méthode la plus efficace pour créer texte graphique à partir d'une planche .png

Voilà une représentation de la planche
Image

- L'image réelle fait 1024x512
- Les lettres sont dans des cases de 128x128
- Le fond est complètement transparent

A la manière de ce qu'avait fait Taznorman dans ce topic

Seulement je voudrais utiliser les Sprite3D vu la fluidité de ces derniers.

Ma question est :
- Dois-je créer un grand sprite3D à partir d'un grand sprite (de la taille de ma planche) ?
Si oui comment faire un genre de grabsprite() sur ce sprite3D ?

ou

- Dois-je créer un grand sprite() de la taille de ma planche puis créer autant de sprite que de lettres (128x128) puis créer autant de sprite3D ?
ça me parait bien contraignant.

ou

y'a t il d'autres solutions ?

D'avance merci.
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Backup »

tu charge ton sprite geant !
puis tu utilise ClipSprite(#Sprite, x, y, Largeur, Hauteur)

cela reviens a avoir un petit sprite piqué sur le gros , mais sans en creer un
il s'agit toujours du Sprite Geant, mais clippé :)
la taille sera donc, bien la taille d'une lettre :)

ensuite tu crees le sprite 3d avec ..
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Ar-S »

sur le principe ça me parait bien, mais que fait on avec LoadTexture ?
Vu que la texture est en fait la planche elle même ?
Je vois pas trop comment la "caler" sur un sprite qui a été grabbé
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Backup »

ben avant de faire clipsprite(#sprite

tu fait ton LoadSprite(#Sprite, NomFichier$ ,#PB_Sprite_Texture )

du coup #sprite est texturé pour la 3D

donc ton #sprite du clipsprite le sera aussi :)
plus qu'a faire

CreateSprite3D(#Sprite3D, #Sprite)

en clair :

Code : Tout sélectionner

#Sprite=1
#Sprite3D=1

LoadSprite(#Sprite, NomFichier$ ,#PB_Sprite_Texture ) ; tu charge le mega sprite
ClipSprite(#Sprite, x, y, x+12, y+24) ; tu le reduit une lettre = 12 par 24..par ex
CreateSprite3D(#Sprite3D, #Sprite) ; tu fait ton sprite 3d
Dernière modification par Backup le mer. 15/févr./2012 13:06, modifié 2 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Backup »

j'ai reedité mon message le dernier
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Ar-S »

J'ai essayé avec uniquement la première ligne pour tester mais ça chie.
Je me retrouve avec des sprite3D de la taille de mon sprite non clippé.
L'affichage est du coup tout superposé.

Code : Tout sélectionner

  
   ; ------------------------------------------------------------
  ;  Test Font PB 4.60 by Ar-S
  ; ------------------------------------------------------------
  
UsePNGImageDecoder()
  

  ; --- Sprites ----
Enumeration
  #S1 
EndEnumeration
  
Enumeration 1
  ;Sprite 3D
  #S3D_A
  #S3D_B
  #S3D_C
  #S3D_D
  #S3D_E
  #S3D_F
  #S3D_G
  #S3D_H
  #S3D_I
  #S3D_J
  #S3D_K
  #S3D_L
  #S3D_M
  #S3D_N
  #S3D_O
  #S3D_P
  #S3D_Q
  #S3D_R
  #S3D_S
  #S3D_T
  #S3D_U
  #S3D_V
  #S3D_W
  #S3D_X
  #S3D_Y
  #S3D_Z
EndEnumeration


Global.i Width, Height, Depth, RefreshRate
Global TailleAlph.i = 128
ClipX = 0
ClipY = 0

If InitEngine3D()
  
  Add3DArchive("Datas", #PB_3DArchive_FileSystem)
  
  InitSprite()
  InitSprite3D()
  InitKeyboard()
  
  ExamineDesktops()
  ExamineScreenModes()
  
  Width      = DesktopWidth(0)
  Height      = DesktopHeight(0)
  Depth      = DesktopDepth(0)
  RefreshRate  = DesktopFrequency(0)
  
  
  Result = OpenScreen(Width, Height, Depth, "Ar-S TEST Font", #PB_Screen_WaitSynchronization, RefreshRate)
  
  Debug Result
  
  ARSfont = LoadSprite(#S1, "datas\ARS_LettresRED.png", #PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
  If ARSfont = 0
    Debug "Erreur loadsprite 3D"
  EndIf
  
  For CLIP = 1 To 8 ; (1ere ligne)
    ClipSprite(#S1, ClipX, ClipY, TailleAlph, TailleAlph)
    CreateSprite3D(CLIP, #S1)
    ClipX + TailleAlph
  Next  
  
  
  Sprite3DQuality(1)
  
  
  ;Dimension et données concernant le logo
  X3D = 0 ; (Width / 2) - (TailleAlph / 2)
  Y3D = 0 ; (Height / 2) - (TailleAlph / 2)
  SP = 1
  
  ;----------
  
  
  Repeat
    FlipBuffers()
    ClearScreen(0)
    
    ExamineKeyboard()
    RenderWorld()
    
    ;- Mouvement du Logo
    If Start3D()
        
        
        For SP = 1 To 8 ; teste avec la ligne 1
          DisplaySprite3D(SP, X3D, Y3D,255)
          X3D + TailleAlph
          
        Next
        
        
      Stop3D()
      
      
    EndIf
    
  Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
  
End
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Backup »

dans ce cas ,utilise Grabsprite en lieu et place de ClipSprite ;)
Dernière modification par Backup le mer. 15/févr./2012 14:38, modifié 1 fois.
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Cool Dji »

Salut Ar-S,

Pour ça, je charge la planche complete sous forme d'image puis avec grabimage je créé des sprites puis createsprite3D.

Code : Tout sélectionner

LoadImage(0,"Data/Editeur/police.bmp")

For j =0 To 46:GrabImage(0,1,j*6,0,6,7)
    CreateSprite(j,6,7,#PB_Sprite_Texture)
    TransparentSpriteColor(j, 0)
    StartDrawing(SpriteOutput(j))
    DrawImage(ImageID(1),0,0)
    StopDrawing()
    CreateSprite3D(j, j)
Next
Edit : Dobro a été plus rapide :D
Only PureBasic makes it possible
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Ar-S »

Ok je vais tester..
Merci
~~~~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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Ar-S »

Bon nouveau soucis, avec ce code.
mon PNg a un fond transparent, il faut donc que j'utilise l'option #PB_Sprite_AlphaBlending au lieu de #PB_Sprite_texture
Et la doc dit "Il n'est pas possible d'utiliser SpriteOutput() (et par conséquent les fonctions de dessin 2D) avec un sprite du type #PB_Sprite_Alpha."
il me semble que ça foire aussi avec #PB_Sprite_AlphaBlending non ?

C'est en train de m'irriter. Je crois que je vais finir par créer x images différentes pour chaque sprite.
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Backup »

Ar-S a écrit : C'est en train de m'irriter. Je crois que je vais finir par créer x images différentes pour chaque sprite.
c'est cool , tu amene de l'eau a mon moulin,lorsque je dis que Pb est bancale ! :)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Ar-S »

Dobro a écrit :
Ar-S a écrit : C'est en train de m'irriter. Je crois que je vais finir par créer x images différentes pour chaque sprite.
c'est cool , tu amene de l'eau a mon moulin,lorsque je dis que Pb est bancale ! :)
Pour sa défense je suis bancale aussi :wink:
Et puis les Sprite3D c'est pas si vieux.
~~~~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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Ar-S »

Bon j'arrive à charger tous mes sprites en sprite3d mais lors du display() j'ai un clignotement tout moche.

Donc comme je l'ai dit plus haut j'ai créé 28 images de 128 x 128 (1.png, 2.png, 3.png etc...)
contenant les lettres de A à Z ainsi que l'apostrophe et le symbole "moins"

Code : Tout sélectionner


   ; ------------------------------------------------------------
  ;  Test Font PB 4.60 by Ar-S
  ; ------------------------------------------------------------
  
UsePNGImageDecoder()
  

    ;Sprite 3D
Enumeration 1
  
  #S3D_A
  #S3D_B
  #S3D_C
  #S3D_D
  #S3D_E
  #S3D_F
  #S3D_G
  #S3D_H
  #S3D_I
  #S3D_J
  #S3D_K
  #S3D_L
  #S3D_M
  #S3D_N
  #S3D_O
  #S3D_P
  #S3D_Q
  #S3D_R
  #S3D_S
  #S3D_T
  #S3D_U
  #S3D_V
  #S3D_W
  #S3D_X
  #S3D_Y
  #S3D_Z
  #S3D_Tiret
  #S3D_Apos
  
EndEnumeration


Global.i Width, Height, Depth, RefreshRate
Global TailleAlph.i = 128

If InitEngine3D()
  
  Add3DArchive("Datas", #PB_3DArchive_FileSystem)
  
  InitSprite()
  InitSprite3D()
  InitKeyboard()
  
  ExamineDesktops()
  ExamineScreenModes()
  
  Width      = DesktopWidth(0)
  Height      = DesktopHeight(0)
  Depth      = DesktopDepth(0)
  RefreshRate  = DesktopFrequency(0)
  
  ;Dimension et données concernant le logo
  X3D = 0 ; (Width / 2) - (TailleAlph / 2)
  Y3D = 0 ; (Height / 2) - (TailleAlph / 2)
  SP = 1 ; numéro du 1er sprite
  
  Result = OpenScreen(Width, Height, Depth, "Ar-S TEST Font", #PB_Screen_WaitSynchronization, RefreshRate)
  
  Debug Result
  
  For Sprite = #S3D_A To #S3D_Apos
    Sprite3D = Sprite
    LoadSprite(Sprite, "E:\MULTIMEDIA\****\ARS_RESSOURCES\"+Str(Sprite)+".png", #PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
    CreateSprite3D(Sprite3D, Sprite)
  Next

  Sprite3DQuality(1) ; 1 = #PB_Sprite3D_BilinearFiltering
  
  ;----------
  
  
  Repeat
    
    FlipBuffers()
    ;ClearScreen(0)
    
    ExamineKeyboard()
    RenderWorld()
    
    ;- Mouvement du Logo
    If Start3D()
        
        If SP < 29
          
           DisplaySprite3D(SP, X3D, Y3D, 255)
            
            If X3D > Width - TailleAlph
              X3D = 0
              Y3D + TailleAlph
            EndIf
            
            If Y3D > (Height - TailleAlph)
              Y3D = 0
              
            EndIf
            
            
            X3D + TailleAlph
            
            Debug "Y3D : " + Str(Y3D) + " Sprite : "+ Str(SP)
  
            SP + 1
        
        EndIf
          
        
        
      Stop3D() 
      
      
    EndIf
    
    
  Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
  
End
~~~~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
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Cool Dji »

Là, je mange et après je poste un exemple avec une routine qui décrypte les textes et pointe sur les bons sprites.
J'utilise le même système pour des textes en 3d avec des caractères en . mesh
Only PureBasic makes it possible
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex

Message par Cool Dji »

Hop,

Voici l'ébauche de mon nouvel éditeur 3D dans lequel il y a des affichages de textes en 2D et en 3D
J'ai repris et combiné diverses sources du forum, de PB...

J'espère que ça pourra aider :D

http://xdji.free.fr/Telechargement/Base3D.zip

pour bouger : fleches du clavier
pour entrer dans l'éditeur : shift gauche appuyé => dans ce cas, l'écran de jeu est bloqué
pour bouger le scale sur (x,y et z) en même temps controle gauche appuyé

Textes en 3D
- Chargement des mesh (1 par lettre) les mesh sont dans Data/Mesh/letter
ligne 307
- construction du texte (1 entity par caractère sauf espace)
ligne 321


Textes en 2D

- chargement du fichier et création des sprites pour les lettres (le fichier image est dans Data/Editeur)
ligne 252
- Procédures affichage de textes
lignes 92 et 105 (algo à refaire sur le principe de l'algo des textes 3D)
- Appel d'une procédure (AffT3d) dans la boucle
ligne 424
Only PureBasic makes it possible
Répondre