2011-01-05 12 views
1

にsquarsに変身私は、私は波を作成するとき、それは円として出始めるように思え http://www.gamedev.net/reference/articles/article915.asp水の波及効果を作成しようとしていますが、波紋は、OpenGL

からもらった水流アルゴリズムを使用しています。時間が経過すると、円は散逸し、45°、-45°、45°の角度で線を描く。だから、もはや波のように見えませんが、正方形のような形です。

これは、波を開始するためのコードです:

WaveMapPingc(int x,int y,int rd, int str) 
{ 
    for(float a=0; a<3.14159*2; a+=.1) 
    { 
     for(int r=1; r<rd;r++) 
     { 
      // LowWaveMapPingca(x+(int)((float)r*cos(a)+.5) ,y+(int)((float)r*sin(a)+.5),str); 
      WaveMap[CT] 
      [x+(int)((float)r*cos(a)+.5)] 
      [y+(int)((float)r*sin(a)+.5)]=str; 
     } 
    } 
} 

これは、高さマップを生成するコードです:

UpdateWaveMap() 
{ 
    int x,y,n; 

    int Temporary_Value = CT; 
    CT = NW; 
    NW = Temporary_Value; 

    // { Skip the edges to allow area sampling } 
    for(y= 1; y<MAXY-1; y++) 
    { 
     for(x= 1;x< MAXX-1; x++) 
     { 
      n = (WaveMap[CT][x-1][y] + 
        WaveMap[CT][x+1][y] + 
        WaveMap[CT][x][y-1] + 
        WaveMap[CT][x][y+1])/2 - 
       WaveMap[NW][x][y]; 

      float sub=(float)n/DAMP; 
      int isub=sub; 

      if (n<1 && isub==0) 
       n++; 
      else 
       if (n>1 && isub==0) 
        n--; 
       else 
        n = n-isub; 
      WaveMap[NW][x][y] = n; 
     } // x 
    } // y 
} // function 
+0

スクリーンショットはありますか? – genpfault

答えて

1

あなたは位置のために、整数を使用しています。これにより、あらゆる種類の量子化問題(頂点の位置、すなわち)が導入されます。

私は、浮動小数点での処理がスムーズになるようにしたいと思います。

0

私はこの最初のリップルシミュレーションからこの効果を知っています。解決策:より詳細な畳み込みカーネルを使用してください。リップルを散逸させるためにダンピングファクタを追加して、暴走の積分に数値エラーが蓄積しないようにすることもできます。これは私の初期のゲームエンジンの一つから関連する部分である(その1 10年前に書いた):

*value_at(Next, x, y)=(
    (
    (*value_at(Current, x-1, y-1)+ 
    *value_at(Current, x+1, y-1)+ 
    *value_at(Current, x+1, y+1)+ 
    *value_at(Current, x-1, y+1))+ 

    (*value_at(Current, x-1, y)+ 
    *value_at(Current, x+1, y)+ 
    *value_at(Current, x, y-1)+ 
    *value_at(Current, x, y+1)) 
)/4 
    -(*value_at(Previous, x, y)) 
)*0.98; 

が効果的にこれは、畳み込みを使用して個別の波動関数を計算しています。カーネルの解像度が高ければ高いほど、品質は良くなります。 SIMD最適化を使用すると、ここで本当に役立ちます。しかし、畳み込みはフーリエ空間での単純な乗算であるため、高品質の波紋や波に興味がある場合は、フーリエ法を使用してこのことを行うことをお勧めします。いくつかの微調整を使用すると、重力波も生み出すことができます(一般相対性理論のものと混同しないでください)http://en.wikipedia.org/wiki/Gravity_wave

+0

こんにちは、私は同じ理想を考えました。 –

関連する問題