到目前为止,我已经设法开发了相同的解决方案,执行顶点着色器中的所有操作。性能速率是相似的,所以我可能会回到使用JavaScript执行操作。但是,实验着色器很有趣,所以这里是顶点着色器的代码,以防它帮助某人。
因此,首先使用复杂数字实现的功能(感谢 julesb ):
Define complex operations #define product(a, b) vec2(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x) #define conjugate(a) vec2(a.x,-a.y) #define divide(a, b) vec2(((a.x*b.x+a.y*b.y)/(b.x*b.x+b.y*b.y)),((a.y*b.x-a.x*b.y)/(b.x*b.x+b.y*b.y)))
然后在顶点着色器中执行转换:
uniform vec2 t; void main(){ vec2 z = vec2(position.x,position.y); vec2 newPos = divide((z+t),(vec2(1.0,0) + product((conjugate(t)),z))); gl_Position = projectionMatrix * modelViewMatrix * vec4(newPos, 0, 1.0); }