私たちはiPhoneとWindows Phone 7のプロジェクトに取り組んでおり、カップの底に茶葉を生成できるようにしたいと考えています。写実的な外観である必要はなく、実際には漫画でも構いません。
これを達成するためにどのようなテクニックを研究する必要がありますか?役立つライブラリ(Cが望ましいが、翻訳は可能)はありますか?
Google画像検索から抜粋したサンプルをいくつか示します
私たちはiPhoneとWindows Phone 7のプロジェクトに取り組んでおり、カップの底に茶葉を生成できるようにしたいと考えています。写実的な外観である必要はなく、実際には漫画でも構いません。
これを達成するためにどのようなテクニックを研究する必要がありますか?役立つライブラリ(Cが望ましいが、翻訳は可能)はありますか?
Google画像検索から抜粋したサンプルをいくつか示します
回答:
アートコントロールを維持し、プロシージャメソッドを微調整して適切に調整するために長い時間を費やさないようにするには、どうすればよいでしょうか。
最初に、アート「プール」として茶葉の塊のスプライトの数を手動で作成します。それぞれをカップ全体の茶葉としてではなく、より小さなグループのようにします。20人くらいですか
次に、それらのランダムな数を「カップ」ベースのランダムな座標に配置します。それぞれにランダムな回転とスケール、さらにランダムな水平および/または垂直ミラーリングを与えます。これは良い結果を生むはずです。
このアプローチにより、さまざまな結果を可能にしながら(十分なスプライトから選択できる場合)、個々の束を希望どおりの外観で作成する芸術的な自由が得られます。
さらに、これ(およびPerlinノイズベースを含む任意のランダムメソッド)を使用すると、プロセスの開始時に実際に乱数ジェネレーターに既知のシードをシードして、再現可能な結果を得ることができます。シードを保存すると、シーケンスが開始する直前に再シードすることにより、同じパターンを正確に再作成できます。誰かに名前を入力させ、文字を数字(ASCIIの合計など)に変換し、それをシードとして、「このティーリーフのYOUに合わせてカスタマイズしたパターン」のようなものとして使用することもできます。事。
ここに私が意味するもののいくつかの疑似コードがあります、それが役立つ場合...
var sprites = [...]; // Array of tea leaf sprites
var n_leaves = rand(5)+5; // Random number of leaves from 5-9
for (i=0; i<n_leaves; i++) {
var sprite_index = rand(sprites.length); // Random sprite index
var r = rand(CUP_DIAMETER); // Random radius for point on disk calc
var theta = rand(2*PI); // Random theta (rotation) for point on disk
var sprite_x = sqrt(r) * cos(theta); // Sprite X
var sprite_y = sqrt(r) * sin(theta); // Sprite Y
var sprite_rotation = rand(2*PI); // Sprite rotation
var sprite_scale = rand(1) + 0.5; // Sprite scale from 0.5 to 1.5
var sprite_h_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror horizontally
var sprite_v_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror vertically
draw_sprite(sprite_index, sprite_x, sprite_y, sprite_rotation, sprite_h_mirror, sprite_v_mirror);
}
ディスク内のランダムなポイントを選択する方法と、なぜ私がそのsqrt / sin / cos全体を使用しているのかについてのすばらしい議論については、http://mathworld.wolfram.com/DiskPointPicking.htmlをチェックしてください。
バイナリカットオフ値が0.8程度のパーリンノイズを試しますか?
サンプル画像をhttp://imgur.com/a/Ydc4yにアップロードしました。最初の画像は、しきい値が適用された2番目の画像です。2つ目は基本的なパーリンノイズで、http://en.wikipedia.org/wiki/Perlin_noiseやhttp://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.htmlなどの複数の優れたリファレンスがあります。
パーリンノイズのオクターブの数とスケールで少し演奏して、出力がどの程度滑らかになるかを変更したり、しきい値を設定して、茶葉の量(平均として-ノイズ)を決定したりできます。