Eu tenho esse pequeno código que calcula alfa dado x. É bem simples:
float a(float x) {
// subdivision = 4 and sizeRatio = 1
x = x * subdivision;
float i = int(x);
return pow((x - i - 0.5) * 2.0, 6.0 / sizeRatio)/5;
}
Como não é nada tão complicado, consigo visualizar o resultado esperado no GeoGebra. Como desejado, a função aumenta até 1, e depois diminui depois de 1, e isso para todo inteiro.
Mesmo no Excel, usando a mesma fórmula que uso no código GLSL
=POWER((x-FLOOR.MATH(x)-0,5)*2; 6)
:
Então, quando estou executando meu shader, espero ter um gradiente duplo. O problema é que tenho apenas um gradiente, aquele entre 0,5 e 1, e nada entre 1,0 e 1,5 etc. Tentei substituir int(x)
por floor(x)
, mas o resultado é o mesmo.
O que causa essa diferença?