Ich versuche quadratische Textur Texel in die Mitte der Textur folgenden Zeit zu bewegen. Der folgende Code macht seinen Job, wenn ich nicht möchte, dass das Pixel verschwindet, wenn es das Zentrum der Geometrie erreicht (eine Ebene) und für jetzt wird es nur immer kleiner, während die Zeit zunimmt und die Textur scheint wie kontrahiert zu sein.Verwenden von Shader, um Texel zu seiner Mitte zu bewegen
uniform float time;
varying vec2 vUv;
void main() {
vec2 center = vec2(0.5, 0.5);
vec2 newPosition = vec2(vUv.x + t * (center.x - vUv.x), vUv.y + t * (center.y - vUv.y);
gl_FragColor = texture2D(texture, vec2(newPosition.x, newPosition.y));
}
Edit:
Betrachten Sie das als ein schwarzes Loch in der Textur Mitte.
t liegt zwischen 0,0 und 1,0? – Robinson
t wird immer in der Renderschleife erhöht: (d. H. T + = 0.01) – socrateisabot
Dann wird die Disparität zwischen 'vUv.x' und' t * (center.x - vUv.x) 'weiter wachsen. Bei 't = 0.0 'hast du' (vUv.x, vUv.y) 'und' t = 1.0' hast du '(center.x, center.y)'. Was Sie hier wirklich haben, ist 't * center - (1.0 - t) * vUv '- nach' t> 1.0' für Pixel links von der Mitte ist dieser Wert positiv und rechts von der Mitte ist es negativ, also Anstatt Ihre Textur zu verschieben, skalieren Sie sie tatsächlich (und spiegeln sie auch). Haben Sie versucht, 'vec2 (vUv.x + t * center.x, vUv.y + t * center.y)' stattdessen zu verwenden? –