Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// partage de liens //// une carte des membres//// (apéros) codelab


#1 2012-12-14 10:25:51 Modulo Shader GLSL

Turboconnard
membre
Lieu: Lyon
Date d'inscription: 2012-01-13
Messages: 42
Site web

Modulo Shader GLSL



Bonjour,
aujourd'hui je me pose une question existentielle... sur l'opérateur modulo de GLSL
dans l'exemple OF "ShaderExample" le développeur utilise modulo pour n'afficher qu'un pixel sur deux en x et un pixel sur 4 en y, jusqu'ici tout va bien. Par contre il teste le résultat du modulo sur 0.5 ???

float xVal = gl_FragCoord.x;
if( mod(xVal,2.0) == 0.5 ){
...
}

si je fais le teste avec == 0.0 je n'ai jamais rien. Dans tous les autres langages de programmation j'ai toujours comparé un modulo avec "0" pour effectuer des "alternances" ya un truc que j'ai pas pigé ?


[ Viande for life ! ]

Hors ligne

 

#2 2012-12-14 10:44:24 Re : Modulo Shader GLSL

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1422
Site web

Re: Modulo Shader GLSL



parce qu'il veut ne garder que les valeurs impaires plutôt que les paires ?


La réalité, c'est pour qui ne sait pas gérer autre chose.
http://cumulonimbus.fr/ | http://tetalab.org | http://mixart-myrys.org

Hors ligne

 

#3 2012-12-14 10:45:37 Re : Modulo Shader GLSL

Turboconnard
membre
Lieu: Lyon
Date d'inscription: 2012-01-13
Messages: 42
Site web

Re: Modulo Shader GLSL



non mais, si tu testes avec ==0 tu rentres jamais dans le if...
c'est ça que je comprends pas.


[ Viande for life ! ]

Hors ligne

 

#4 2012-12-14 11:07:28 Re : Modulo Shader GLSL

Turboconnard
membre
Lieu: Lyon
Date d'inscription: 2012-01-13
Messages: 42
Site web

Re: Modulo Shader GLSL



Si tu prends l'aide de chez opengl : http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml

ils annoncent ça : x - y * floor(x/y)

donc moi j'en déduis :
12.0 - ( 2.0 * floor( 12.0 / 2.0) ) == 0.0 // true !
13.0 - ( 2.0 * floor( 13.0 / 2.0) ) == 0.0 // false ! ( 1.0 )
14.0 - ( 2.0 * floor( 14.0 / 2.0) ) == 0.0 // true !
etc...


[ Viande for life ! ]

Hors ligne

 

#5 2012-12-14 11:26:25 Re : Modulo Shader GLSL

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1422
Site web

Re: Modulo Shader GLSL



Ouais effectivement... je vais tester aussi pour voir...


La réalité, c'est pour qui ne sait pas gérer autre chose.
http://cumulonimbus.fr/ | http://tetalab.org | http://mixart-myrys.org

Hors ligne

 

#6 2012-12-14 11:44:27 Re : Modulo Shader GLSL

nononononono
membre
Lieu: Toulouse
Date d'inscription: 2011-02-04
Messages: 608

Re: Modulo Shader GLSL



salut, suggestion comme ça, pas testé :
tu as essayé avec 0 et non 0.0 (floor cherche des int et non des float)

Hors ligne

 

#7 2012-12-14 11:47:57 Re : Modulo Shader GLSL

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1422
Site web

Re: Modulo Shader GLSL



Bon testé avec Gem, alors le modulo c'est chouette pour créer un espèce d'effets 'scanlines'

par contre même truc que toi turbo, le if s'execute pas si == 0.0
zarbi...
c'est pas juste le if qui serait en cause ici ?? (et pas le modulo qui en fait retournerait quelque chose de correct mais qui serait pas interprété comme on le veut ??)


La réalité, c'est pour qui ne sait pas gérer autre chose.
http://cumulonimbus.fr/ | http://tetalab.org | http://mixart-myrys.org

Hors ligne

 

#8 2012-12-14 12:11:44 Re : Modulo Shader GLSL

nononononono
membre
Lieu: Toulouse
Date d'inscription: 2011-02-04
Messages: 608

Re: Modulo Shader GLSL



testé, dslé, j'ai dit une connerie

Hors ligne

 

#9 2012-12-14 12:13:01 Re : Modulo Shader GLSL

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1422
Site web

Re: Modulo Shader GLSL



et dans le même genre, avec :

float tintin = mod(gl_FragCoord.y , 2.0);
if (tintin != 0.0){
     gl_FragColor = vec4(1., 1., 1., 0.);
}

me fait une image toute transparente... donc oui apparemment le mod() retourné n'égale jamais 0...
et je saurais pas dire pourquoi smile


La réalité, c'est pour qui ne sait pas gérer autre chose.
http://cumulonimbus.fr/ | http://tetalab.org | http://mixart-myrys.org

Hors ligne

 

#10 2012-12-14 14:55:44 Re : Modulo Shader GLSL

Turboconnard
membre
Lieu: Lyon
Date d'inscription: 2012-01-13
Messages: 42
Site web

Re: Modulo Shader GLSL



En fait il semblerait que tester des égalités strictes sur des floats soit une mauvaise idée. En gros faut pas tester == 0.0 mais < 0.2.
ça laisse une bonne marge d'erreur.


[ Viande for life ! ]

Hors ligne

 

#11 2012-12-14 15:36:18 Re : Modulo Shader GLSL

Turboconnard
membre
Lieu: Lyon
Date d'inscription: 2012-01-13
Messages: 42
Site web

Re: Modulo Shader GLSL



Question subsidiaire bonus à 12 000 points,
ya moyen que le background d'of (ofBackground)  soit aussi pris en compte par le frag shader ?


[ Viande for life ! ]

Hors ligne

 

#12 2012-12-14 20:13:04 Re : Modulo Shader GLSL

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1422
Site web

Re: Modulo Shader GLSL



Ouais turbo mais j'imagine que pour ça, va falloir que tu passes par un render2texture...


La réalité, c'est pour qui ne sait pas gérer autre chose.
http://cumulonimbus.fr/ | http://tetalab.org | http://mixart-myrys.org

Hors ligne

 

#13 2012-12-15 15:45:18 Re : Modulo Shader GLSL

Turboconnard
membre
Lieu: Lyon
Date d'inscription: 2012-01-13
Messages: 42
Site web

Re: Modulo Shader GLSL



Pour infos, j'ai trouvé le pourquoi du 0,5 ! en fait les coordonnées retournées par gl_fragCoord ne sont pas entière !

citation :

gl_FragCoord may be redeclared with the additional layout qualifier identifiers origin_upper_left or pixel_center_integer. By default, gl_FragCoord assumes a lower-left origin for window coordinates and assumes pixel centers are located at half-pixel centers. For example, the (x, y) location (0.5, 0.5) is returned for the lower-left-most pixel in a window. The origin of gl_FragCoord may be changed by redeclaring gl_FragCoord with the origin_upper_left identifier. The values returned can also be shifted by half a pixel in both x and y by pixel_center_integer so it appears the pixels are centered at whole number pixel offsets. This moves the (x, y) value returned by gl_FragCoord of (0.5, 0.5) by default to (0.0, 0.0) with pixel_center_integer.

la doc précise qu'a moind d'essayer de faire un truc compatible avec DirectX ya pas besoin de changer ça... ouf, ça me rassure de comprendre, j'aime pas les "flous artisitiques"


[ Viande for life ! ]

Hors ligne

 

#14 2012-12-15 15:59:37 Re : Modulo Shader GLSL

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1422
Site web

Re: Modulo Shader GLSL



haha ok, bon à savoir

Dernière modification par rep (2012-12-15 16:03:17)


La réalité, c'est pour qui ne sait pas gérer autre chose.
http://cumulonimbus.fr/ | http://tetalab.org | http://mixart-myrys.org

Hors ligne

 

#15 2012-12-17 23:18:51 Re : Modulo Shader GLSL

caracteriel
membre
Date d'inscription: 2011-07-03
Messages: 130

Re: Modulo Shader GLSL



pourquoi un modulo sur des floats devrait renvoyer un entier ?

En fait sur les anciennes versions de gcc, le compilateur plantait.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2018