ClipScreen

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

ClipScreen

Message par Thyphoon »

Bon je sais qu'on en a déjà parler. Mais impossible de trouver le le sujet avec le moteur de recherche.
y a t'il moyen de faire un ClipSprite sur l'ecran ?
de façon que les sprites que j'affiches sur l'ecran ne s'affiche que dans une zone bien précise ?
Si quelqu'un a une idée/solution, ou si vous retrouvez le sujet ou on en a parler je suis interessé :P
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: ClipScreen

Message par Backup »

Thyphoon a écrit :Bon je sais qu'on en a déjà parler. Mais impossible de trouver le le sujet avec le moteur de recherche.
y a t'il moyen de faire un ClipSprite sur l'ecran ?
de façon que les sprites que j'affiches sur l'ecran ne s'affiche que dans une zone bien précise ?
Si quelqu'un a une idée/solution, ou si vous retrouvez le sujet ou on en a parler je suis interessé :P
pourquoi ne pas utiliser un Sprite qui servirai de Masque !!
un sprite de la taille de l'ecran, et tu met en transparence une region, ce qui permetrai de voir les autre sprites derriere, seulement dans cette region ..

d'un autre coté tu ne precise pas grand chose, on peut pas deviner ce que tu veux faire :)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: ClipScreen

Message par Thyphoon »

Dobro a écrit : pourquoi ne pas utiliser un Sprite qui servirai de Masque !!
un sprite de la taille de l'ecran, et tu met en transparence une region, ce qui permetrai de voir les autre sprites derriere, seulement dans cette region ..

d'un autre coté tu ne precise pas grand chose, on peut pas deviner ce que tu veux faire :)
Dobro l'homme qui repond plus vite que son ombre !Et je t'en remercie vivement.
J'y ai déjà pensé, mais c'est un peu lourd. ça m'oblige faire un grab sur l'ecran, tracer la zone transparente, tracer ce que je veux sur l'ecran pour apres retracer le sprite qui sert de masque.
J'avais pensé aussi a dessiner directement sur un sprite normal et utiliser clipsprite mais le problème c'est que j'utilise des sprites3D et dessiné des sprite3D sur un sprite c'est pour l'instant pas possible avec les fonctions native.
:D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: ClipScreen

Message par Backup »

Thyphoon a écrit :
Dobro a écrit : pourquoi ne pas utiliser un Sprite qui servirai de Masque !!
un sprite de la taille de l'ecran, et tu met en transparence une region, ce qui permetrai de voir les autre sprites derriere, seulement dans cette region ..

d'un autre coté tu ne precise pas grand chose, on peut pas deviner ce que tu veux faire :)
Dobro l'homme qui repond plus vite que son ombre !Et je t'en remercie vivement.
J'y ai déjà pensé, mais c'est un peu lourd. ça m'oblige faire un grab sur l'ecran, tracer la zone transparente, tracer ce que je veux sur l'ecran pour apres retracer le sprite qui sert de masque.
J'avais pensé aussi a dessiner directement sur un sprite normal et utiliser clipsprite mais le problème c'est que j'utilise des sprites3D et dessiné des sprite3D sur un sprite c'est pour l'instant pas possible avec les fonctions native.
:D

pourquoi ? tu ne clip pas toujours au meme endroit ?? 8O

en principe un clip d'ecran sert par exemple a faire passer un avion devant une fenetre , et que l'observateur est sur son lit en train de regarder dehors ...

il ne voit pas l'avion arriver de la gauche, il le voit seulement traverser la fenetre, puis disparaitre vers le bords droite de sa fenetre , caché par le mur ...
pas besoin de grab d'ecran , il suffit que le Sprite qui sert de masque (mur avec une Fenetre dedans) soit préparé a l'avance,

sachant que le dernier sprite affiché est au dessus des autre, le clip se fera de lui meme .. :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: ClipScreen

Message par Chris »

Dobro a écrit :
Thyphoon a écrit :
Dobro a écrit : pourquoi ne pas utiliser un Sprite qui servirai de Masque !!
un sprite de la taille de l'ecran, et tu met en transparence une region, ce qui permetrai de voir les autre sprites derriere, seulement dans cette region ..

d'un autre coté tu ne precise pas grand chose, on peut pas deviner ce que tu veux faire :)
Dobro l'homme qui repond plus vite que son ombre !Et je t'en remercie vivement.
J'y ai déjà pensé, mais c'est un peu lourd. ça m'oblige faire un grab sur l'ecran, tracer la zone transparente, tracer ce que je veux sur l'ecran pour apres retracer le sprite qui sert de masque.
J'avais pensé aussi a dessiner directement sur un sprite normal et utiliser clipsprite mais le problème c'est que j'utilise des sprites3D et dessiné des sprite3D sur un sprite c'est pour l'instant pas possible avec les fonctions native.
:D

pourquoi ? tu ne clip pas toujours au meme endroit ?? 8O

en principe un clip d'ecran sert par exemple a faire passer un avion devant une fenetre , et que l'observateur est sur son lit en train de regarder dehors ...

il ne voit pas l'avion arriver de la gauche, il le voit seulement traverser la fenetre, puis disparaitre vers le bords droite de sa fenetre , caché par le mur ...
Y a vraiment des gens qu'ont rien d'autre à foutre que de rester au lit à regarder passer les avions! :roll:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: ClipScreen

Message par Thyphoon »

Dobro a écrit : pourquoi ? tu ne clip pas toujours au meme endroit ?? 8O

en principe un clip d'ecran sert par exemple a faire passer un avion devant une fenetre , et que l'observateur est sur son lit en train de regarder dehors ...

il ne voit pas l'avion arriver de la gauche, il le voit seulement traverser la fenetre, puis disparaitre vers le bords droite de sa fenetre , caché par le mur ...
là c'est un peu différent. C'est pour mon Frontend. Lorsque j'affiche la liste des jeux. Si le titre est trop grand le titre du jeu defile. Le problème c'est que je ne peux pas afficher la moitié d'une lettre par exemple.
Ma liste de jeu est constitué de sprite3D et Drawtext

Et si j'écris le text sur sprite2D de la taille de ma liste et bien l'antialiasing du text fait que lorsque j'affiche ce sprite sur l'ecran j'ai un liseré de ma couleur transparente qui s'affiche. pas tres jolie quoi ...
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: ClipScreen

Message par Thyphoon »

Chris a écrit : Y a vraiment des gens qu'ont rien d'autre à foutre que de rester au lit à regarder passer les avions! :roll:
:lol: :lol:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

voilà en gros ce que je cherche a faire ...
Que le text ne sorte pas du cadre rouge (précis au pixel et non a la lettre)
actuellement voilà ce que ça donne. En arrière plan ce son des Sprite3d animé
Image
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message par case »

heuu facile :)


tu cree un sprite de la taille de ta zone d'affichage et au lieu de faire

startdrawing(screenoutput())

tu fais

startdrawing(spriteoutput(sprite))

tu dessine tes lettres avec drawtext ()

stopdrawing()

tu affiche tes sprites 3D du fond
tu affiche ton sprite ou tu as ecrit ton texte



et voila ton texte ne depassera Jamais la taille de ton sprite une fois affiché a l'ecran :)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

case a écrit :heuu facile :)


tu cree un sprite de la taille de ta zone d'affichage et au lieu de faire

startdrawing(screenoutput())

tu fais

startdrawing(spriteoutput(sprite))

tu dessine tes lettres avec drawtext ()

stopdrawing()

tu affiche tes sprites 3D du fond
tu affiche ton sprite ou tu as ecrit ton texte



et voila ton texte ne depassera Jamais la taille de ton sprite une fois affiché a l'ecran :)
Oui c'est ce que je viens de faire...mais le problème c'est que l'antialiasing des polices de caractères modifie ligèrement la couleur transparente au tour des lettres donc tu as le bord du text qui n'est pas du tout propre ... :(
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

wouaaaaaaa que je suis nul je pense que j'ai trouvé...je fais un grab de la zone ou doit être affiché la liste et j'écris dans ce grab pour ensuire recoller le sprite au même coordonnée ... Et hop miracle ça marche.
D'ailleur je me demande si il n'y a pas certain d'entre vous qui avait essayé de me faire comprendre cette astuce lollllllllllllllll :oops: :lol:
Une fois de plus merci a vous tous de m'avoir aider :D

Edit: j'ai parlé un peu vite...comment on fait un grab sur un screen ????
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

un petit exemple ne serai pas de refus Thyphoon :wink:


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message par case »

dans ce cas tu as la solution suivante

pseudocode

Code : Tout sélectionner

clearscreen()      ;efface l'ecran
dispaysprite3D()  ; affiche les sprite 3D en fond

if issprite(monsprite) ; verrifie si monsprite existe
 freesprite(monsprite) ; et le suprime de la memoire si il existe
endif                          ; pour eviter de bouffer de la memoire pour rien 

grabsprite(monsprite,x,y,l,h) ; je cree monsprite en prenant la zone de l'ecran ou je vais le reafficher

startdrawing(spriteoutput(monsprite)) ; je dessine dans mon sprite
drawtext(blabla)                               ; j'ecris le texte
stopdrawing()

displaysprite(monsprite,x,y) ; j'affiche monsprite 

[code]

cela devrais resoudre ton probleme :)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Ok c'est bon ça marche ...pffffffffffffff merci a tous !!! :D

donc le gabsprite marche bien a partir du screen...c'est moi qui est du mal.

Wouaaaaaaaaaaaa dur dur de programmer avec un gamin de 3ans surexité qui passe son temps a sauter, crier, taper les objets...lollllllllllll
:roll:
Faites des enfants qu'ils disaient .. :lol:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Ca c'est quand même mieux ;)

Le clipscreen3d sans paramètres sert à remettre tout à zéro

Code : Tout sélectionner

ProcedureDLL.l ClipScreen3D()

  Protected Clip.l, *ViewPort.D3DVIEWPORT7
  Protected Sprite3DDevice.IDirect3DDevice7
 
  !EXTRN _PB_Direct3D_Device
  !MOV Eax, dword [_PB_Direct3D_Device]
  !MOV dword [p.v_Sprite3DDevice], Eax
 
  !EXTRN _PB_3DViewPort
  !MOV dword [p.p_ViewPort], _PB_3DViewPort
 
  *ViewPort\dwX = 0
  *ViewPort\dwY = 0
  *ViewPort\dwWidth  = ScreenWidth()
  *ViewPort\dwHeight = ScreenHeight()
  *ViewPort\dvMinZ = 0.0
  *ViewPort\dvMaxZ = 1.0
 
  If Sprite3DDevice\SetViewport(*ViewPort) = #S_OK
    Clip = #True
  EndIf
 
  ProcedureReturn Clip
EndProcedure

;******************************************************************************************************

ProcedureDLL.l ClipScreen3D2(x.l, y.l, Width.l, Height.l)

  Protected Clip.l, *ViewPort.D3DVIEWPORT7
  Protected Sprite3DDevice.IDirect3DDevice7
 
  !MOV Eax, dword [_PB_Direct3D_Device]
  !MOV dword [p.v_Sprite3DDevice], Eax
 
  !MOV dword [p.p_ViewPort], _PB_3DViewPort
 
  *ViewPort\dwX = x
  *ViewPort\dwY = y
  *ViewPort\dwWidth  = Width
  *ViewPort\dwHeight = Height
  *ViewPort\dvMinZ = 0.0
  *ViewPort\dvMaxZ = 1.0
 
  If Sprite3DDevice\SetViewport(*ViewPort) = #S_OK
    Clip = #True
  EndIf
 
  ProcedureReturn Clip
EndProcedure

;******************************************************************************************************

ProcedureDLL.l ClipScreen3D3(x.l, y.l, Width.l, Height.l, MinZ.f, MaxZ.f)
  Protected Clip.l, *ViewPort.D3DVIEWPORT7
  Protected Sprite3DDevice.IDirect3DDevice7
 
  !MOV Eax, dword [_PB_Direct3D_Device]
  !MOV dword [p.v_Sprite3DDevice], Eax
 
  !MOV dword [p.p_ViewPort], _PB_3DViewPort
 
  *ViewPort\dwX = x
  *ViewPort\dwY = y
  *ViewPort\dwWidth  = Width
  *ViewPort\dwHeight = Height
  *ViewPort\dvMinZ = MinZ
  *ViewPort\dvMaxZ = MaxZ
 
  If Sprite3DDevice\SetViewport(*ViewPort) = #S_OK
    Clip = #True
  EndIf
 
  ProcedureReturn Clip
EndProcedure
Répondre