Page 1 sur 2

ClipScreen

Publié : dim. 09/déc./2007 17:36
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

Re: ClipScreen

Publié : dim. 09/déc./2007 17:41
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 :)

Re: ClipScreen

Publié : dim. 09/déc./2007 17:48
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

Re: ClipScreen

Publié : dim. 09/déc./2007 17:52
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 .. :)

Re: ClipScreen

Publié : dim. 09/déc./2007 17:55
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:

Re: ClipScreen

Publié : dim. 09/déc./2007 17:57
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 ...

Re: ClipScreen

Publié : dim. 09/déc./2007 17:59
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:

Publié : dim. 09/déc./2007 19:20
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

Publié : dim. 09/déc./2007 19:57
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 :)

Publié : dim. 09/déc./2007 20:03
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 ... :(

Publié : dim. 09/déc./2007 20:17
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 ????

Publié : dim. 09/déc./2007 20:23
par venom
un petit exemple ne serai pas de refus Thyphoon :wink:


@++

Publié : dim. 09/déc./2007 20:24
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 :)

Publié : dim. 09/déc./2007 20:30
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:

Publié : lun. 10/déc./2007 9:14
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