Opengl 射线分形

Opengl 射线分形,opengl,raytracing,Opengl,Raytracing,我尝试根据本教程渲染分形:“真实分形”下的一个。问题是,我的光线缺少分形,我得到的只是一个黑色图像。我想我的光线错过了分形。我的问题是: 对于“规模”和“迭代”,我应该使用哪些合理的默认值 生成分形的代码: distanceFromPoint(vec3 z) { vec3 a1 = vec3(1,1,1); vec3 a2 = vec3(-1,-1,1); vec3 a3 = vec3(1,-1,-1); vec3 a4 = vec3(-1,1,-1); vec3 c;

我尝试根据本教程渲染分形:“真实分形”下的一个。问题是,我的光线缺少分形,我得到的只是一个黑色图像。我想我的光线错过了分形。我的问题是:

对于“规模”和“迭代”,我应该使用哪些合理的默认值

生成分形的代码:

distanceFromPoint(vec3 z) {
  vec3 a1 = vec3(1,1,1);
  vec3 a2 = vec3(-1,-1,1);
  vec3 a3 = vec3(1,-1,-1);
  vec3 a4 = vec3(-1,1,-1);
  vec3 c;
  int n = 0;
  float dist, d;
  while (n < Iterations) {
   c = a1; dist = length(z-a1);
   d = length(z-a2); if (d < dist) { c = a2; dist=d; }
   d = length(z-a3); if (d < dist) { c = a3; dist=d; }
   d = length(z-a4); if (d < dist) { c = a4; dist=d; }
   z = Scale*z-c*(Scale-1.0);
   n++;
  }
return (length(z) ) * pow(Scale, -float(n));

当光线行进时,应该避免使用像sin/cos这样的函数,因为它可能会很快变得非常昂贵。 如果不确定如何实现光线,可以检查Inigo Quilez的工作(非常整洁):

也值得检查他的其他样本:

看起来你正在尝试Mikael Hvidtfeldt Christensen的教程,你看过他的优秀着色器编辑器吗?(样本太多)

您的教程页面似乎显示了Fragmentarium中的快照


哎呀,这篇文章看起来很旧。

请发布整个着色器。你有没有试过仅仅渲染球体?请查看shadetoy网站上kali的作品,以获得完美作品的例子。
vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / u_ws.xy;
p.x *= u_aspect;

vec3 ro = 1.1*vec3(2.5*sin(0.25*ctime),1.0+1.0*cos(ctime*.13),2.5*cos(0.25*ctime));
vec3 ww = normalize(vec3(0.0) - ro);
vec3 uu = normalize(cross( vec3(0.0,1.0,0.0), ww ));
vec3 vv = normalize(cross(ww,uu));
vec3 rd = normalize( p.x*uu + p.y*vv + 2.5*ww );

float totalDistance = 0.0;
vec4 color = vec4(trace(ro, rd));