問題タブ [heightmap]

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.

0 投票する
2 に答える
3785 参照

webgl - ディスプレイスメント マップ UV マッピング?

概要

ディスプレイスメント マップ (高さマップ) をかなり単純なオブジェクト (六角形の平面) に適用しようとしていますが、予期しない結果が得られます。私はグレースケールを使用しているため、高さマップはメッシュの Z 値にのみ影響するはずであるという印象を受けました。ただし、作成したディスプレイスメント マップは、メッシュを X 平面と Y 平面に広げます。さらに、他のすべてのテクスチャが正常に適用されている、私が作成した UV マッピングを使用していないようです。

モデルと UV マップ

これは、私の六角形メッシュの参照画像と、それに対応する Blender の UV マップです。

六角形モデルと UV マップ

拡散テクスチャとディスプレイスメント テクスチャ

これらは、Three.JS を使用してメッシュに適用している拡散マップ テクスチャとディスプレイスメント マップ テクスチャです。

六角形の拡散とディスプレイスメント テクスチャ

レンダリング

ディスプレイスメント マップを使用せずに平面をレンダリングすると、六角形の平面が線内にとどまっていることがわかります。ただし、ディスプレイスメント マップを追加すると、頂点の Z だけでなく X と Y の位置に明確に影響し、平面が線の上に拡張されます。

六角形平面レンダリング -- ディスプレイスメント マップあり/なし

コード

関連する Three.js コードは次のとおりです。

仮説

なぜこれがうまくいかないのかについて、私は現在3つの可能性をジャグリングしています:

  1. UV マップがディスプレイスメント マップに適用されません。
  2. ディスプレイスメント マップを間違って作成しました。
  3. ディスプレイスメントを Z のみにロックするプロセスの重要なステップを見逃していました。

そしてもちろん、秘密のオプション #4 は上記のどれにも当てはまらず、自分が何をしているのかまったくわかりません。または前述の任意の混合物。

実際の例

ここで実例を見ることができます。

この件についてより多くの知識を持っている人が私を導くことができれば、私はとても感謝しています!

編集 1 : 提案に従って、私はコメントアウトしcomputeFaceNormals()computeVertexNormals(). わずかに改善されましたが、メッシュはまだ歪んでいます。

0 投票する
1 に答える
5620 参照

terrain - 六角形グリッドのハイトマップ生成の微調整

現在、ちょっとした楽しみのために小さなプロジェクトに取り組んでいます。OpenGL を使用した C++、WinAPI アプリケーションです。

六角形のグリッドでプレイされる RTS ゲームになることを願っています。基本的なゲーム エンジンが完成したら、さらに拡張する予定です。

現在、私のアプリケーションは、頂点と高さマップの情報を保持する VBO で構成されています。高さマップは、中点変位アルゴリズム (ダイヤモンド スクエア) を使用して生成されます。

六角形グリッドを実装するために、ここで説明したアイデアを採用しました。通常のグリッドの奇数行を下にシフトして、複雑になりすぎずに六角形を比較的簡単にレンダリングできるようにします (願っています)。

数日後、まとまり始め、マウス ピッキングを追加しました。これは、グリッド内の各ヘックスを一意の色でレンダリングし、この FBO 内の特定のマウス位置をサンプリングして、選択したオブジェクトの ID を識別することによって実装されます。セル (下のスクリーンショットの右上に表示されます)。

ここに画像の説明を入力

私のプロジェクトの次の段階では、より「プレイ可能な」地形の生成を検討したいと考えています。私にとってこれは、各六角形の形状が上の画像に見られるものよりも規則的であることを意味します。

だから最終的に私のポイントに来て、そこにある:

  • 六角形のすべての点を 1 つの平面 (同一平面) に配置する現在の方法で頂点を平滑化または調整する方法。

編集:ここでポイントを共平面にする方法に関する情報を探している人にとっては、素晴らしい説明です。

  • この種のことのより良い制御を可能にする手続き型地形生成へのより良いアプローチ。
  • これを可能にする別の方法で頂点情報を表現する方法。

明確にするために、私は隆起したエッジまたはプラットフォーム (以下に示すように) を備えた平らな六角形のグリッドを実現しようとしているわけではありません。

ここ)

すべてのジオメトリが結合して次のビットにつながるようにしたいと思います。

私は現在のようなもの (起伏のある丘と地形は比較的良好) を達成したいと思っていますが、台地はより制御しやすくなっています。これにより、必要に応じてより詳細なメッシュを追加できる、後で領域 (再生できないタイル) をコード化する柔軟性が得られます。

フィードバックは大歓迎です。私はこれを学習演習として使用しています。すべてのコメントを歓迎します。

0 投票する
1 に答える
558 参照

compression - ハイトマップはどのくらい圧縮できますか?

私は単純な地形生成 (ダイヤモンド スクエア アルゴリズム) で遊んでいて、実際にどのくらいの規模でそれを行うことができるかを考え始めました。

大陸を生成したい場合は1000 by 1000 km正方形で十分ですが、高解像度も必要な場合は、すぐに巨大なファイル サイズになります。1000 by 1000 km = 1100 万平方キロメートルなので、1 メートルごとに点を保存すると、1 平方キロメートルは 100 万平方メートルになります。

unsigned shorts (最大高度 10,000 メートル) を使用し、正しく計算すると、2 TB のデータになります。もちろん、一度にすべてを RAM に保存することはできませんでしたが、HDD 容量が日々安くなっていても、2TB のハイトマップは実用的ではありません。

データを圧縮することを考えなければなりませんでしたが、これまで圧縮を行ったことがなく、どこまで縮小できるか見当もつきません.2 から1.9 TBになったら、それは価値がありません. データを失わずに最適な圧縮方法は?

ハイトマップのサイズと解像度を下げても構わないと思っていますが、できるだけ大きくしたいと思っています。

0 投票する
1 に答える
698 参照

c# - 球体C#に張られたハイトマップで高さを見つける

数学のヘルプを探しています。2D ハイトマップが生成され、長さ/方向の式を使用して球体に引き伸ばされるゲームがあります。ここで、ハイトマップ上の 2 点間の高さを計算する方法を知る必要があります。

私が知っていること:

  • ハイトマップを保持する配列
  • オブジェクトに対するラジアン単位の角度
  • ハイトマップ上にいくつのポイントがありますか

私の問題は次のようになります。

画像

その他の画像

赤と青の線は高さマップの 2 つのポイントで、水色は高さを計算したい場所です。

これを行うための現在のコードは次のとおりですが、うまく機能しません。

私の植生コードから、これは問題なく動作するように見えますが、1 つのハイトマップ ポイントのみを使用するため、ユニットが移動すると上下にジャンプするため、ユニットなどに使用するのは大雑把です。

0 投票する
1 に答える
3485 参照

opengl - C++ OpenGL キューブ パーリン ノイズを球体にマップする

私は現在、主に楽しみのためにいくつかのプラネットジェネレーションに取り組んでおり、いくつかのキックアスプラネットで終わることを望んでいます. 正規化によって球にマップされたキューブを使用しています。惑星の地形と空

この写真では、地形はまだ適切にテクスチャリングされていません。これは、Heightmap からの単なるレンダリングです。しかし、これは私の問題ではありません。立方体から球を作成すると、6 つの面が球の形に曲げられたままになります。したがって、地形の周りに球状の高さマップをラップするために使用できる緯度と経度がありません。現在、キューブ マッピングを使用しています。ただし、ご覧のとおり、これによりいくつかの問題が発生しました。 立方体から球体へのマッピングの問題 —私の問題が明らかになる場所。問題は、球体がまだ立方体のトポロジーを持っているという事実によるものです。顔ごとに高さマップを生成する必要があります。現在、ハイトマップに Libnoise を使用していますが、ここから大きな問題が発生します。球体の高さマップとしてエクスポートするか (球体があれば便利です)、6 つの面すべてにマップする必要がある平面の高さマップを使用できます。ただし、マッピングの仕組みによります。3 つの面を中央に並べてシームレスにすることはできますが、Lib ノイズが境界を使用して座標のグリッドを作成するため、最後のハイトマップは最初のハイトマップに結合しません。

球はこのように作成されます—

この背後にある理由は、ここで見ることができます。

ただし、球体の構造により、後で Quad-Ttee の形で lod を実装しやすくなります。LibNoise を使用してキューブ マップの高さマップを生成できる方法はありますか? または、球が球状の高さマップを使用できるようにするためにできることはありますか?

Sphere Maps を使用してレンダリングする方法を見つけましたが、クアッド ツリーを使用するとうまくいきません。ただし、次のような素晴らしい結果が得られます。

ここに画像の説明を入力

そのため、ノイズをキューブ マップにタイル表示する方法を知る必要があります。Libnoise または頂点シェーダーのいずれかで。

0 投票する
3 に答える
965 参照

c# - プラズマ スタイル フラクタルを使用した高さマップ生成中のアーティファクト

私は今日、ランダムな地形生成がどのように行われる傾向があるかを調査するために数時間を費やし、プラズマ フラクタル (中点変位とダイヤモンド スクエア アルゴリズム) について読んだ後、実装を試してみることにしました。私の結果は実際にはひどいものではありませんでしたが、これらの恐ろしい正方形/線/グリッドタイプのアーティファクトがあり、取り除くことができないようです!

グレー スケール イメージとしてレンダリングすると、高さマップは次のようになります。

明らかに、これにはかなりの量のコードが含まれていますが、関連するものだけを投稿しようとします。たとえば、テクスチャに変換するコードを投稿していませんが、高さの配列を滑らかなグラデーションで埋めようとしただけで、テクスチャが正常に表示されることを心配する必要はありません:)

まず、マップの 4 つのコーナーを 0 から 1 の間のランダムな値に設定してから、再帰的な変位アルゴリズムを開始します。

TerrainData は単純に float* の 2D 配列です。Vector2_I は、私自身の整数ベクトル クラスです。最後の 4 つの関数は、再帰関数である MidPointDisplace、2 つのデータ値を平均してノイズを追加する CalculateTerrainPointData、4 つのデータ値を平均してノイズを追加し、わずかに高いスケール値を持つ CalculateTerrainPointData2 (中心点にのみ使用されます) です。 atm は単なるランダム ノイズであり、パーリンなどの実際のノイズではありません。次のようになります。

時間を割いて見てくれてありがとう - 誰かがこのグリッドのようなパターンがどこから現れているか知っていることを願っています:)

*編集 - 間違って int を書きました。float に修正しました

0 投票する
1 に答える
883 参照

java - lwjgl を使用した Java ハイトマップ

ハイトマップをコーディングしましたが、クライアントに遅れがあるようです。fpsを上げる方法がわかりません。ハイトマップで約3〜6fpsになります。高さマップにかなり大きな bmp を使用しています。1024x1024 だと思います。小さい方をうまく使用すると、コードを効果的に使用していないだけかもしれません。この高さマップをコーディングするより良い方法はありますか、それともコーディングが間違っていましたか? ハイトマップに取り組んだのは初めてです。ありがとう

0 投票する
1 に答える
2885 参照

opengl - 高さマップアーティファクトからの法線マップ

高さマップからフラグメントシェーダーで法線マップをベイク処理しています。高さマップは見栄えがよく、滑らかに見えます。ただし、法線マップを生成すると、非常に奇妙な結果が得られます。

これが問題を示す2つのレンダリングされた画像です。1つはすべての照明計算を含み、もう1つはメッシュの上に法線マップ画像を適用しています。 Normapマップ

ここに画像の説明を入力してください

法線マップをベイクする方法は、フラグメントシェーダーで隣接するピクセルをサンプリングすることです。

メッシュは32x32で、法線マップと高さマップは64x64です。隣接するピクセルをサンプリングするフラグメントシェーダーコードは次のとおりです。

texturePosは、頂点シェーダーでvertexPosition.x / 128として計算されます(頂点間の距離が4ピクセルであるため、128です。したがって、32 * 4 = 128)。

なぜ私の結果はとても奇妙なのですか?

0 投票する
1 に答える
3913 参照

java - 画像なしでheightMapを生成する

ロードするたびに新しいハイトマップが生成されるように、ワールドジェネレーターを作成したいと思います。これを行うために、2D整数配列を使用しています。寸法は、x、z、および高さ(y)です。

地形をランダム化する簡単な生成アルゴリズムはありますか?

0 投票する
1 に答える
2945 参照

algorithm - 動的な高さマップを生成するための優れたアルゴリズムは何ですか?

動的なハイトマップ生成のためのいくつかのアルゴリズムを研究したいのですが、よく知りません。さらにダイナミックに。多次元ハイトマップがどのように機能するかについての理論は何ですか? つまり、洞窟とオーバーハングです。複数の高さマップ イメージまたは複雑なアルゴリズムを使用する必要がありますか?