// グリッドのX/Y分割数 const int X_N = 64; const int Y_N = 64; // 座標値配列で、X/Y/Z座標を表すインデックス const int X = 0; const int Y = 1; const int Z = 2; // 頂点座標を格納する配列(最右次元は0=X,1=Y,2=Z) float vertex[ Y_N ][ X_N ][ 3 ]; // 頂点のZ方向速度 float vertexVZ[ Y_N ][ X_N ] = 0.0; // 頂点のZ方向の力 float vertexFZ[ Y_N ][ X_N ] = 0.0; // 領域の辺の長さ const float X_LENGTH = 4.0; const float Y_LENGTH = 4.0; // 単位面積あたりの質量密度 const float DENSITY = 10.0; // 張力 const float TENSION = 3.0; // 減衰力係数 const float FRICTION = 0.0; // 初期パルスの幅 const float PULSE_WIDTH = 0.3; // 初期パルスの高さ const float PULSE_HEIGHT = 2.0; // 自由端かどうか const bool FREE_END = true; /** * 1フレームあたり、力学計算(時間発展)を行う回数です。 * * 波を速くしたい場合、DTを荒くしたり、張力を上げると、 * 精度限界を超えて運動が発散してしまう場合があります。 * その回避策で、1フレーム内に細かいDTで繰り返し計算します。 */ const int UPDATE_PER_FRAME = 3; // シミュレーションの時間刻み const float DT = 0.01; // 格子点間距離(ポリゴンの辺の長さ) const float DX = X_LENGTH / (X_N-1); const float DY = Y_LENGTH / (Y_N-1); // 波モデルを配置する座標系 int waveCoordinate; // モデルのIDを格納する int waveModel;