1

このチュートリアルに従ってフラクタルをレンダリングしようとしています: http://blog.hvidtfeldts.net/index.php/2011/08/distance-estimated-3d-fractals-iii-folding-space/comment-page-1/#コメント-20302 「A REAL FRACTAL」の下のもの。問題は、レイにフラクタルが欠けていることです。得られるのは黒い画像だけです。私の光線はフラクタルを見逃していると思います。私の質問は:

"Scale" と "Iteration" に適切なデフォルトを使用する必要がありますか?

フラクタルを生成するコード:

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));

光線の構造は正しいですか?私の「メイン」メソッドのコード:

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));
4

1 に答える 1

0

レイマーチングでは、sin / cos のような関数は避けるべきです。光線の実装方法がわからない場合は、Inigo Quilez の作業 (非常にきれい) を確認できます: http://www.iquilezles.org/www/articles/terrainmarching/terrainmarching.htm

彼の他のサンプルもチェックする価値があります: http://www.iquilezles.org/www/index.htm

Mikael Hvidtfeldt Christensen のチュートリアルを試しているようですが、彼の優れたシェーダー エディターFragmentariumを確認しましたか? (サンプルも多数)

チュートリアル ページに Fragmentarium のスナップが表示されているようです。

おっと、この投稿は古いようです..

于 2014-06-24T09:58:51.237 に答える