ใช่คุณพูดถูกเอฟเฟกต์น้ำ 2D นี้สามารถจำลองได้โดยใช้ฟังก์ชั่นคณิตศาสตร์ไซน์ :
wave = sin(phase + t * frequency) * amplitude
phase
เป็นค่าคงที่ใส่สิ่งที่คุณต้องการ
- ตั้งค่า
t
ตำแหน่งแนวนอนของพิกเซล / จุดสุดยอดที่คุณกำลังประมวลผล:t = x;
เปลี่ยนแปลงamplitude
ตลอดเวลา (ซึ่งจะทำให้คลื่นเคลื่อนที่ขึ้นและลง):
amplitude = sin(t * wave_speed) * wave_height
รวมคลื่นหลายลูกเข้าด้วยกันเพื่อให้ได้เอฟเฟ็กต์ relastic มากขึ้น:
wave_final = wave0 + wave1 + ...
.
สำหรับแต่ละคลื่นให้เปลี่ยนพารามิเตอร์เล็กน้อย (เช่น: เฟส, ความถี่, ... )
นี่คือตัวอย่างด่วนที่ฉันทำโดยใช้คลื่นเพียงสองคลื่น:
http://glslsandbox.com/e#4988.0 (ต้องใช้เบราว์เซอร์ล่าสุดและเปิดใช้งาน WebGL)
หมายเหตุ: นี่เป็น shader แต่การทำเช่นนี้โดยใช้วิธีดั้งเดิม 2D เป็นวิธีการเดียวกัน
แก้ไข: คุณไม่ได้ระบุกรอบงานหรือระบบการเรนเดอร์แบบ 2d แต่นี่คือวิธีการแสดงผลโดยใช้รูปหลายเหลี่ยม / แถบสามเหลี่ยม: