問題タブ [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 に答える
3811 参照

math - スケーリングされた地形のポイント (x、z) で地形の高さを正しく取得する方法

ハイトマップ イメージのすべてのピクセルをテレインに適切にマッピングするには、ハイトマップの実際の幅と長さより 1 単位少ない幅と長さのテレインになります。たとえば、幅がわずか 2 ピクセルの画像がある場合、各ピクセルはクワッドの各頂点にマップされます。2 ピクセルありますが、地形は 1 ユニットしかありません。

地形をスケーリングして、地形の端にある空のクワッドを埋めることで、この問題を「修正」しようとしています。ただし、(x,z) ポイントで地形の高さを取得しようとすると、これが問題になります。問題は、ご覧のとおり、正確にはスケーリングではありません。

まず、動作するコードを見てみましょう。スケーリングが不足しているクワッドを考慮していないもの。スケーリングなしで 1023x1023 の四角形 (実際には三角形を使用していますが、四角形で説明するのは簡単です) で地形を作成する 1024x1024 の高さマップがあります。

次に、次の関数に適切な引数を渡して、地形を 2000x2000 などにスケーリングします。

地形を描くときは、 と を使用stepWidthstepLengthて、それに応じて地形を適切にスケーリングします。地形はスケーリングされますが、1023 クワッドのみが使用され、常に 1023 であり、それ以上は使用されません (これで問題ありません)。ここで、ゲーム キャラクターを動かしていて、現在のプレイヤーの位置で地形の高さを取得する必要があるとします。xプレイヤーの位置と座標を取り、zその時点での高さを返す関数があります。しかし、地形の寸法はスケーリングされているため、関数に渡された をそのまま使用することはできませんxz次のように、正しいものを計算する必要があります。

その後、新しい 4 つの隣接する頂点を見つけ、すべての頂点の高さに対して双一次補間を実行して、プレーヤーの位置の正しい高さを計算するだけxですz

これはすべて正常に機能しています。地形が適切に描画され、すべての高さが適切に計算されます。私の問題は、この質問の冒頭で説明した「制限」を回避しようとするときです。

この問題を回避するために、スケール関数を次のように変更します。

地形のサイズ (上記のスケール関数に渡す値) が高さマップとまったく同じサイズ、つまり 1024x1204 であるとします。1.000977517106549364613880742913これにより、1023 クワッドが 0 から 1024 (地形のサイズ) に正確に収まるようにするステップが得られます。これまでのところ、地形は思った通りに描かれています。

本当の問題は、高さを計算することです。私は多くのことを試しましたが、上記の新しいステップ計算を考えるxと、正しいを計算しz、高さを返す関数で使用される方程式を理解できません。ダイビングと、以前のようにステップサイズを使用しても、うまくいきません。ステップの計算方法が少し異なり、以前ほど単純ではありません。xz

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

c# - 直線から曲線へ

流星クレーターの高さマップを生成する手法を考え出そうとしています。現時点では小さくてシンプルに保ち、クレーターの中心がマークされ、その半径内で、中心にどれだけ近いかに応じてその周囲のピクセルが色付けされる単純なアルゴリズムを持っています。

この方法の問題点は、V 字型のクレーターが生成されることです。より多くの「U」字型の結果が必要です。私は正弦波の使用に慣れておらず、流星の半径内にいくつのピクセルが存在する可能性があるかを考えると、補間が非常に速く機能しないと感じています。

助言がありますか?

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

c# - Graphical GlitchXnaGraphicsTutorial-デバッグ

私の地形は次のような奇妙な色になります:

http://tinypic.com/view.php?pic=307w421&s=7

ここで何がうまくいかないのか誰かが知っていますか?コードのどの領域で(概念的に)これをデバッグする必要がありますか?

アップデート:

これは、私の学校のチュートリアルに基づいています:http: //www.riemers.net/eng/Tutorials/XNA/Csharp/Series1/Starting_a_project.php

BasicEffectシェーダーを使用し、カメラ、高さマップから派生した3D頂点テレイン、基本的なライティング、基本的なソフト法線、最適化のためのバッファーなど、エンジンのさまざまな部分を作成しました。

VertexPositionColorNormal構造体:

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

c# - ハイトマップ上での流体の流れのシミュレーション

ハイトマップ上を移動する流体の量を概算する方法を探しています。私が考えることができる最も簡単な解決策は、小さな直径(<0.1m)の多数の描画されていない球として近似することです。次に、水面を表す目に見える平面を、球体の「上」の静止位置に配置します。私の知る限り、管理された物理エンジンには流体シミュレータが組み込まれていないため、質問があります。

実装には、球体の動きをシミュレートできる JigLibX などの物理エンジンを使用する必要があります。平面の高さを決定するために、グループの最上層にある各球体の最大高さを平均することを考えていました。

パフォーマンスが優れているとは思いませんが、リアルタイムで親しみやすいでしょうか? そうでない場合、このシミュレーションを使用して、動線を事前にベイクできますか?

これが理にかなっていることを願っています。これが実現可能かどうか、またはこれにアプローチするより良い方法があるかどうかについて、意見/提案が本当に欲しいです。

助けてくれてありがとう、ヴェナトゥ

(関連する場合、私のターゲット プラットフォームは C# を使用する XNA 4.0 です。現時点では Windows のみであるため、PhysX/Havok はシミュレーションの可能性がありますが、管理されたソリューションを好むでしょう)

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

3d - 多くのテクスチャがスプラッティング/ブレンドされた WebGL とハイトマップについて教えてください

WebGL のリアルタイム ストラテジー ゲームという新しい趣味のプロジェクトを開始したいと考えています。私の過去の RTS ゲームはシンプルで、XNA/C# で作成されていました。今、私はそれをウェブ上に置きたいと思っています。適切な地形が必要です。地形スプラッティングを理解/実装するのが難しいと思います。次のゲームでベイクできる優れた実装が既に利用可能ですか?

または、これをサポートするライブラリ/フレームワークはありますか?

複数のテクスチャをうまくブレンドした高さマップの地形を作成するのに役立つリソース/記事/チュートリアル/ライブラリ/フレームワークを探しています。

0 投票する
5 に答える
18047 参照

javascript - WebGL - ハイトマップを使用したテクスチャ付き地形

WebGL を使用して 3D 地形を作成しようとしています。地形のテクスチャを含む jpg と、高さの値 (-1 から 1) を含む別の jpg があります。

さまざまなラッパー ライブラリ (SpiderGL や Three.js など) を調べましたが、適切な例が見つかりません。(Three.js のように) コードが文書化されておらず、わかりません。どうやってするの。

誰かが私に良いチュートリアルや例を教えてくれますか?

Three.js http://mrdoob.github.com/three.js/examples/webgl_geometry_terrain.htmlに例があり、これはほとんど私が欲しいものです。問題は、山の色と高さの値がランダムに作成されることです。これらの値を 2 つの異なる画像ファイルから読み取りたいと考えています。

どんな助けでも感謝します。ありがとう

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

c++ - OpenGL 地形衝突検出

さて、プロシージャルに生成された地形があります ( http://www.swiftless.com/terraintuts.htmlに大まかに基づいています) 。

私はあなたが飛び回ることができるティーポット「飛行機」を手に入れました(三人称カメラ)

基本的には谷間などを無傷で飛ばすのが目的です。

私がうまくいかないのは、地形に衝突したかどうかを計算する方法ですか?

何か案は?

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

opengl - CUDA VBO を使用した OpenGL 高さマップの描画

以前ここで VBO に関していくつか質問をしましたが、受け取ったコメントから、新しいアプローチを採用する必要があると判断しました。

簡単に言えば、約512X512ポイントの大きなFLOAT配列で定義されたマンデルブロー集合を描画しようとしています。私のプログラムの目的は、ユーザーがズームと世界の向きを制御できるようにすることです (これは 3D モデルです)。これまでのところ、描画プロセスが遅いため、GL_TRIANGLE_STRIP を使用して全体を描画しましたが、これは悪い選択でした。また、私の描画スタイル (glVertex を呼び出す順序) を実装すると、VBO のコーディングが不可能になったためです。

それでいくつか質問があります。

この説明の後でも、計算を制御するのはユーザー次第であるため、VBOが最良の選択であるかどうかはわかりません.プログラムによって引き起こされる計算ごとに、マンデルブロセットを再計算し(〜60ms)、再コピーする必要がありますバッファへのポイント: 時間がかかるプロセス (?ms)。

このプログラムでは、ユーザーが世界を移動することもできるため、ここでは計算が行われないため、ここでは VBO が最適です。

1.高さマップを描画する最良の方法は何ですか (配列内の各セルが高さのみを保持する場合)

2.VBOに適用してcudaに転送するにはどうすればよいですか(cudaRegisterBufferなど)

3. モードを区別し、VBO が必要な場合 (計算なしモード) と必要でない場合 (計算モード) を決定する方法はありますか?

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

java - カスタムマップフォーマットを最適化する方法(Java)

高さマップを使用した、大きなオープンワールド(200×200キロメートル)がある3Dゲームを作成しています。ハイトマップを1000×1000メートルの200×200=40,000の領域に分割し、それらを再び20×20=50×50メートルの400チャンクに分割します。ハイトマップはPNGファイルから生成されます。

地形を保存する方法を考えています。試してみましたが、リージョンあたり約16MBのファイルが生成されます。これは全世界(40,000リージョン)で640GBです。

リージョンファイルの例はここにあります:http: //updo.nl/file/e10ce974.umap

私の質問:リージョンファイルにこれほど多くの情報をコンパクトに保存し、後で読むにはどうすればよいですか?

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

3d - マンデルブロ集合が極限に到達するのが早すぎる

OpenGLを使用してズームして画面に印刷する機能を備えた、マンデルブロー集合を計算しています。

ご存知のように、マンデルブロー集合は長方形 (右上の点と左下の点) で定義され、「ズームイン」と「ズームアウト」するたびに、左下の点を右上に移動して次の点を変更し、右上はその逆。最終的には、これらの 2 点が互いに出会い、ズーム プロセスが終了するはずです。
多くの YOUTUBE ムービーによると、一部のムービーでは 1000X ズームに到達できることがはっきりとわかります。私のプログラムでは、X6にほとんど到達できません。デバッグ中に、マンデルブロー集合を定義する2つのポイントが互いに到達するのを見ることができます(x1,y1) = (x2,y2)
いくつか:
(x1,y1) & (x2,y2)float として定義されています。代わりに double を使用する必要がありますか? 私のマンデルブローは (512X512) ポイントで定義されています。それで十分?問題に関連しているかどうかはわかりませんが。

私が直面している別の問題は、セットを高さマップ(3Dセット)として印刷していることです。各 Y コンポーネントが、無限に達するまでにかかった反復の量を表す場合。ただし、セット全体をズームインするたびに、カメラの位置がどんどん高くなり、最終的にはカメラがセットによって消費されます。差を計算し、カメラをセットから遠ざける方法はありますか(それに応じてズームポイントから?)

セットを計算するコード:

いくつかのこと:

instance->FoundPointOnHost = 拡大したい点。
instance->constVal = セットの元のサイズが含まれています (最初は [xru,yru] [xld,yld] に等しい)
(xru,yru) = 右上セットのポイント (xld,yld) = セットの左下のポイント

ありがとう!