Communauté

modifier l'effet vi...
 
Notifications
Retirer tout

modifier l'effet visuel de l'Atelier : Masques et Pixels Shaders (façon Star Trek)

5 Posts
2 Utilisateurs
0 Likes
279 Vu
0
Début du sujet

Translator
 
 
 

Bonjour,

J'ai fini le cours :

Atelier : Masques et Pixels Shaders (Coder un effet visuel façon Star Trek)

du parcours : Bases – Initiation

à la fin dans les exercices proposés par David, il y a la suggestion de modifier l'effet visuel en générant les carrés du bas vers le haut.

Alors que dans le code du cours les carrés de l'effet visuel apparaissent aléatoirement

Je parviens à le faire avec une colonne de carré aléatoire allant de gauche à droite.

Avec une ligne de carré aléatoire allant de haut en bas

Avec un point de départ allant de en haut à gauche à en bas à droite.

 

Mais je parvient pas à faire l'effet visuel avec une ligne de case aléatoire allant du bas vers le haut.

Je parviens d'ailleurs pas non plus avec une colonne de case aléatoire allant de droite vers la gauche.

 

vois une partie du code original :

local mask_shader = love.graphics.newShader[[
   vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords) {
      if (Texel(texture, texture_coords).rgba == vec4(0.0)) {
         discard;
      }
      return vec4(1.0);
   }
]]

local function myStencilFunction()
  love.graphics.setShader(mask_shader)
  love.graphics.draw(Kirk.image, Kirk.x, Kirk.y)
  love.graphics.setShader()
end

function love.draw()
  love.graphics.scale(scaleZoom, scaleZoom)
  love.graphics.setColor(1,1,1,1) -- Adapté à Love 11.0
  
  if Kirk.isBeam == false then
    love.graphics.draw(Kirk.image, Kirk.x, Kirk.y)
  else
    -- Kirk en filigramme
    love.graphics.setColor(1,1,1,1*(Kirk.beamLevel / Kirk.maxPercent))
    love.graphics.draw(Kirk.image, Kirk.x, Kirk.y)
    love.graphics.stencil(myStencilFunction, "replace", 1)
    love.graphics.setStencilTest("greater", 0)
    
    -- Beam effect
    local nbPoints
    -- Effet à double sens
    local percent
    if Kirk.beamLevel <= Kirk.maxPercent/2 then
      percent = (Kirk.beamLevel*2) / 100
    else
      percent = ((Kirk.maxPercent - Kirk.beamLevel) * 2) / 100
    end
    local l,h = Kirk.image:getWidth(), Kirk.image:getHeight()
    nbPoints = (l*h) * percent
    
    -- Affichage des points
    love.graphics.setColor(253/255,251/255,212/255,1)  -- Adapté à Love 11.0
    local np
    for np=1,nbPoints do
      local rx,ry = math.random(0,l-1), math.random(0,h-1)
        love.graphics.rectangle("fill", Kirk.x+rx, Kirk.y+ry, 1, 1)
    end
    
    -- Fin du masque
    love.graphics.setStencilTest()
  end
end

 

c'est dans cette partie que les modifications doivent être effectuée.

 

Pourriez-vous m'aider ?

comment faire un effet visuel avec une ligne de carré généré aléatoirement allant du bas du personnage vers le haut ?

Cdt

Étiquettes du sujet
5 Réponses
0

@muchembled
Pour parcourir la boucle de droite a gauche

faut utiliser 
for x=100, 0, -1 do -- de 100 a 0, et on recule de -1 (soit 100, puis 100-1 = 99, puis 99-1 = 98, etc.)
end

dans le code en exemple j'ai calculé le Pct de remplissage par rapport a l effet pour savoir de combien on doit se décaler en pixel (pourcentage basé sur 80% par rapport au code de David)

function love.draw()
  love.graphics.scale(scaleZoom, scaleZoom)
  love.graphics.setColor(1,1,1,1) -- Adapté à Love 11.0

  if Kirk.isBeam == false then
    love.graphics.draw(Kirk.image, Kirk.x, Kirk.y)
  else
    -- Kirk en filigramme
    love.graphics.setColor(1,1,1,1*(Kirk.beamLevel / Kirk.maxPercent))
    love.graphics.draw(Kirk.image, Kirk.x, Kirk.y)
    love.graphics.stencil(myStencilFunction, "replace", 1)



    -- ALGO de l'EFFET du Shader :
    love.graphics.setStencilTest("greater", 0)
    love.graphics.setColor(253/255,251/255,212/255,1)  -- Adapté à Love 11.4

    -- gauche a droite
--    local maxPosX =  math.floor( Kirk.beamLevel / (Kirk.l*(Kirk.maxPercent/100)) )
--    local maxNbY =  math.floor(Kirk.beamLevel  / Kirk.h)
--    for rx=0, maxPosX do
--      for y=0, maxNbY do
--        local ry = love.math.random(0, Kirk.h-1)
--        love.graphics.rectangle("fill", Kirk.x+rx, Kirk.y+ry, 1, 1)
--      end
--    end

    -- droite a gauche
    local maxPosX =  math.floor( Kirk.beamLevel / (Kirk.l*(Kirk.maxPercent/100)) )
    local maxNbY =  math.floor(Kirk.beamLevel  / Kirk.h)
    for rx=Kirk.l-1, (Kirk.l-1)-maxPosX, -1 do
      for y=0, maxNbY do
        local ry = love.math.random(0, Kirk.h-1)
        love.graphics.rectangle("fill", Kirk.x+rx, Kirk.y+ry, 1, 1)
      end
    end

--    -- Fin du masque
    love.graphics.setStencilTest()

    --
    love.graphics.setColor(0,0,0,1)
    love.graphics.print(maxPosX, 10, 10)
    love.graphics.print(math.floor(Kirk.beamLevel), 10, 50)

  end
end
0

je te conseil de passer sur le discord ca sera plus réactif et agréable pour te répondre ^^

0
Début du sujet

Bonjour CryptoLogiq,

merci pour ton retour, très utile.

👍

0

ps : a savoir que j ai simplifier (pas repris l effet alpha qui va de 0 a 100 puis 100 a 80) pour pas tout melanger et que tu retrouves sur un code complexifier...

Sinon de rien, amuses toi bien.

0
Début du sujet

Merci pour ces infos 😉

Répondre
Share:

Dialoguez avec les autres membres de la gamecodeur school.

Accédez maintenant à notre serveur Discord privé : Entraide, Game Jams, Partage de projets, etc.

Vous devez être membre de la Gamecodeur School Premium pour être autorisé à accéder au serveur.