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é

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é

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.

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.

pourquoi ? tu ne clip pas toujours au meme endroit ??
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.

pourquoi ? tu ne clip pas toujours au meme endroit ??
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!

Re: ClipScreen
Publié : dim. 09/déc./2007 17:57
par Thyphoon
Dobro a écrit :
pourquoi ? tu ne clip pas toujours au meme endroit ??
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
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é

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
Une fois de plus merci a vous tous de m'avoir aider
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
@++
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 !!!
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
Faites des enfants qu'ils disaient ..

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