modifier l'effet visuel de l'Atelier : Masques et Pixels Shaders (façon Star Trek)
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
@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
je te conseil de passer sur le discord ca sera plus réactif et agréable pour te répondre ^^
Bonjour CryptoLogiq,
merci pour ton retour, très utile.
👍
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.
Merci pour ces infos 😉
- 6 Forums
- 262 Sujets
- 906 Posts
- 0 En ligne
- 45.6 {numéro}K Membres