ฉันพยายามทำให้shader นี้ทำงานบน iDevice ที่เก่าแก่มากรวมถึง Android ในที่สุด
แม้ว่าฉันจะลดรหัสให้เหลือ 2 ฟังก์ชันไซน์ต่อชิ้นส่วน Shader ก็ทำงานที่ประมาณ 20fps
ฉันได้พิจารณานำใบไม้ออกมาจากหนังสือเทคนิคการแรเงาแบบเก่าและสร้างอาร์เรย์ที่เก็บค่าตรีโกณมิติที่กำหนดไว้ล่วงหน้าจำนวนหนึ่งและใช้วิธีเหล่านั้นเพื่อประมาณค่าส่วนแบ่ง
ใน shader ฉันเชื่อมโยงด้านบนฉันได้จำลองแล้วว่าการปัดเศษค่าที่ส่งไปยังฟังก์ชันตรีโกณมิติยิ่งปล่อยเมาส์ (ขณะลง) ให้คุณภาพของ shader ยิ่งน้อยลง จริงๆแล้วมันค่อนข้างเท่ห์เพราะอยู่ใกล้กับทางด้านซ้ายมันดูเหมือนแตกต่างอย่างสิ้นเชิงและเท่ห์มาก ๆ
อย่างไรก็ตามฉันมีสองประเด็นขัดแย้ง:
- ฉันไม่ทราบว่าวิธีที่มีประสิทธิภาพมากที่สุดในการมีอาร์เรย์ค่า 360 เช่นอะไรใน GLSL shader ค่าคงที่หรือสม่ำเสมอ?
ฉันไม่สามารถหาวิธีใส่ตัวเลขในช่วงปกติได้ถ้าฉันต้องการมุมระหว่าง 0 ถึง 360 (ใช่ฉันรู้ว่า GPU ใช้เรเดียน) ฉันจะทำเช่นนั้น
func range(float angle) { float temp = angle while (temp > 360) {temp -= 360;} while (temp < 0) {temp += 360;} return temp; }
อย่างไรก็ตาม GLSL ไม่อนุญาตในขณะที่ลูปหรือฟังก์ชั่นวนซ้ำ
mod
ฟังก์ชันในตัวคือสิ่งที่คุณต้องการ mod(angle, 360.0)
คุณจะเขียน