DisplayRGBFilter est super

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

DisplayRGBFilter est super

Message par SPH »

Laissez moi louer Fred pour son instruction "DisplayRGBFilter". Cela crée un filtre rectangulaire sur l'ecran. Rectangle vous avez dit ? NON !!! En agissant ligne par ligne, vous pouvez créer les formes que vous voulez. Et comme l'instruction est extremement rapide, vous pouvez en abuser. :idea:
Voici un code qui va vous ravire (mettez l'image que vous voulez sinon : bug) :

Code : Tout sélectionner

If InitSprite() And InitMouse() And InitKeyboard() 
Else
MessageRequester("Erreur", "InitSprite() And InitMouse() And InitKeyboard() : impossible")
End
EndIf

UseJPEGImageDecoder()


;* Ouverture de la l'écran *; 
OpenScreen(1024,768,32,"")
LoadSprite(1,"d:\1.jpg")


;* definition de quelques valeurs, et des coordonnées des points *;

Dim PX2(5) : Dim PY2(5) : Dim PZ2(5)
Dim PX3(5) : Dim PY3(5) : Dim PZ3(5) : Dim ink(5)

PX3(0)=150 : PY3(0)=0 : PZ3(0)=0
PX3(1)=-150 : PY3(1)=0 : PZ3(1)=0
PX3(2)=0 : PY3(2)=0 : PZ3(2)=150
PX3(3)=0 : PY3(3)=0 : PZ3(3)=-150
PX3(4)=0 : PY3(4)=150 : PZ3(4)=0
PX3(5)=0 : PY3(5)=-150 : PZ3(5)=0

angx.f=0 : angy.f=0 : angz.f=0



;* boucle principale *;

Repeat 

DisplaySprite(1,0,0);ClearScreen(RGB(255, 255, 255))

;* rotation et projection des points, non optimisée mais compréhensible *;

For u=0 To 5

x0=PX3(u)
y0=PY3(u)
z0=PZ3(u)

x1=x0
y1=Cos(angx)*y0+Sin(angx)*z0
z1=Sin(angx)*y0-Cos(angx)*z0

x2=Cos(angy)*x1+Sin(angy)*z1
y2=y1
z2=Sin(angy)*x1-Cos(angy)*z1

x3=Cos(angz)*x2+Sin(angz)*y2
y3=Sin(angz)*x2-Cos(angz)*y2
z3=z2

x4=(x3*256)/(z3-256)+520
y4=(y3*256)/(z3-256)+440

PX2(u)=x4
PY2(u)=y4
PZ2(u)=z3

Next


;* traçage *;

StartDrawing(ScreenOutput())

posx=PX2(0) : posy=PY2(0) : posz=(PZ2(0)+256)/2
;Debug posz
posy=posy-posz
  sizex=posz*posz ;: sizey=posz*2
;  hy.f=(180/sizey)/57.297795
  hy.f=(90/posz)/57.297795
    For n=0 To posz;sizey-1
      ang.f=n*hy
      x=Sqr(Sin(ang)*sizex)
      DisplayRGBFilter(posx-x,posy+n,x*2,1,posz/2,0,0)
      DisplayRGBFilter(posx-x,posy+posz*2+1-n,x*2,1,posz/2,0,0)
    Next

posx=PX2(1) : posy=PY2(1) : posz=(PZ2(1)+256)/2
  posy=posy-posz
  sizex=posz*posz ;: sizey=posz*2
;  hy.f=(180/sizey)/57.297795
  hy.f=(90/posz)/57.297795
    For n=0 To posz;sizey-1
      ang.f=n*hy
      x=Sqr(Sin(ang)*sizex)
      DisplayRGBFilter(posx-x,posy+n,x*2,1,0,posz/2,0)
      DisplayRGBFilter(posx-x,posy+posz*2+1-n,x*2,1,0,posz/2,0)
    Next

posx=PX2(2) : posy=PY2(2) : posz=(PZ2(2)+256)/2
  posy=posy-posz
  sizex=posz*posz ;: sizey=posz*2
;  hy.f=(180/sizey)/57.297795
  hy.f=(90/posz)/57.297795
    For n=0 To posz;sizey-1
      ang.f=n*hy
      x=Sqr(Sin(ang)*sizex)
      DisplayRGBFilter(posx-x,posy+n,x*2,1,0,0,posz/2+40)
      DisplayRGBFilter(posx-x,posy+posz*2+1-n,x*2,1,0,0,posz/2+40)
    Next

posx=PX2(3) : posy=PY2(3) : posz=(PZ2(3)+256)/2
  posy=posy-posz
  sizex=posz*posz ;: sizey=posz*2
;  hy.f=(180/sizey)/57.297795
  hy.f=(90/posz)/57.297795
    For n=0 To posz;sizey-1
      ang.f=n*hy
      x=Sqr(Sin(ang)*sizex)
      DisplayRGBFilter(posx-x,posy+n,x*2,1,posz/2,posz/2,0)
      DisplayRGBFilter(posx-x,posy+posz*2+1-n,x*2,1,posz/2,posz/2,0)
    Next

posx=PX2(4) : posy=PY2(4) : posz=(PZ2(4)+256)/2
  posy=posy-posz
  sizex=posz*posz ;: sizey=posz*2
;  hy.f=(180/sizey)/57.297795
  hy.f=(90/posz)/57.297795
    For n=0 To posz;sizey-1
      ang.f=n*hy
      x=Sqr(Sin(ang)*sizex)
      DisplayRGBFilter(posx-x,posy+n,x*2,1,0,posz/2,posz/2+30)
      DisplayRGBFilter(posx-x,posy+posz*2+1-n,x*2,1,0,posz/2,posz/2+30)
    Next

posx=PX2(5) : posy=PY2(5) : posz=(PZ2(5)+256)/2
  posy=posy-posz
  sizex=posz*posz ;: sizey=posz*2
;  hy.f=(180/sizey)/57.297795
  hy.f=(90/posz)/57.297795
    For n=0 To posz;sizey-1
      ang.f=n*hy
      x=Sqr(Sin(ang)*sizex)
      DisplayRGBFilter(posx-x,posy+n,x*2,1,posz/2,0,posz/2)
      DisplayRGBFilter(posx-x,posy+posz*2+1-n,x*2,1,posz/2,0,posz/2)
    Next



angx+0.04
angy+0.034
angz-0.03

StopDrawing()

FlipBuffers() 

;* On quite ! *;

ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_Escape)
End
Le moteur 3D n'est pas de moi, et DisplayRGBFilter est de Fred. Je n'ai donc fait que tres peu... :mrgreen:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: DisplayRGBFilter est super

Message par nico »

Pas mal comme effet :)
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: DisplayRGBFilter est super

Message par SPH »

nico a écrit :Pas mal comme effet :)
Merci

PS : change ton avatar car il est OFF celui la

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: DisplayRGBFilter est super

Message par venom »

Problème chez moi ligne 69 ou 69 a l'envers c'est comme vous voulez :D

StartDrawing(ScreenOutput())
outpout is null

et sans debuggeur écran noir. 8O






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: DisplayRGBFilter est super

Message par SPH »

Tu as mis une image JPG ??
Sinon, au debut de la boucle principale, a la place de tout ca :

Code : Tout sélectionner

DisplaySprite(1,0,0);ClearScreen(RGB(255, 255, 255))
Met ca :

Code : Tout sélectionner

ClearScreen(0)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: DisplayRGBFilter est super

Message par venom »

non toujours pareille





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: DisplayRGBFilter est super

Message par Backup »

pourtant , il marche ce code ! 8O
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: DisplayRGBFilter est super

Message par G-Rom »

windows 7 x64
Essaye avec le subsystem directx7 ?

marche pas sous linux.
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: DisplayRGBFilter est super

Message par Warkering »

Trop s'a coche! :lol:
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: DisplayRGBFilter est super

Message par SPH »

venom a écrit :Problème chez moi ligne 69 ou 69 a l'envers c'est comme vous voulez :D

StartDrawing(ScreenOutput())
outpout is null

et sans debuggeur écran noir. 8O
Je ne vois plus que ca. Met :

Code : Tout sélectionner

ExamineDesktops()
OpenScreen(DesktopWidth(),DesktopHeight(),DesktopDepth(),"")
a la place de mon :

Code : Tout sélectionner

OpenScreen(1024,768,32,"")
Tu as SEVEN, et je sais que PB n'est pas totalement adapté sous SEVEN (des clignotements nottament)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: DisplayRGBFilter est super

Message par SPH »

Tiens a propos, je n'ai pas trouvé s'il existait une autre instruction qui fasse des cercles pleins mais en alpha ? Du moins, je n'ai pas su manipuler les drawingmode pour faire la meme chose (je voulais savoir qui etait l'instruc la plus rapide)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: DisplayRGBFilter est super

Message par venom »

Bien vu G-Rom
je doit y mettre directx7 :P pour que le code se compil

Par contre je ne voie rien a l'image sa doit donner quoi ? 8O







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: DisplayRGBFilter est super

Message par djes »

Moi ça marche en DirectX9 (donc rien à changer dans les options), et ça affiche un très chouette effet glenz balls :)
Répondre