Page 1 sur 2
Méthode "Font Tiles PNG" vers Sprite3D pour créer du texte.
Publié : mer. 15/févr./2012 12:02
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
- 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.
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 12:15
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 ..
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 12:50
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é
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 13:00
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
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 13:04
par Backup
j'ai reedité mon message le dernier
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 14:28
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
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 14:35
par Backup
dans ce cas ,utilise Grabsprite en lieu et place de ClipSprite

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 14:37
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

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 14:42
par Ar-S
Ok je vais tester..
Merci
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 15:01
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.
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 17:28
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 !

Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 18:28
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
Et puis les Sprite3D c'est pas si vieux.
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 19:01
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
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 19:29
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
Re: Méthode "Font Tiles PNG" vers Sprite3D pour créer du tex
Publié : mer. 15/févr./2012 22:06
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
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