問題タブ [procedural-generation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 地形チャンクの整列(ダイヤモンド二乗アルゴリズム)
Minecraft風のチャンクを使用する地形エンジンをプログラミングしています。チャンクは、Diamond-squareアルゴリズムを使用して個別に生成されます。
問題は、これらのチャンクが整列しておらず、完全に分離していることです。私はそれらをそうさせるために多くのことを試みました、しかし今のところそれがそうするべきであるように何もうまくいきませんでした。
編集:また、私が作成しようとしている世界は無限ではありません。33x33のチャンクの配列を生成し、それぞれに別のダイアモンドスクエアジェネレーターによって割り当てられたグローバルな高さの値があります。
ダイアモンドスクエアエンジンを変更してチャンクを整列させる(簡単な、できれば)方法はありますか?
opengl - 頂点シェーダーで頂点を移動する
私のコードは、多数の頂点のグリッドを作成し、頂点シェーダーの高さのランダムなノイズ値によってそれらを置き換えます。を使用して移動
正常に動作しますが、それはグリッドの端まで行くことができることを意味します。
カメラの位置をシェーダーに送信し、ディスプレイスメント全体をシェーダーでオフセットすることを考えました。したがって、最終的な頂点シェーダーコードは次のとおりです。
編集:欠陥を修正しました。頂点自体が水平方向に移動しないようにする必要があります。
どういうわけか、これを実行してカメラの位置を変更すると、画面がちらつきますが、何も動きません。頂点はノイズ値によって正しく変位し、カラーリングとすべてが機能しますが、変位は移動しません。
参考までに、ここにgitリポジトリがあります:https ://github.com/Orpheon/Synthworld
私は何が間違っているのですか?
PS:「フリック」は間違っています。何も描かない位置もあれば、0位から通常のシーンを描く位置もあるので、止めずに動かすとちらつきます。でも、黒のままの場所、または正常な場所で停止できます。
android - Android - 周囲のタイルに基づいてタイル ビットマップを決定する
私はタイルベースの地形生成システムに取り組んできましたが、ちょっとした障害に遭遇しました。水と陸の間の遷移を示す一連の遷移タイルを作成したいと思っていますが、どのタイルがどれであるべきかを効率的に判断する方法を見つけるのに苦労しています。
私の最初の試み (下図) は基本的に、一連の if ステートメントを介して各タイルを実行し、どのタイルにするかを決定します。これに関する主な問題は、100 タイル x 100 タイルの世界地図では、10,000 回の反復を実行し、周囲の 8 つのタイルのデータにアクセスし (80,000 操作)、最大 4 つの if ステートメント (320,000 回) を実行することです。オペレーション)。これは恐ろしく非効率的で遅いように思えます。
この方法の利点は、土地タイルでのみ実行され、最初に少なくとも 1 つの水タイルに隣接していることを確認するため、必要な操作の数が大幅に削減されることです。
これは、周囲のタイルを見て回り、適切なタイルを選択する、私が作成した基本的なチャートです。
私の 2 番目のアイデアは、基本的にはタイルの中を歩き始め、海岸のタイルにぶつかったら、海岸に沿って両方向に進み、タイルを割り当てていくというものでした。このメソッドは、開始前にタイルがまだ把握されていないことを確認します。これに関する問題は、1 つは、それがどのように機能するかをまったく理解できないことです。2 つは、結果として、それがどれほど効率的であるかがわかりません。
友人が、うまくいくかもしれない 3 番目の方法について教えてくれました。水タイルを取り、それらを 0 に設定し、陸タイルを 1 に設定します。次に、周囲のタイルを取り、1 から 9 までの番号を付けます。そこからそれらを通り抜け、0 と 1 の文字列を作成します。
000011111 になります。
0*2^0 + 0*2^1 + 0*2^2 + 0*2^3 + 1*2^4 + 1*2^5 + 1*2^6 + 1*2^7 + 1* 2^8
0*1 + 0*2 + 0*4 + 0*8 + 1*16 + 1*32 + 1*64 + 1*128 + 1*126 = 496
理論的には、その組み合わせに関連付けられたタイルに番号 496 を割り当て、それに応じてロードするというものです。問題は、各エッジに 13 または 14 の組み合わせがあり、その組み合わせが使用されることです。例えば:
基本的に、この方法を機能させるには、特定のタイルになる可能性のある水と土地の組み合わせごとに最終的な数を計算し、最終的な数を一連の ifs / case で実行して、適切なものを選択する必要があります。ビットマップ。これは、if ブロックと同じかそれ以上に非効率的です。
それで、これらすべての実際の質問に来ます。これを行う別の方法、またはこれらの方法のいずれかをより効率的にする方法を知っている人はいますか?
graphics - タイル化不可能な 3D テクスチャからタイル化可能な 2D テクスチャを生成する
私はプロシージャル テクスチャ生成用のライブラリ ( https://github.com/mikera/clisk ) に取り組んでおり、これはうまくまとまり始めています。
私は現在、タイル化可能な 2D テクスチャを生成する良い方法を見つけようとしています。
妥当と思われるアプローチの 1 つは、(0,0) - (1,1) 2D テクスチャ空間を 3D テクスチャ内のサーフェスにマッピングし、サーフェスがテクスチャの左右のエッジと上下のエッジを接続するようにすることです。テクスチャ (トーラスなど)。そうすることで、2D テクスチャが自動的にタイル可能になるようにする必要があります。
私はすでに良い (タイル化できない) 3D テクスチャ (パーリン ノイズ、フラクタル ノイズなど) を持っているので、これは、任意の 3D テクスチャからタイル化可能な 2D テクスチャを作成できるようにする良い方法のようです。
だから私の質問:
- これは有効なテクニックですか?
- もしそうなら、歪みを最小限に抑えたり見栄えの良いタイリング効果を得るには、どのような種類のサーフェスにマッピングする必要がありますか?
- 注意すべき落とし穴はありますか?
haskell - Haskellの複合分布または複合分布からどのようにサンプリングできますか?
Haskellの仮想惑星のランダムな質量を生成しようとしています。バイモーダル分布(理想的には、2つの正規分布の重ね合わせ:1つは小さな惑星に対応し、もう1つは巨大ガスに対応)をサンプリングすることによって、これらの質量を生成したいと思います。一様分布を多数の分布に変換できる関数を提供する統計パッケージを見てきました。しかし、ディストリビューションの作成はサポートされていないようです。quantile
Double
Double
この特定のケースは、事前にサンプリングするためにいずれかのディストリビューションを選択することでハッキングされる可能性がありますが、特に後でディストリビューション全体を微調整する必要がある場合があるため、単一のディストリビューションでそれを実行したいと思います。最終的には、正規分布を空の調査からの実際のデータに置き換える可能性があります。
棄却サンプリングを自分で実装することを検討しています。これは、任意の分布をかなり簡単に処理できますが、かなり非効率的であり、ソリューションがライブラリとしてすでに存在する場合は、実装するのは確かに良い考えではありません。
構成された、または明示的に指定された分布からのサンプリングをサポートするHaskellライブラリはありますか?または、棄却サンプリングの既存のHaskell実装ですか?あるいは、2つの正規分布の合計のCDFの逆数の明示的な式はありますか?
php - らせんを記述する数式をループして XY 座標を生成する
xy (2D) 座標の形で渦巻銀河を生成しようとしていますが、数学は得意ではありません。
スパイラルに関する優れた情報源から次の情報を収集しました。
半径 r(t) と角度 t は、最も単純な螺旋であるアルキメデスの螺旋に比例します。したがって、式は次のとおりです。
(3) 極方程式: r(t) = at [a は定数]。
これから
(2) パラメータ形式: x(t) = cos(t) で、y(t) = sin(t) で、
(1) 中央方程式: x²+y² = a²[arc tan (y/x) ]²。
この質問は銀河の生成に触れたようなものでしたが、答えは散らばっていて、私が必要としているものにはまだ複雑すぎました (別名、私の数学の愚かな心はそれらを理解できません)。
基本的に、私がする必要があるのは、513x513 XY グリッド上にポイントを生成するために、PHP でスパイラル式を ~5000 回ループすることです。グリッドのサイズと必要なポイントの数は、将来変更される可能性があります。銀河が実際にどのように見えるかと同様に、これらの点を周波数と正確な数式からどれだけ逸脱できるかの両方で、渦巻きの原点に向かって重み付けすることをお勧めします.
この数学論文は、渦巻銀河の構造を説明する式について語っています。
私を完全に失うのは、数式を PHP でループできるものに変換する方法です!
javascript - 2 つの座標を 0 から 1 の間の疑似乱数値にマップする JavaScript 関数が必要です
追加要件:
関数の入力は 2 つの数値であり、整数である必要はありません
速度が主な関心事です。できるだけ速くする必要があります
出力が十分にランダムに見える限り、安全である必要はありません。
例:
編集 明確にするために:出力値は決定論的である必要がありますが、ランダムに見えます。
c# - ランダム 2D タイルマップ生成アルゴリズム
マインクラフトのように島の構造物や丘の構造物を生成する方法を誰か教えてもらえますか?
そのランダムな形状を生成するための適切な理論を探しているだけですが、定義された基本パターンを保持する必要があります..
のように: 島は丸みを帯びている必要がありますが、形状とスケールが異なります (最小/最大幅と高さ)。
または:川は直線であってはならず、曲線とランダムな幅を持つ必要があります。
またはさらに: ユーザーがまだ森の中を歩くことができるように木が配置されている、ある種の森を生成します (これは単純なものだと思います。コードが配置しようとした場合、木の周りのいくつかのブロックは空白のままにしておく必要があるとだけ言ってください)。最後の木の周りにもっと木があります)
そのようなことを行うために、どのような種類の数学を使用できますか?
チュートリアルや参考文献へのリンクがあれば幸いです。何時間も Web を検索しましたが、見つけたのは「ゲーム数学」か何かのような本を購入することだけでしたが、私の予算はゼロに設定されていました。
編集:
まず、下手な英語で申し訳ありません。
第二に、皆さんの回答に感謝したいと思います。これらは素晴らしい参考文献であり、私はそれについてより深く掘り下げるために多くの時間を費やします.
java - javaマルチスレッドパフォーマンススケーリング
このナンセンスを私に説明してもらえますか?基本的に配列を数学演算で埋めるメソッドがあります。I/Oなどはありません。現在、このメソッドの実行には約50秒かかり、コードは完全にスケーラブル(理論的には100%)なので、4つのスレッドに分割し、それらが完了するのを待って、4つの配列を再アセンブルします。今、私はクアッドコアプロセッサでプログラムを実行し、約15秒かかると予想していますが、実際には58秒かかります。そうです:時間がかかります!CPUが100%動作しているのがわかります。また、各スレッドが計算の1/4を実行し、スレッドの作成と配列の再アセンブルに合計で約1〜2ミリ秒かかることを知っています。このようなパフォーマンスの低下の原因は何ですか?CPUはその間何をしているのですか?コード: http: //pastebin.com/cFUgiysw
c# - このグリッドの余分なタイルを削除するにはどうすればよいですか?
私はタイルベースの 2D ゲームに取り組んでおり、マップの生成に小さな問題があります。
一般的な概念は、デフォルトで 1 つの部屋を作成し、X 個の部屋が構築されるか、Y 回の試行が失敗するまで既存の部屋から構築するというものです。
私が直面している問題はおそらく単純で、頭に浮かぶことはできませんが、丸で囲まれたタイルを削除するにはどうすればよいでしょうか? 生成された各マップは手続き型であるため、丸で囲まれたようなスポットがいつ表示されるか正確にはわかりませんが、目で簡単に見つけることができます...マップの後でそれらを処理するための包括的な方法を考えることはできません.はすでに生成されています。
目標は、必要のない場所で壁を二重にしないことです。マップの生成方法を変更したくはありませんが、事後に変更します。また、部屋の隅などをなくしたくありません。
私がやろうとしていることは、画像編集などで名前が付けられるような気がしますが、それは私の得意分野ではありません。