タグ付けされた質問 「voxels」

VOlumetric piXEL(ボリュームピクチャエレメント)。ボリュームデータを値の通常のグリッドとして保存する方法。このタグは、ボクセルに関する質問で使用する必要があります。

3
ボクセルデータの管理
私は今から約4か月間C ++で趣味としてプログラミングをしてきましたが、ボクセルを使ってものを作成するのが大好きでした。私はMinecraftのような世界をレンダリングする「ゲーム」(私は実際には地形のみを行い、ゲームプレイではないので、単なる個人的な挑戦の詳細)を書きましたが、最近、ゲーム/チャレンジ/などを書き込もうと考えていますマーチングキューブやデュアルコンターリングなどのアルゴリズムを使用し、ボクセルサイズを縮小します。Minecraftのようなプロジェクトを書いたとき、各チャンクのデータを符号なしshortの多次元配列に格納しました(したがって、最大65536の異なるブロックタイプが得られます)。さらに、レンダリングのために、1つのポイント(GLubyteとして)ともう1つのGLubyteだけを保存して、6つのポイントのうちどれが表されているポイントに面しているかを示しました。次に、ジオメトリシェーダーを使用して顔をレンダリングしました。 私が考えていた新しいプロジェクトで、頭を包むことができないのは、ボクセルが約1cmサイズのボクセルと比べて約5cmまたは10cmになるのに十分なボクセルデータをどのように保存できるかです。ブロックの704x704x704領域をレンダリングしたとき、私の古いプロジェクトは約670MBのRAMを使用していました。ボクセルサイズを10cmに縮小し、同じレンダリング距離を維持すると、ボクセルデータは約649GBになります(ボクセルごとに2バイトと7040 ^ 3ボクセルの領域を想定)。ボクセルデータをより効率的な方法で保存できる方法はありますか?
8 c++  voxels  data 

2
ボクセルを削除するとグループが分割されるかどうかの判断
私は次の状況にあります:ボクセルの3Dグリッドがあります(オン/オフ、最大サイズはおそらく128x128x128です)。グリッド内では、オンになっているすべてのボクセルが相互接続され、単一のグループを形成していることを事前に知っています。 次に、ボクセルを削除する(オフにする)と、グループを分割するかどうかを判断する必要があります。 私の最初のアイデアは、削除されたボクセルの近傍を見て、それらが他のボクセルを通じて相互接続されているかどうかを判断することでした(他の質問を参照してください:2つのボクセルが相互接続されているかどうかを確認するアルゴリズム)。しかし、これを行うにはより良い/他の方法があるかもしれません。 では、ボクセルを削除すると、そのボクセルが属していたグループが分割されるかどうかを判断するための良い方法は何でしょうか。

1
ボクセル地形との衝突を有効にするためにbtCollisionAlgorithmを拡張するにはどうすればよいですか?
私はBulletを使用しており、適切な衝突応答とともに、キューブベースの地形から接触点を生成する衝突アルゴリズムを作成しようとしています。また、ボックス以外の形状も含めるように拡張する予定ですが、現時点では重要ではありません。三角形のメッシュを使用することは、大きなマップにとってはRAMを独占しすぎることを発見しました。 ここでByte56 で概説されている手順を試しましたが、Bulletを使用してこれを実装することについて、いくつか質問があります。 どのようにして世界の衝突形状を生成しますか?カスタム形状を使用していますか?あなたはそれに何を設定m_shapeTypeしますか? それとも、あなたはまだ世界のサイズの箱形を使用していますか? 連絡先を確実に解放するにはどうすればよいですか? どのように正確に変更しprocessCollisionますか? 私がやったこと: この形状のみを持つオブジェクトのディスパッチャーに新しい衝突アルゴリズムを登録できるようにするために、terrainShape that extendsbtBoxShape , the only difference being thatm_shapeType = CUSTOM_CONVEX_SHAPE_TYPE` を作成しました。 私は拡張しましたbtRigidBodyが、(2番目の段落内のリンクを参照してください)彼の質問でByte56と同様にクラスがcheckCollisionWith(CollisionObject * co)あればtrueを返す任意ののAABBにおけるボクセルがco空気ではありません。 次のようにして、とbtCollisionAlgorithm同様の方法でクラスを拡張しました。btCompoundCollisionAlgorithmprocessCollision 引数として渡された衝突オブジェクトをチェックし、どちらが地形で、どちらがエンティティであるかを判別します。 多様体の子アルゴリズムをクリアします。 コール resultOut->setPersistantManifold(resultOut) 衝突するエンティティが占めるAABBで新しいボックス形状と変換を生成し、を呼び出しますm_dispatcher->findAlgorithm。AABB内のボクセルごとに、形状、変換、および検出されたアルゴリズムをChild Algorithm構造体に保存します。 すべての子アルゴリズムを繰り返し、を呼び出しproccessCollisionます。 すべての子アルゴリズムを反復処理し、衝突しているエンティティのAABBの外側にあるものをすべて削除します。(~btCollisionAlgorithm()次に呼び出すm_dispatcher->freeCollisionAlgorithm()) を呼び出しresultOut->refreshContactPoints()ます。 機能するもの:processCollisionプレーヤーのAABBが非空気ボクセルと交差するときに呼び出されます。 できないこと:衝突応答は単なる奇妙なものです...プレイヤーエンティティは上方に浮上し始めます。何かに入ると、激しく跳ね返ります。何かに足を踏み入れた後、1つの軸上で動き続けることができない場合があります。おそらく、プレイヤーエンティティが常にワールドオブジェクトのAABBにあるため、衝突応答後に接点が解放されていないのではないかと思います。に関して正しい木を吠えているprocessCollisionかどうか知りたいです。

1
奇妙な透明な穴がアーティファクトをレンダリングする
したがって、各サーフェスブロックにハイトマップを与えることにより、ブロックエンジンに「滑らかな」地形を実装しようとしています。 基本的に、各ブロックのこれらの「高さマップ」を生成するために私が行うことは、ブロックの端に沿って0.25の間隔で高さを生成することです。次に、ブロックの頂点を構築するために、高さをループして高さから高さに三角形を作成し、三角形の下に長方形を配置して次のようなものを作成します。 たとえば、ブロックのXの正側を作成するには、次のようにします。 Vector2[] uv = BlockUtil.UVMappings[(byte)side]; // uv[0] = top left float height; float nextHeight; float min; float tex_len = 1f / EngineGlobals.TEXTURE_ATLAS_SIDE; for (int i = 0; i < 4; i++) { height = (float)b.Heights[4, i] / 255f; nextHeight = (float)b.Heights[4, i + 1] / 255f; min = …

3
地形のような立方体を表すBullet Physics CollisionObjectを実装するにはどうすればよいですか?
Bullet Physicsライブラリをエンティティ/コンポーネントシステムに正常に統合しました。エンティティは互いに衝突する可能性があります。次に、有限で立方体のような地形と衝突できるようにする必要があります(InfiniMinerまたはそれのクローンMinecraftと考えてください)。昨日、Bullet Physicsライブラリを使い始めたばかりなので、何か明らかなことが足りないのかもしれません。 これまでのところRigidBody、checkCollisionWith(CollisionObject co)関数をオーバーライドするようにクラスを拡張しました。現時点では、他の形状を使用せずに、単なる原点のチェックです。後で繰り返します。現時点では、次のようになっています。 @Override public boolean checkCollideWith(CollisionObject co) { Transform t = new Transform(); co.getWorldTransform(t); if(COLONY.SolidAtPoint(t.origin.x, t.origin.y,t.origin.z)){ return true; } return false; } これは、衝突がいつ発生したかを検出する限り、うまく機能します。ただし、これは衝突応答を処理しません。デフォルトの衝突応答は、衝突しているオブジェクトを他のシェイプ(おそらくAABB)の外側に移動するようです。 現時点では、地形の形状は世界と同じ大きさの箱にすぎません。つまり、地形と衝突するエンティティは、そのワールドサイズのボックスの外側に向かって発射されます。そのため、衝突応答を変更する必要があるか、地形の形状に直接適合する形状を作成する必要があることは明らかです。では、どのオプションが最適で、どのように実装するのですか?おそらく、私が考えていないオプションがあるのでしょうか? 地形は動的で、プレイヤーによって頻繁に変更されることに注意してください。

1
歪んだ:シンプルなCPUベースのボクセルレイキャスター/レイトレーサーの回転カメラ
TL; DR —私の最初のシンプルなソフトウェアボクセルレイキャスターでは、カメラの回転を機能させることができません。結果は歪んでいます。フラットレンダリングのように、正しく回転しますが、歪みがあり、奥行きがありません。(軸が揃っている、つまり回転していない間、奥行きと視差は予想どおりです)。 簡単なボクセルレイキャスターを学習課題として記述しようとしています。これは純粋にCPUベースで、物事が正確にどのように機能するかを理解するまでは、今のところ、OpenGLは生成されたビットマップをできるだけ頻繁に画面に表示するために(ab)使用されています。 これで、透視投影カメラが世界を移動できるようになり、(ほとんどの場合、調査が必要なアーティファクトを差し引いて)「世界」の透視的に正しい3次元ビューをレンダリングできます。スタンフォードバニーのボクセルキューブが含まれています。 それで、私は上下に移動でき、左右に移動でき、「前方/後方に歩く」ことができるカメラを持っています。これまでのところ、軸はすべて揃っていて、カメラは回転していません。ここに私の問題があります。 スクリーンショット#1:カメラがまだ厳密に軸合わせされている場合の正しい奥行き。回転しない。 今私はローテーションを機能させるために数日間努力してきました。行列と3D回転の背後にある基本的な論理と理論は、理論的には非常に明確です。それでも、カメラが回転したときに「2.5レンダリング」を達成したのは、Googleストリートビューのような魚眼のようなものだけです。ボリュメトリックな世界の表現を持っているにもかかわらず、私が何をしようとも、最初のように見えます「正面図」からレンダリングを作成し、カメラの回転に従ってそのフラットレンダリングを回転させます。言うまでもありませんが、光線を回転させることは特に必要ではなく、エラーが発生しやすいことはわかっています。 それでも、私の最新の設定では、可能な限り最も単純化されたレイキャストレイの位置と方向のアルゴリズムにより、私の回転は同じ魚目状のフラットレンダー回転スタイルの外観を生成します。 スクリーンショット#2:カメラが「39度右に回転」—画面2の立方体の青い影付きの左側がこの回転では見えないことに注目してください。 もちろん、私はこれに気づいています。最初のように単純なaxis-aligned-no-rotation-setupで、光線は単純に正のz方向に移動し、左または右と上に発散します。ピクセル位置と射影行列に応じてのみ、または下部。「カメラを右または左に回転させる」、つまりY軸を中心に回転させると、これらのステップは適切な回転行列によって単純に変換されるはずです。したがって、順方向トラバーサルの場合、カムが回転するほどZステップは少し小さくなり、Xステップの「増加」によってオフセットされます。しかし、ピクセル位置ベースの水平+垂直発散の場合、xステップの増加する割合をzステップに「追加」する必要があります。どういうわけか、私が実験した多くのマトリックスのどれも、 これが私の基本的なレイごとのトラバーサルアルゴリズムです。Goの構文ですが、疑似コードとして使用します。 fxおよびfy:ピクセル位置xおよびy rayPos:ワールド空間での光線開始位置のvec3(以下のように計算されます) rayDir:レイトラバーサル中に各ステップでrayPosに追加されるxyzステップのvec3 rayStep:一時的なvec3 camPos:ワールド空間でのカメラの位置を表すvec3 camRad:ラジアンでのカメラ回転のためのvec3 pmat:典型的な透視投影行列 アルゴリズム/疑似コード: // 1: rayPos is for now "this pixel, as a vector on the view plane in 3d, at The Origin" rayPos.X, rayPos.Y, rayPos.Z = ((fx / width) - 0.5), ((fy …
7 voxels  raycasting  go 

5
ゲームのボリュームの経路計画
ゲームのボリュームをどのようにパス計画しますか? たとえば、トンネルと洞窟がある1 kmの立方体。また、地形は破壊可能です。 ウォーキングモードとフライングモードがあります。 フェーズに分けます。オープンスペースのボリュームを作成します。動的破壊を考慮に入れたパスを見つけます。 パフォーマンスは大きな懸念事項であり、短時間で使用されるパスを見つける機能です。 具体例:地中の何かを効率的に掘る。 地面は破壊可能です。「洞窟」はエリアを掘るのが簡単です。鉱業は飛行のようなものです。センサーで見る必要があります。データセットは巨大です。ターゲットへの輸送経路を構築する必要があります。マルチエージェントの場合があります。

3
ボクセルハイトマップ地形エディター
私は最近、ハイトマップを使用して地形を次の形式で定義する、シンプルなボクセルベースの3Dエンジン(Minecraftと考えます)を実験しています。 http://en.wikipedia.org/wiki/Heightmap このようなマップを作成するための最適なソフトウェアを知っている人はいますか?できれば、テクスチャマップも定義できるようにしてください。テロゲンとピコゲンだけが本当の選択肢ですか?

2
2Dタイルマップを保存する方法
ボクセルのように見える小さなタイルで構成された2Dマップを作成したい(たとえば、これを横から見たところ)。 Voxel2Dのような、int X、Y、およびいくつかのColorを持つ構造を作成できます。すべてのVoxel2Dは5x5ピクセルになります(描画するときはXとYを5倍します)。 しかし、どうすればマップ全体を保存できますか?古典的なタイルマップのような2D配列で、またはより速い方法はありますか?
7 2d  java  maps  voxels 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.