Page 1 sur 1

Réalisation d'un effet de lumière 2D

Publié : mar. 16/janv./2018 14:38
par GallyHC
Bonjour,

J'aimerais faire un effet 2D pour une visualisation de lumière (comme la capture ci-dessous).
Image

Bon déjà, je sais que l'on peut partir d'un cône (avec dégrader). Mais la je sèche pas mal sur ce coup-ci. Ce qui faudrait, c'est que la longueur du rayon de la lumière soit variable, et qu'il puisse tourner sur lui même. (Après que la couleurs soit aussi variable; mais bon la je pourrait surement adapter).

Merci d'avance a tout le monde,
GallyHC

Re: Réalisation d'un effet de lumière 2D

Publié : mar. 16/janv./2018 16:54
par djes
Si le rayon est toujours de la même largeur, avec un simple PNG transparent (assez grand), tu devrais t'en sortir...

Re: Réalisation d'un effet de lumière 2D

Publié : mar. 16/janv./2018 17:07
par Fig
Vite fait, sans gérer la transparence, mais ce n'est pas difficile à faire si nécessaire.

Code : Tout sélectionner

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
   MessageRequester("Error", "Can't open the sprite system", 0)
   End
EndIf
If OpenWindow(0, 0, 0, 800, 600,"icons lighting", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   If OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
      CreateSprite(0,20,20)
      StartDrawing(SpriteOutput(0))
      Box(0,0,20,20,RGB(128,128,128))
      StopDrawing()
      CreateSprite(1,300,300)
      StartDrawing(SpriteOutput(1))
      DrawingMode(#PB_2DDrawing_Gradient)   
      BackColor($0000ff)
      FrontColor($000000)
      LinearGradient(0,0,0,300)
      Box(0,0,300,300)
      StopDrawing()
      rayon=300
      angle=0:largeur_angle=45 ;en degrés
      iconx=390:icony=290:couleur=RGB(Random(255),Random(255),Random(255))
      Repeat
         Repeat
            Event = WindowEvent()
            Select Event
               Case #PB_Event_CloseWindow
                  Quit = 1
            EndSelect
         Until Event = 0
         ExamineKeyboard()
         ClearScreen(RGB(0,0,0))
         x1.f=rayon*Cos(Radian(angle))
         y1.f=rayon*Sin(Radian(angle))
         x2.f=rayon*Cos(Radian(angle+largeur_angle))
         y2.f=rayon*Sin(Radian(angle+largeur_angle))
         TransformSprite(1,SpriteWidth(0)/2,SpriteHeight(0)/2,SpriteWidth(0)/2,SpriteHeight(0)/2,x1,y1,x2,y2)
         DisplaySprite(1,iconx,icony)
         DisplaySprite(0,iconx,icony)
         FlipBuffers()
         angle+2
      Until  Quit Or KeyboardPushed(#PB_Key_Escape)
   Else
      MessageRequester("Error", "Can't open windowed screen!", 0)
   EndIf
EndIf

Re: Réalisation d'un effet de lumière 2D

Publié : mar. 16/janv./2018 18:05
par GallyHC
Bonjour,

Djes > Oui, mais la longueur est justement variable ^^.

Fig > Ha la, un très bon point de départ et un grand merci je vais analyser ^^.

GallyHC

Re: Réalisation d'un effet de lumière 2D

Publié : mar. 16/janv./2018 18:25
par Fig
Si tu customise le dégradé ou charge directement un Png, tu auras une meilleur qualité de lumière.
Tu peux régler le rayon et la largeur du faisceau avec les variables éponymes.

Re: Réalisation d'un effet de lumière 2D

Publié : mar. 16/janv./2018 18:47
par venom
Après tu avais fait ce code fig qui est top :wink:

@++

----edit lien by Ar-S---

Re: Réalisation d'un effet de lumière 2D

Publié : mer. 17/janv./2018 16:12
par djes
GallyHC a écrit :Djes > Oui, mais la longueur est justement variable ^^.
J'ai demandé pour la largeur, pas la longueur...

Re: Réalisation d'un effet de lumière 2D

Publié : mer. 17/janv./2018 17:12
par GallyHC
^^ Mal lu forcement et oui variable aussi sinon c'est pas marrant lol.

Cordialement,
GallyHC