問題タブ [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.
c - 地形を .raw ファイルに書き込むにはどうすればよいですか?
Perlin ノイズを使用して地形を生成し、.raw ファイルに保存したいと考えています。
Nehe の HeightMap チュートリアルから、.raw ファイルは次のように読み取られることがわかっています。
}
pHeightMap
は 1 次元なので、x、y 対応を高さの値にどのように書き込めばよいかわかりません。Ken Perlin のページでlibnoiseまたはnoise2 関数を使用して、1024x1024 マトリックスの各値をポイントの高さに対応させることを計画していましたが、.raw ファイルは 1 つの次元に格納されています。どうすれば x を作成できますか? y 通信の仕事がありますか。
xna - ハイトマップからレンダリングされた地形のサイズ
私は XNA にまったく慣れていないので、「ばかげた」質問をしてすみませんが、答えが見つかりませんでした。
高さマップからレンダリングされた地形に問題があります。取得した地形が小さすぎます。ゲームにはもっと大きなものが必要ですが、高さの tdata を更新しておきたいので、後で衝突を確認できます。(高さデータは、各ポイントの高さを保持する 2 次元配列です。私のプログラムでは、「dateInaltime」と呼ばれています)。
問題は、地形の縮尺を変更すると、コリジョン チェッカーが (元の/小さな地形からの) 古い値を使用するため、間違ったコリジョン ポイントが得られることです。
私の地形クラスは次のようになります。
地形を大きくするだけでなく、高さのデータ配列を拡張するにはどうすればよいですか?
2d - グリッドベースの等高線フォーマットへの高さマップのマッピング
次の形式の 2D 高さマップがあります
そして、それをグリンベースの輪郭形式に再マップする必要があります(さらにスプライトにマップできるようにするため)
ここでは、平坦なエリア、まっすぐな崖、崖の角 (それぞれ 2 つの異なる可能性を表しています).
を意味します。|
-
/
\
標準的なマーチング スクエア アプローチを試してみましたが、隣接するケースに過負荷がかかるため、3 つの近傍のみをサンプリングすると、かなり多くの問題が発生することがわかりました。(下の余分な場違いなまっすぐな崖に注意してください)
私が望むのは、この種の処理に役立つアルゴリズム/アプローチへの参照です。ある種の深さ優先検索を使用した輪郭ウォーキングがオプションであることは知っていますが、まだ試していないため、最後の手段として残しておくことをお勧めします。一部のフィーチャの表現の問題もあります。たとえば、1 要素の厚さの崖の尾根を含めるか、単に無視するかです。もう 1 つのオプションは、生成された輪郭を通過させ、それらを変更して滑らかに適合させることですが、これは本当にハックに思えます...
c++ - 高さマップの値を読み取って地形を生成する方法は?
OpenGLでハイトマップ画像を使って地形を作ろうとしています。実験として、4x4 ピクセルの画像を使用します。これは拡大したスクリーンショットです。ピクセルが見えるようにします。
これは私のコードの一部です。
次に、次の結果を得ています。
(0,0)、(1,1)、(2,2)、および (3,3) のゼロ値 (y 座標) を期待しています。しかし、結果は異なります。期待した結果が得られないのはなぜですか?
c++ - パーリンノイズの問題
パーリンノイズ関数を作成しました。私の問題は、ノイズから地形図を生成すると、ブロック状になってしまうことです。これまでに見た雲のような画像とは異なります。私は自分が間違っていること(もしあれば)に興味があります。これが私のコードです:
main.cpp
perlinnoise.cpp
c++ - C++ と Qt で 16 ビットの raw ファイルを画像として表示するにはどうすればよいですか?
ビデオ ゲーム バトルフィールド 2 の高さマップをアプリケーションで画像として表示しようとしています。
私は C++ と Qt が初めてで、簡単かもしれませんが、問題があるのはグレースケールの16-bit 1025x1025 2101250
バイト画像を表示することです。ファイルにヘッダーはありません。表示されたピクセルにアクセスする必要があるため (ピクセル単位の精度である必要はありません)、ピクセルをポイントしてその値を取得できます。
私が試したこと
バイナリ データをQByteArray
QFile からロードし、QImage::fromData
関数を使用して画像を作成しようとしましたが、多くの間違いを犯し、多くの時間を費やしています。ここに投稿することで、私が進歩するために必要な手がかりが得られることを願っています. これが私のコードです:
ここから、どうしようか迷ってしまいます。Qt のドキュメントをいくつか読んだことがありますが、この問題を理解して解決策を得るには、初心者なので正しい方向へのガイドが必要です。
私はほとんど初心者なので、思いもよらなかった簡単な解決策を軽視しないでください。Qtフレームワークを使用してこれを行いたいと思います。
java - OpenGLハイトマップローダー
LibGDXハイトマップローダーをチェックして見つけましたが、buildIndices()コードがどのように機能するのかよくわかりません。また、128 * x * 128のハイトマップチャンクしか生成されない理由もわかりません。128より大きいもの(1024など)を使用すると、ローダーが次のように混乱します。
1024チャンク
ご覧のとおり、山には穴があり、チャンクの形状は128*1024メッシュとしてレンダリングされます
128チャンク
128*128チャンクで完全にOK
これが私のコードです:
大きなチャンクが機能しないのはなぜですか?createIndices()(LibGDXコードではbuildIndices()と呼ばれます)はどのように機能しますか?
hlsl - シェーダーのハイトマップが機能しない
GPU ベースのジオメトリ クリップマッピングを実装しようとしていますが、地形に単純な高さマップを適用するのに問題があります。ハイトマップには、サーフェス フォーマットが「シングル」の単純なテクスチャを使用します。Catalinz の XNA ブログからテクスチャを取得しました。
私がやろうとしているのは、頂点ワールド座標でテクスチャから単一の float 値を取得し、その値を頂点の Y 値に適用することです。コード内に適用できる固定グリッドがないため、シェーダーを介して高さマップを適用しています。これまで試したことは、tex2Dlod
関数を使用することでしたが、出力がないか、0 の出力があるようです。Direct X バーテックス シェーダーのコードは次のようになります。
HeightmapSampler
ハイトマップ テクスチャのポイント ミラー サンプラーはどこにありますか。出力は次のとおりです。実際には標高がありません。
そして、これが私が使用している高さマップです:
c++ - Directx11を使用したハイトマップベースの地形の穴
現在、高さマップで作成された円柱状の地形に取り組んでいます。プログラムで行われることは単純です。領域のアルファ値を持つ地形の色のテクスチャがあり、それを非表示にしたいです。別のテクスチャARGBで、Aは高さのグレースケールで、RGBは光の法線。テクスチャは、A値が1から255になり、穴のある領域に0を予約しているようなものです。つまり、存在したくないということです。したがって、理論的には問題ありません。最初のテクスチャに基づいてこれらの領域を非表示にしますが、実際には、プログラムは0を最小の高さと見なし、テクスチャが上にある場合でも、これに向けていくつかの線を作成しています。 0の領域、
円柱の中心に向かう線に注意してください。これは、これらの頂点を非表示にするのをやめたときに取得される方法です。
つまり、ピクセルシェーダーで関数Clip()を使用して、ピクセルシェーダーを非表示にしました。
基本的に私が助けを必要としていること:ピクセルシェーダーでclip()を使用するのと同じ方法で、頂点シェーダーでそのようなことを行い、不要な頂点を取り除くことは可能ですか?基本的に、値0を無視すると言うことは可能ですか?これを修正するためのアイデアはありますか?私は、0であるすべての頂点を彼の隣人の値にすることを考えています。そうすれば、それらの線は中心ではなく、円柱自体と同じ平面に行きます。もう1つのことは、プログラムが1つの頂点から次の頂点に値を補間していることを確認できることです。そのため、非表示の頂点まで途中でカットします。
私はC++でDirectx11APIを使用しており、プログラムはテッセレーションを使用しています。
お時間をいただきありがとうございます。これに関するご意見をお待ちしております。