テクスチャを生成するスクリプトを見つけようとしています(その後、グレースケール画像を掛けて「適用」できます)。これまでの私の方法では、RNG をシードし、[0,3] の範囲の整数の 8x8 マトリックスをランダムに生成し、そのマトリックスをあるレベルの補間を使用して 256x256 画像にスケールアップします。
出力例を次に示します (シード値 24)。
(出典: adamhaskell.net )
左側は、最近傍補間でスケーリングされた行列です。右側は、双一次補間での私の試みです。ほとんどの場合は問題ないように見えますが、左中央付近のように、斜めに隣接する 2 つのオレンジ色の正方形が対角線上に隣接する 2 つの赤い正方形に面しているような構造が得られます。その結果、その領域は補間されません。さらに、ヒートマップのように扱われているため (左上隅の豊富なオレンジ色で示されているように)、より多くの問題が発生しています.
「双一次補間」のコードは次のとおりです。
<?php
$matrix = Array();
srand(24);
$dim = 256;
$scale = 32;
for($y=0;$y<=$dim/$scale;$y++) for($x=0;$x<=$dim/$scale;$x++) $matrix[$y][$x] = rand(0,3);
$img = imagecreate($dim,$dim);
imagecolorallocate($img,255,255,255);
$cols = Array(
imagecolorallocate($img,128,0,0),
imagecolorallocate($img,128,64,32),
imagecolorallocate($img,128,128,0),
imagecolorallocate($img,64,64,64)
);
for($y=0;$y<$dim;$y++) {
for($x=0;$x<$dim;$x++) {
$xx = floor($x/$scale); $yy = floor($y/$scale);
$x2 = $x%$scale; $y2 = $y%$scale;
$col = $cols[round((
$matrix[$yy][$xx]*($scale-$x2)*($scale-$y2)
+ $matrix[$yy][$xx+1]*$x2*($scale-$y2)
+ $matrix[$yy+1][$xx]*($scale-$x2)*$y2
+ $matrix[$yy+1][$xx+1]*$x2*$y2
)/($scale*$scale))];
imagesetpixel($img,$x,$y,$col);
}
}
header("Content-Type: image/png");
imagepng($img);
exit;
実際には、これはちょっとした XY 問題かもしれません。私が具体的にやろうとしているのは、計画中のゲームでクリーチャーの「ファー パターン」を生成することです。特に、繁殖が2つの親からの要素(色やパターンの要素)を混合できるようにしたいので、ランダムなシードを持つだけでは実際にはうまくいきません。理想的には、ある種のベクトルベースのアプローチが必要ですが、私はそこから抜け出しているので、助けていただければ幸いです。