問題タブ [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.
terrain - 3D パーリン ノイズ関数を使用して地形を生成するにはどうすればよいですか?
2D パーリン ノイズ関数を使用して高さの値を生成することはできますが、3D パーリン ノイズ関数を使用する理由がわかりません。Notch のブログで、彼はMinecraft の地形生成に 3D Perlin ノイズ関数を使用することについて言及しました。それがどのように行われるのか、そしてなぜそれが役立つのか誰か知っていますか? x
、y
、および値を渡している場合、z
それはすでに高さを持っていることを意味しませんか?
opengl - GLSL-フラグメントの法線を計算する
地形のある地球儀を表示し、GPUですべてのLat / Long / Alt to XYZ(ECEF)を実行するプログラムを作成しようとしています。
経度、緯度、高度を(それぞれ)表すXYZを(ECEFを使用して)正しいXYZに変換する動作する頂点シェーダーを既に作成しました。
私が正しくできないのは照明です。
地形データがない限り、指向性ライトを使用して各頂点を正しく照らすことができました。地形データが正しく照らされておらず、正しい色合いを持つためにさまざまな勾配を取得できません。
これは私が使用している頂点シェーダーです:
地球儀グリッドを描画するには、次のことを行う必要があります。
地形を正しくシェーディングする方法を教えてもらえますか?
c# - XNA / C# で地形に複数のテクスチャをレンダリングする
XNA/C# で地形に取り組んでいます。私の意図は、地形全体の地面に複数のテクスチャをレンダリングできるようにすることです。ただし、このようなすべてのチュートリアルでは、約 3 ~ 4 個のテクスチャでしか実行できません。
私の考えは、現在、各色が特定のテクスチャを表す、異なる色 (RGBA) を持つテクスチャ マップを TGA で作成することです。色のアルファの量は、位置の頂点が持つべきアルファの量を表します。そして、ベーステクスチャがあります。
ただし、私はこの分野の初心者なので、入門ガイドが本当に必要です。これまでのところ、私は何も見つけることができませんでした。すべてのチュートリアルとリソースは、最新のゲームには多くのテクスチャがありますが、サポートするテクスチャの数は限られています。
rendering - ブロックを滑らかにする
ですから、ここで一般的な情報を入手したいと思っていますが、どこから始めればよいのかわかりません。リアルタイムの地形変形(高さマップだけでなく、穴や洞窟、トンネルを掘るようなハードコアな変形を意味します)を調査することを考えています。私のアイデアは、立体であるかどうかに関係なく、立方体を表す点の3D配列を作成することでした。 、および削除または追加できます。地形の完璧な曲率や高精度の変形を探していません。しかし、立方体(実際には実際のポリゴンではなく、単なる点)がメッシュ(非常に詳細なメッシュではない)に似たものに滑らかになるようにエンジンを作成したいと思います。意図は、地形の制限された変形能が必要なアルゴリズムを単純化し、うまくいけば必要なプロセッサパワーを減らすことです。
基本的には、Minecraftのようなものを作りたいのですが、世界は立方体ではなくメッシュでできているという錯覚を持っています。私はそれができるかどうかを確認し、それの最低限のデモを作成することに興味があります。しかし、どこから始めればよいのか、プログラマーの間で変形可能な地形の現在の状態はどうなっているのか、私にはわかりません。ボクセルやボリュームレンダリングなどに関する記事をいくつか見つけましたが、ライブプログラマーからの意見を聞きたいと思います。どう思いますか?
opengl - 頂点とインデックス バッファを GPU にアップロードする
私は地形エンジンを作成しており、地形が巨大ではないため、現在、地形 VB (頂点バッファー) と IB (インデックス バッファー) 全体を一度に GPU にアップロードしています。現時点では 256x256 です。
ここで、パーリン ノイズを使用して高さマップを生成する手続き型地形を作成したいとします。
もちろん、「パッチ」を生成し、パッチのすべての VB と IB を一度に GPU にアップロードすることもできますが、プレーヤーが遠くに移動して新しいパッチを生成する必要がある場合は、新しいパッチを生成してアップロードする必要があります。それらをGPUに。私が心に抱えている混乱や問題は次のとおりです。
VB と IB を GPU にアップロードするのは遅いですか? データが GPU にアップロードされるとき、プレーヤーはちらつきに気付きますか?
パッチの VB と IB を一度にすべてではなく、徐々に GPU にアップロードすると、パフォーマンスは向上しますか? 基本的に、VB と IB のサイズが重要かどうかを尋ねています。
この概念に関する情報は大歓迎です。
ありがとう!
shader - ハイコントラストシェーダー
NVidiaサイトで、見栄えはするものの、必要なものが提供されないシェーダーを見つけました。
これが画像です:
問題は、この小さな「バンプ」は1トンの三角形で構成されているということです。異なる三角形の間でより多くのコントラストを提供する、無料のシェーダーはありますか?
landscape - 既存の地形に基づくオンザフライの地形生成
この質問は、ここで提起された質問と非常によく似ています。
私の問題は、次のようなマップがあることです。
このマップは、2Dパーリンノイズを使用して作成され、作成された高さマップを実行して、対応する要素の高さまたは勾配に基づいて、地形内の各要素にタイプと色の値を割り当てます。これはかなり標準的です。マップ配列は2次元であり、画面サイズの正確な寸法(ピクセル/ピクセル)であるため、1200 x 800の生成では、リグで約2秒かかります。
次に、強調表示された長方形を拡大します。
明らかに、サイズが大きくなると、ディテールが失われます。そしてここに問題があります。その場で追加の詳細を作成し、プレーヤーが動き回るときにそれをディスクに書き込みたいと思います(プレーヤーは、グリッドに沿った動きに制限されたドットになります)。これを行うための2つのアプローチがあり、最初に頭に浮かんだのはすぐに実装したものです。
これは、前の画像の黄色のグリッドスペース(中央の左側)で強調表示されている、古い地形のサンプリングされた要素から作成された新しいバイアスされたローカル地形の拡大図です。ただし、このシステムでは大幅な変更が必要になります。たとえば、黄色のグリッドスペースの1つ上にあるユニットをビーチタイルに移動すると、地形が完全に変化します。
したがって、それが正しく機能するためには、過度の量を実行する必要があります。プレーヤーが次の場所に到達するために必要なローカル世界の40ほどのグリッドスペースを移動したときにスムーズな遷移を作成するために、単語は補間になると思います。世界中でタイル張り。それは複雑で非常にエレガントではないようです。
2番目のアプローチは、元のマップのグリッドを小さなビットに分割し、各正方形を4で割ることです。私はこれを実装しておらず、実際に詳細を増やす方法がわかりませんが、おそらくそれが最善の解決策になると思います。
これにどのようにアプローチできるかについてのアイデアはありますか?ローカルでオンザフライである必要があることに注意してください。地図の解像度を上げるだけでは、絶対に避けたいと思います。
python - 標高/高さフィールドの作成gdalnumpypython
python、gdal、numpyを使用して標高/高さフィールドラスターを作成したいと思います。私はnumpy(そしておそらくpythonとgdal)で立ち往生しています。
numpyでは、私は次のことを試みてきました:
osgeoimportgdalからgdalconstimportから*
シンプルなものが欠けていると思いますので、アドバイスをお待ちしております。
ありがとう、
クリス
(後で続く)
- terragendataset.cpp、v 1.2 *
- プロジェクト:Terragen(tm)TERドライバー
- 目的:TerragenTERドキュメントのリーダー
- 著者:Ray Gardener、Daylon Graphics Ltd. *
- GDALドライバーから派生したこのモジュールの一部
- フランク・ウォーマーダム、http: //www.gdal.orgを参照
RayGardenerとFrankWarmerdamに事前にお詫び申し上げます。
Terragenフォーマットノート:
書き込みの場合:SCAL =グリッドポストの距離(メートル単位)hv_px = hv_m / SCAL span_px = span_m/SCALオフセット=TerragenDataset:: write_header()を参照scale = TerragenDataset :: write_header()を参照物理hv =(hv_px-offset)* 65536.0 / scale
発信者に次のように伝えます。
これは、上記のWriteArray(somearray)の前に、GeoTransformとSetProjectionおよびSetUnitTypeの両方を(潜在的に)機能させるために設定する必要があることを示しています。
GDAL APIチュートリアルから:Python import osr import numpy
過度に長い投稿と告白を作成してしまったことをお詫びします。これが正しければ、すべてのメモを1か所(長い投稿)にまとめておくと便利です。
告白:
以前に写真(jpeg)を撮り、それをgeotiffに変換し、タイルとしてPostGISデータベースにインポートしました。現在、画像をドレープするための標高ラスターを作成しようとしています。これはおそらくばかげているように思えますが、私が尊敬したいアーティストがいますが、同時にこれらの優れたツールの作成と改善に熱心に取り組んできた人々を怒らせません。
アーティストはベルギー人なので、メーターが適切です。彼女はニューヨークのロウアーマンハッタン、UTM18で働いています。上記の写真はw=3649 / h = 2736です、これについて少し考えなければなりません。
別の試み:
明らかに近づいていますが、SetUTM(18,1)がピックアップされたかどうかは不明です。これはハドソン川の4x4ですか、それともLocal_CS(座標系)ですか?サイレントフェイルとは何ですか?
もっと読む
4x4メートルはかなり小さな論理スパンです。
だから、おそらくこれはそれが得るのと同じくらい良いです。SetGeoTransformは単位を正しく取得し、スケールを設定して、Terragenワールドスペースを作成します。
最終的な考え:私はプログラムしませんが、ある程度は従うことができます。そうは言っても、私は最初に私の小さなTerragen World Spaceでデータがどのように見えるか疑問に思いました(http://www.gis.usu.edu/~chrisg/python/2009/第4週に感謝します):
ですから、これは満足のいくものです。上記で使用したnumpycとこの結果の違いは、この非常に小さな論理スパン全体にFloat16を適用するアクションにあると思います。
そして「hf2」へ:
私はラコンコルディアペルーにいるように見えますが、ほぼ完全に満足しています。だから私は、ニューヨークの北のように、もっと北のように言う方法を理解する必要があります。SetUTMは、「北または南の距離」を示唆する3番目の要素を取りますか。昨日、赤道でC、ニューヨークエリアでTまたはSのような文字ラベルゾーンがあるUTMチャートに出くわしたようです。
私は実際、SetGeoTransformが本質的に左上の北と東を確立していると思っていました。これは、SetUTMの「南北の距離」の部分に影響を与えていました。gdal-devに移動します。
そして後でまだ:
パディントンベアはチケットを持っていたのでペルーに行きました。そこに行きたいと言ったのでそこに着きました。Terragenは、そのように機能して、ピクセルスペースを与えてくれました。その後のsrsの呼び出しは、hf2(SetUTM)に作用しましたが、東と北はTerragenの下で確立されたため、UTM 18が設定されましたが、赤道のバウンディングボックスにありました。十分です。
gdal_translateは私をニューヨークに連れて行ってくれました。私はウィンドウズにいるので、コマンドラインです。そしてその結果。
だから、私たちはニューヨークに戻ってきました。これらすべてにアプローチするためのより良い方法がおそらくあります。numpyからのデータセットも仮定/即興していたので、Createを受け入れるターゲットが必要でした。作成を許可する他の形式を調べる必要があります。GeoTiffでの標高は可能性です(私は思います)。
すべてのコメント、提案、および適切な読書に向けた穏やかな微調整に感謝します。Pythonでマップを作成するのは楽しいです!
クリス
algorithm - 2つの入力からの疑似乱数ジェネレータ
float型の2つの入力から[-1、1](範囲はオプション)の範囲の数値を取得する疑似乱数ジェネレーターが必要です。
また、なぜそれが必要なのかを説明しようと思います。
地形エンジンの高さマップを作成するために、Diamond-Squareアルゴリズムを使用しています。地形はパッチに分割されます(チャンクLOD)。
Diamond-Squareの問題は、ランダム関数を使用することです。たとえば、2つの隣接するパッチが同じポイント(x、z)を共有している場合、クラックが発生しないように、すべてのパッチの高さを同じにします。効果。
隣接するパッチから高さ情報を取得できると言う人もいるかもしれませんが、パッチが最初に作成された後は結果が異なる可能性があります。
そのため、(x、z)という2つの入力が与えられた場合に一意の数値を返す疑似乱数ジェネレーターが必要です。
(私は誰かにそのような関数を書くように頼んでいません、私はただ一般的なフィードバックや同様のことをする既知のアルゴリズムが必要です)。
java - 中点変位地形アーティファクト
Java で中点変位アルゴリズムを実装しようとしています。ダイアモンド スクエア アルゴリズムとも呼ばれます。私の参照はhttp://www.lighthouse3d.com/opengl/terrain/index.php3?mpdです。右端と下端以外は正しく動作しているようです。
よく見ると、「粗い」エッジが見られます。誰が間違っているのか指摘できますか?この効果は、このアルゴリズムの他のオンライン実装では観察されていません。
コード
注釈
この部分では、変数displacementBound、デフォルト値に初期化されたdoubleの2D配列、およびiterationsと呼ばれる別の変数を定義します。
この部分でループが宣言されます。mPDIterationsループに対して実行されます。その場しのぎの配列Bを作成してAの更新バージョンを保持し、BをAより大きくして新しいデータ ポイントを保持します。その後、2 つの for ループがあり、1 つは別の内部にネストされています。これは、Aの現在の値を一時的なBに配置し、他のすべての行と他のすべての列を空白のままにします。次の例を見てください。
次のコードは次のとおりです。
このセクションでは、中心のすべての点 (北、南、東、西のすべての基本方向に空の隣接セルがあるセルを参照) に、隣接する 4 つの角点から平均化された値が与えられます。変位値がそれに追加されます。これをダイヤモンドステップと呼びます。「センター」とは何かを明確にするには:
そして、次のコード セクション:
この部分は、コードの前のセクションに類似しています。中心ではない空の点にそれぞれ新しい値を割り当てます。この値は、北、南、東、西の基本方向に隣接する要素の平均であり、別のランダムな変位値が追加されます。これをスクエアステップと呼びます。上記のコードは、非中心点と空の点のみに新しい値が与えられることを保証します。これらのポイントは、以下で明確にされるサイド ポイントと同等です。
whileループを終了するセクションを以下に示します。
上記の記事に記載されている情報によると、変数の変位バウンドは、while ループの最後を構成する上記のセクションで削減されます。Aの内容は、ループの別の反復を開始または終了する前に、Bの更新された内容をAに割り当てることによって更新されます。
最後に、補助的なメソッドaverageFromCornersAndDisplace()、averageFromSidesAndDisplace()、およびwrap()が含まれていますが、それらの追加の説明は不要です。メソッドrandomDisplacement()はまったく含まれていません。参考までに、指定された数値bによって境界付けられたランダムな浮動小数点数xを返します。