問題タブ [terrain]
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.
c# - XNA VertexBuffer for Terrain Editor
私は、多くのXNAプロジェクトと同様に、Device.DrawIndexedPrimitives()
呼び出しでレンダリングされる頂点のコレクションを生成するために使用される地形変位マップから開始した個人的なプロジェクトに取り組んでいます。
カスタムVertexDeclaration
に更新しましたが、現在そのコードにアクセスできないため、少し古いが、パラダイム的に同一の(?)コードを投稿します。
私は次のように定義してVertexBuffer
います:
ここで、「頂点」は次のように定義されます。
VertexPositionNormalTexture[] vertices
また、Update()の反復ごとに交換される2つのインデックスバッファーがあります。Draw()
呼び出しで、私はバッファを設定しましたGraphicsDevice
:
無関係なコード行を無視して、境界形状内をチェックして、頂点がマウスカーソルの特定の半径内にあるかどうかを判断し、押されたキーに応じて頂点の位置を上下させるメソッドがあります。私の問題はVertexBuffer.SetData()
、コンテナクラスの初期化時にが1回だけ呼び出されることです。
配列の頂点位置を変更してVertexPositionNormalTexture[]
も、頂点位置の値は変更されますが、画面には反映されません。これは呼び出しに関連していると思いますが、頂点配列を変更した後でVertexBuffer.SetData()
単純に呼び出すことはできません。SetData()
IndexBufferの処理方法(2つのバッファー、スワップされ、一度に渡される)を再検討した後、SetData()
これが操作Update()
を処理する方法であると思いますが、これは機能しますか?VertexBuffer
より適切な方法はありますか?ここで同様の質問への別の参照を見ましたが、ソースへのリンクはMegaUploadにあったので...
私は自分のVertexBuffer.Swap()
アイデアを試してみますが、私はまた、参照を見てDynamicVertexBuffer
、何が得られるのか疑問に思いますか?パフォーマンスはおそらく低下しますが、地形エディタの場合、頂点データを動的に操作できれば、それがあまりにも大きなトレードオフになるとは思いません。
さらにコードを投稿することはできますが、これはおそらく、デバイスバッファーがどのように設定されているか、またはデータがそれらにストリーミングされているかについての理解が不足していると思います。
編集:以下に提案された解決策は正しいです。すぐにコードを投稿します。
terrain - ボクセルベースの地形の適切な密度関数?
私はなんとかC#でマーチングキューブアルゴリズムを実装することができました。これまで、球をレンダリングするアルゴリズムを試しました。密度関数のコーディングはそれほど複雑ではないため、これは簡単な方法です。
しかし今、私はアルゴリズムをさらに進めて、ゲームのためにいくつかの興味深い地形をレンダリングしたいと思っています。したがって、このタスクには適切な密度関数が必要です。私の頭に浮かぶ最初のことは、体積パーリンノイズです。それは大丈夫ですが、私は凸状の形のない地形を探しています。つまり、現時点では洞窟や同様の形状はありません。
わかりました。そのためには、単純な高さマップで十分ですが、ボクセルで生成された地形が必要です。それらを実装するには、どのタイプの密度関数または擬似コードが必要ですか?
python - Pythonからアクセスできるシンプルで高速な3Dエンジンとは何ですか?
フラクタル地形ジェネレーターを試しています(木などを使って、かなり詳細な作業を行うことを考えています)。高速の3Dエンジンが必要です。必要なのは、線や面を描いたり、カメラを動かしたり、シンプルにしたりすることだけです。
2d - グリッドベースの等高線フォーマットへの高さマップのマッピング
次の形式の 2D 高さマップがあります
そして、それをグリンベースの輪郭形式に再マップする必要があります(さらにスプライトにマップできるようにするため)
ここでは、平坦なエリア、まっすぐな崖、崖の角 (それぞれ 2 つの異なる可能性を表しています).
を意味します。|
-
/
\
標準的なマーチング スクエア アプローチを試してみましたが、隣接するケースに過負荷がかかるため、3 つの近傍のみをサンプリングすると、かなり多くの問題が発生することがわかりました。(下の余分な場違いなまっすぐな崖に注意してください)
私が望むのは、この種の処理に役立つアルゴリズム/アプローチへの参照です。ある種の深さ優先検索を使用した輪郭ウォーキングがオプションであることは知っていますが、まだ試していないため、最後の手段として残しておくことをお勧めします。一部のフィーチャの表現の問題もあります。たとえば、1 要素の厚さの崖の尾根を含めるか、単に無視するかです。もう 1 つのオプションは、生成された輪郭を通過させ、それらを変更して滑らかに適合させることですが、これは本当にハックに思えます...
java - 2D 地形生成のための Java Perlin ノイズ
更新: 質問の正式なリスト:
- 2D ノイズ実装の float 値 (入力パラメーターと出力の両方) は何を表していますか? -部分的に回答しました。入力は座標です。アウトプットはどうですか?また、整数を座標の浮動小数点数として使用できますか? 1.0、122.0など?
- 2D ノイズ ジェネレーターにシードを実装する良い方法は何ですか? 3rd パラメータをシードとして使用する 3D ノイズ ジェネレータにする必要がありますか? それは、各シードが固有の 2D ノイズを生成できることを意味しますか?
- 2D マップに沿って、ビットマップの生成も同じように見えます。出力からビットマップを生成するにはどうすればよいですか? 浮いていると考えられます。
私の質問は、カット アンド ペースト パーリン ノイズ 2D 実装の float 値 (入力パラメーターと出力の両方) は何を表しているのですか? それらからビットマップを生成するにはどうすればよいですか? 何らかのデータ型の 2 次元配列を取得できれば、それを使用して地形をシミュレートする方法を理解できるはずです。
そして、それらの値を確実にシードできるのであれば、カット アンド ペーストの実装を使用します。それは質問の他の部分です。ここで見つけた未回答のものです。- ノイズ ジェネレーターにシードを実装する良い方法は何ですか?
わかりました、この質問が何度も聞かれていることを理解していますので、私が調査して発見したことを説明させてください.
まず、こちらのサイトを見つけました。これは、私に説明してくれた勝者のようです。しかし、その後、別の質問を思いつきましたが、ここでは完全には答えられませんでした。
それから私は自分の手を汚して、私が選んだ言語である Java でコーディングしようとしました。これを見つけたので、答えとして与えられたハッシュ関数をノイズ関数として試してみました。そこでシードを使用できるからです。その後、チュートリアルの残りのプロセスに従うためにフロートを返さないという問題に遭遇しました。ふりだしに戻る。その過程で、パーリン ノイズに関する質問があるサイトをさらに多く見つけました。
ここで、実装が機能していないため、まだ考えもしていなかった未回答の質問を見つけました。リンクはもう見つかりませんが、コピーして貼り付けた実装があったとしても、関数に入力する浮動小数点数は何ですか?マップ上の x と y である INTEGERS を渡す必要があると言われました。カット アンド ペーストの実装からも float 出力を取得します。それらはどういう意味ですか?それらの2Dはどうですか?物事を整数のままにしておくことができれば、それは私の脳では理にかなっていますが、ある意味では、それらを整数のままにしておくことは、連続曲線の値を補間および平滑化するのに妥当ではないことがわかります。
directx - Minecraft スタイルの地形でのブロックの処理 (d3d/c++)
何千もの立方体で構成される 3D 地形 (Minecraft など) で、位置とレンダリングに関して各ブロックを処理する方法は何ですか? より具体的には、キューブのプリミティブを描画し、それを directX 9 のあらゆる場所で変換する世界は、パフォーマンスの問題が非常に多いため、これを達成するためのおそらくばかげた方法であることを知っています。
各立方体は何度もコピーされるメッシュであるべきですか、それとも頂点バッファー内のデータから適切なメッシュを作成する方法ですか?
実装したいものを実装するための背後にある理論の一部を説明しているこの記事を見つけましたが、これまで octrees を使用したことがないため、ソース コードから多くを引き出すことができませんでした。八分木が実際に進むべき道である場合、それらについて学ぶための良い出発点はどこですか? 私のグーグル検索のほとんどは、実装例がほとんどまたはまったくない理論に関するブログ投稿しか見つかりませんでした。
これを行うにはボクセルを使用すると便利なようですが、オクトリーと同様に、私はここでの経験がないので、最初に何を勉強すればよいかよくわかりません。
とにかく、あなたが惜しまないアドバイス\リソース\本の名前に感謝します。当たり前のことだと思いますが、私はまだ 3D プログラミングに非常に慣れていないので、助けていただければ幸いです。
python - ポイントの文字列で定義された断面から固定グリッド上に 3D 標高を作成します
1m または 0.5m 間隔の固定グリッド上に 3D サーフェスを作成しようとしています。このサーフェスは、多数のポイントの断面によって定義されるチャネルです。理想的には、任意の数のポイントである必要があります。たとえば、次のような断面です。
PTS = [[0.0,10.0],[3.0,9.0],[30.0,8.5],[33.0,8.0],[35.0,7.8],[37.0,8.0],[40.0,8.5],[67.0,9.0] ,[70.0,10.0]] ここでの水路は幅 70 m で、二重の台形断面を持っています。
私はこれをコーディングしようとしましたが、日付に失敗しました:
ポイントを読み取り、間隔に基づいて補間して、計算された標高 (Z 値) を提供したいと考えています。これにより、X & Y のドメインが入力され、3D 地形の XYZ 値が提供されます。
この例では、幅 70 m の長さ 1500 m のチャネルを作成することになっています。
コード:
計算ドメインの設定
コードが X を横断するとき、基本的な Z は傾斜したベッドを提供し、定義された断面は、Y の範囲にわたって Z を作成します。
理想的には、これを x 方向だけに適用するのではなく、ポリラインに沿って適用することもできます。こうすることで、チャネルを曲線に沿って作成したり、たとえば S 字型に曲げたりできます
これを解決する方法について、誰かが賢いアイデアを持っていることを願っています...ありがとう
scipy がここで役立つ可能性があると述べられていました.... ポイント間を補間する関数を作成するために、これを理解しようとします。
from scipy.interpolate import interp1d
x = np.linspace(0, 10, 10)
y = np.exp(-x/3.0)
f = interp1d(x, y)
f2 = interp1d(x, y, kind='cubic')
xnew = np.linspace(0, 10, 40)
matplotlib.pyplot を plt としてインポート
plt.plot(x,y,'o',xnew,f(xnew),'-', xnew, f2(xnew),'--')
plt.legend(['data', 'linear', 'cubic'], loc='best')
plt.show()
xna - XNAランダム化タイル/地形生成チュートリアル?
私はランダム化されたタイル生成(2D)をプログラムする方法についての良いチュートリアルを見つけようとしてきました。しかし、私はそれに関する適切なチュートリアルを見つけることができないようです。
それをプログラムする方法とその背後にある数学についての適切なチュートリアルを備えた本やウェブサイトはありますか?
これ自体はプログラミングの問題ではないことはわかっていますが、プログラミングに関連しているので、誰かが1つか2つのリンクで私を助けてくれることを願っています。
geometry - 傾斜カメラの場合の地形タイルスケール
現在、3D地形視覚化ツールに取り組んでいます。表面は論理的に正方形のタイルで覆われています。このタイリングは、次のように視覚化できます。
これらのタイルに絵を描きたいとしましょう。写真の詳細レベルは、タイルごとに個別に計算される現在のカメラスケールに従って選択する必要があります。
垂直カメラ(傾斜なし、つまりカメラが地面に対して垂直に見える)の場合、すべてのタイルは同じスケールで、カメラの焦点距離を地上のカメラの高さで割ったものになります。
次の図は状況を示しています。
ここで、赤い三角形は傾きのないカメラ、BGは地上からのカメラの高さ、EGは焦点距離、スケール= AC / DF = BG / EG
ただし、カメラに傾きがある場合(つまり、ピッチ角が0でない場合)、スケールはタイルからタイルに(ポイントからポイントにさえ)変更されます。
それで、その場合、タイルごとに合理的なスケールを生成するための親切な方法があるのだろうか?
java - 水と土地を区別するためのアルゴリズム
水と土地の違いを見分けるアルゴリズムを考え出そうとしています。0(黒い四角)と1(灰色の四角)だけを保持する2D配列があり、この画像が生成されます。水域の1つを青に着色したので、水と思われるものがわかります。水は大きくて丸い形をした領域です。一部の陸地を緑色にしました。真っ直ぐな黒い線はすべて陸地であると想定されており、いくつかの小さな丸い形も同様です。
現在、すべての黒い領域は0として表され、すべての灰色の領域は1として表されています。したがって、図では、緑と青のスポットは両方とも同じものとして表されています。代わりに、いくつかの黒い領域(水)を2として表す必要があります。これを行うための良い方法は何ですか?私がこれまでに思いついた最良のことは、各ブラックスポットの面積を計算し、特定のしきい値を超える領域のみを水にすることです。私はもっと良い方法があると思います、そしてあなたたちがどう思うか疑問に思っています。