問題タブ [voxel]
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++ - 単純な気体/流体力学のソースコード
いくつかの基本的な物理原理の状態を保存するために使用したいボクセルオブジェクトの3Dマトリックスがあります。ここでの目的は、ビデオゲームでボリュームをリアルタイム(〜30FPS)で表すことです。次のような容量を実現したいと思います。1。さまざまな重量の流体と気体のタイプを保管し、基本的な相互作用の原則に従います。たとえば、酸素は水よりも軽いです。2.圧力を決定することができます。3.「ソリッド」オブジェクトと対話できるようにします。したがって、中空の3Dボックスには、「漏れ」ないものを収納できます。
これらはすべて非常に基本的なものであり、「精度」テストを放棄する可能性があります。
さらに読むためのアイデアやまともなリソースを喜んで受け入れます。しかし、私は自分が紙や高度な方程式を取り、自分の図書館を転がすスキルを持っているとは思わないと思います。
file-format - ボクセルボリュームをVTKファイル形式で表現するにはどうすればよいですか?
ボリュームを表す3Dバイナリ配列があります。ここで、a[x,y,z] = 0
はオブジェクトがないことをa[x,y,z] = 1
示し、オブジェクト領域を示します。
これをVTKファイルとして保存し、 ParaViewで表示したいと思います。これを達成するための最も簡単な方法は何ですか?他のアプローチの提案は大歓迎です。
VTKファイル形式を調べましたが、他の構造を使用して、必要なものを直接実現する方法が見つかりませんでした。
3d - octreeデータ構造を使用して隣接/隣接キューブを見つける方法は?
閉曲面の境界八分木を作成しました。面を含むすべての octree キューブは、同じレベルまで分割されます。したがって、すべてのリーフ ノードは同じサイズです。これらの各ターミナル キューブの隣人を見つけるのに助けが必要です。さまざまな論文を参照してみましたが、実際に実装する方法がわかりませんでした..Matlabで。現在、すべてのターミナル キューブを (octree データ構造を使用せずに) ボクセル キューブとして扱い、ブルート フォースを使用して、サーフェスを構成するキューブのリストに含まれる 26 個の可能な隣接キューブを見つけます。出力を得るには時間がかかります。私はプログラミングが初めてなので、葉ノードの隣接ノードをより効率的に見つける方法と、matlab でコーディングしてメソッドを実装する方法を誰かが提案してくれたら本当にありがたいです。ありがとう!!
directx - Minecraft スタイルの地形でのブロックの処理 (d3d/c++)
何千もの立方体で構成される 3D 地形 (Minecraft など) で、位置とレンダリングに関して各ブロックを処理する方法は何ですか? より具体的には、キューブのプリミティブを描画し、それを directX 9 のあらゆる場所で変換する世界は、パフォーマンスの問題が非常に多いため、これを達成するためのおそらくばかげた方法であることを知っています。
各立方体は何度もコピーされるメッシュであるべきですか、それとも頂点バッファー内のデータから適切なメッシュを作成する方法ですか?
実装したいものを実装するための背後にある理論の一部を説明しているこの記事を見つけましたが、これまで octrees を使用したことがないため、ソース コードから多くを引き出すことができませんでした。八分木が実際に進むべき道である場合、それらについて学ぶための良い出発点はどこですか? 私のグーグル検索のほとんどは、実装例がほとんどまたはまったくない理論に関するブログ投稿しか見つかりませんでした。
これを行うにはボクセルを使用すると便利なようですが、オクトリーと同様に、私はここでの経験がないので、最初に何を勉強すればよいかよくわかりません。
とにかく、あなたが惜しまないアドバイス\リソース\本の名前に感謝します。当たり前のことだと思いますが、私はまだ 3D プログラミングに非常に慣れていないので、助けていただければ幸いです。
raytracing - Skewed: シンプルな CPU ベースのボクセル raycaster/raytracer の回転カメラ
学習課題として、単純なボクセル レイキャスターを書こうとしています。これは、物事が正確にどのように機能するかを理解するまで、今のところ純粋に CPU ベースです。
これで、透視投影カメラが世界を移動できるようになり、(ほとんどの場合、調査が必要なアーティファクトを除いて) 透視補正された「世界」の 3 次元ビューをレンダリングできるようになりました。これは基本的に空ですが、スタンフォード バニーのボクセル キューブが含まれています。
だから私はカメラを上下に動かしたり、左右に機銃掃射したり、「前後に歩いたり」できるカメラを持っています。ここに私の問題があります。
スクリーンショット: (1) ボクセルのレイキャスティング中... ...(2) カメラはそのまま... ...(3) 厳密に軸合わせ。
今、私は数日間、ローテーションを機能させようとしています。行列と 3D 回転の背後にある基本的なロジックと理論は、理論的には非常に明確です。それでも、カメラが回転したときに「2.5 レンダリング」しか達成できませんでした... Google ストリートビューのように魚眼のように見えます: 立体的な世界表現を持っていても、何を試しても私のように見えます最初に「正面図」からレンダリングを作成し、次にそのフラット レンダリングをカメラの回転に従って回転させます。言うまでもなく、光線の回転は特に必要ではなく、エラーが発生しやすいことは今ではわかっています。
それでも、可能な限り単純化されたレイキャスト レイの位置と方向のアルゴリズムを使用した最新のセットアップでは、私の回転は依然として同じ魚眼のようなフラット レンダー回転スタイルの外観を生成します。
カメラは「右に 39 度回転しました」 -- スクリーン 2 の立方体の左側の青い影がこの回転では見えないことに注意してください。
もちろん、私はこれを認識しています。最初に持っていたような単純な軸に沿った回転なしのセットアップでは、光線は単純に正の 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から#3に従って、それらは「基本的にほとんど正しい」(きれいではありませんが)-軸が整列/回転していない場合。
java - 3Dワールドでチャンクを作成するにはどうすればよいですか?
私はボクセルベースのゲームエンジンに取り組んでおり、チャンクが必要です。Minecraftからチャンククラスを読み込もうとしましたが、理解できません。チャンクとは、16x16x256ブロックの配列を意味します
だから私の質問は:チャンクはどのように機能し、どのようにデータを保存するのですか?
java - 見えない顔のレンダリングを停止する方法
私はボクセルベースのゲームを作成しており、そのニーズに応じて、ブロックレンダリングエンジンを作成しています。
ポイントは、たくさんのキューブを生成する必要があるということです。これらのブロックの16x16x16チャンクを超えるレンダリングを行うたびに、FPSはほとんどドロップダウンされません。これは、これらのすべての立方体の6つの面すべてをレンダリングするためです。それは24576クワッドです、そして私はそれを望んでいません。
だから、私の質問は、表示されていない頂点(またはクワッド)のレンダリングを停止して、ゲームのパフォーマンスを向上させる方法はありますか?
ブロックをレンダリングするためのクラスは次のとおりです。
それらをレンダリングするコードは次のとおりです。
algorithm - レイ-八分木交差アルゴリズム
私は、光線が反復的に通過する葉を与える、優れた光線と八分木の交差アルゴリズムを探しています。まだCUDAに飛び込みたくないので、CPUに実装することを計画しています:)
現時点では、私のボクセルレイキャスターは、XxYxZボクセルの非階層配列に対して3D DDA(Amanatides / Wooバージョン)を実行します。次の図に示すように、空のスペースがたくさんある場合、これはかなりコストがかかることを想像できます(明るい赤=より多くの作業:)):
このタスクには2種類のアルゴリズムがあることをすでに理解しました。リーフから上に向かって機能するボトムアップと、基本的に深さ優先探索であるトップダウンです。
私はすでに2000年からRevellesのアルゴリズムを見つけました。これは、八分木探索のための効率的なパラメトリックアルゴリズムと呼ばれ、面白そうに見えますが、かなり古いものです。これはトップダウンアルゴリズムです。
最も人気のあるボトムアップアプローチは、K。Sung、レイトレーシング用のDDAオクトリートラバーサルアルゴリズム、Eurographics'91、North Holland-Elsevier、ISBN 0444 89096 3、p。73-85。問題は、ほとんどのDDA Octreeトラバーサルアルゴリズムが、octreeが同じ深さであることを期待していることです。これは、私が望んでいないことです。空のサブツリーは、nullポインターなどである必要があります。
私が読み通したSparseVoxelOctreesに関する最近の文献では、(特にSVOに関するLaineの作業は、GPUで実装されたバージョンのDDA(Amanatides / Wooスタイル)に基づいているようです。
さて、ここに私の質問があります:誰かが基本的な、飾り気のない光線-八分木交差アルゴリズムを実装した経験がありますか?あなたは何をお勧めします?
java - サンドボックスlwjglゲームをスピードアップするには?
サンドボックス (ボクセル) のオープンワールド ゲームを作ろうとしています。私のゲームでは、チャンクと呼ばれる 32x32x32 のブロック セットを使用してブロック データを格納します。これらにはそれぞれ、頂点、プライマリ カラー、セカンダリ カラー、テクスチャ 座標の 4 つの VBO があります。これらの VBO は、次のクラスに格納されます。
ImmediateModeRenderer を拡張するもの:
開始および停止する静的メソッドは、ワールド クラスから呼び出され、チャンクの描画を準備し、チャンクの描画を終了します。
編集:問題は修正されました!VBO の内容に double を使用しないでください。float を使用してください。
java - 3Dボクセル角度平面
ボクセルから平らな面を描画しようとしています。目標はそれを塗りつぶして描画することであり、多くの問題を抱えています。私が試したものはすべて、表面に穴が開いてしまいます。サーフェスには4つのコーナーがありますが、三角形にも同じ方法を使用できるようにしたいと思います。
これが私が試したことです:
- 一方の平行な側からもう一方の側に沿って描画します
- 平面の側面に沿って一方向(z方向)にのみ描画します
私は2で最も成功しましたが、平面にピッチまたはロールを追加すると失敗します(任意の高度が存在します)。
任意のヒント?私の実装はすべて正しいと確信しているので、コードはありません。間違っているのはアルゴリズムの選択だけです。
編集:
ちなみに、2番の穴は少なかったものの、飛行機は歪んでいて平らに見えませんでした。
EDIT2:
私は最初の決定に固執していますが、今の問題は、穴がいつあるかをどのように検出するかです。観察すると、ピッチとロールに関係なく、平面ごとに同じ数の穴があることがわかります。ここではヨーが原因です。
EDIT3:
この質問は残しておきますが、近くのブロックをテストして、空かどうかを確認することにしました。やりたくなかったけど、そうだね。あなたがよりエレガントな解決策を持っているなら、私はすべての耳です。