Tôi đang cố gắng di chuyển hình vuông texture Texel đến trung tâm của kết cấu theo thời gian. Đoạn mã sau đang thực hiện công việc trừ khi tôi muốn điểm ảnh bị biến mất khi nó đến trung tâm của hình học (mặt phẳng) và bây giờ nó chỉ trở nên tăng thêm trong khi thời gian tăng lên và kết cấu dường như giống như ký hợp đồng.Sử dụng shader để di chuyển texel đến trung tâm của nó
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:
Hãy suy nghĩ về điều này như một lỗ đen ở trung tâm kết cấu.
t là từ 0,0 đến 1,0? – Robinson
t luôn luôn tăng trong vòng lặp render: (tức là t + = 0,01) – socrateisabot
Sau đó, sự chênh lệch giữa 'vUv.x' và' t * (center.x - vUv.x) 'sẽ tiếp tục tăng. Tại 't = 0.0' bạn có' (vUv.x, vUv.y) 'và' t = 1.0' bạn có '(center.x, center.y)'. Những gì bạn thực sự có ở đây là trung tâm 't * - (1.0 - t) * vUv' - sau' t> 1.0' cho các pixel nằm ngoài trung tâm, giá trị này là dương và ở bên phải trung tâm là âm, vì vậy thay vì di chuyển kết cấu của bạn, bạn thực sự mở rộng nó (và trên thực tế, cũng lật nó). Bạn đã thử sử dụng 'vec2 (vUv.x + t * center.x, vUv.y + t * center.y)' thay thế? –