分形着色器

julia setmandelbrot set 实现

效果预览

主要代码

float real = (v_uv0.x-0.5)/zoom + offset.x;
float image = (v_uv0.y-0.5)/zoom + offset.y;
float r2 = 0.0;
float conut = 0.0;
for(float i = 0.0; i < 9999.0; i++){
  float tmp_real = real;
  // 计算新的复数-实数部分
  // f(n+1) = f(n)*f(n) + c
  // (a+bi)*(a+bi) + c = a*a - b*b + (2*a*b)i + c_real + (c_image)i
  real = (tmp_real*tmp_real) - (image*image) + c_real;
  // 虚数部分
  image = 2.0*tmp_real*image + c_image;
  // 复数大小的平方
  r2 = real*real + image*image;
  conut = i;
  if(r2 >= 4.0){
    break;
  }
}
if(r2 < 4.0){
  o = v_color;
}else{
  o = vec4(mix(outColor1.rgb, outColor2.rgb, fract(conut*0.07)), 1);
}

更多精彩

更多内容讲解可以看这篇文章

完整代码

欢迎关注【白玉无冰】公众号~

5赞

效果不错,实际使用性能消耗巨大

:joy: 把迭代次数调小一些,这样可行不?

有意思

我想起了一个大学教授说的 “人理解迭代,神理解递归”

imaginary怎么缩写成image,

##niubility

好顶赞!!

多看一会就中了万花筒血轮眼了

无限狗头?