問題タブ [mesh]
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++ - DirectX9 でメッシュ アニメーションを一時停止/停止するにはどうすればよいですか?
DirectX 9 には、現在実行中のメッシュのアニメーションを停止または一時停止する機能がありますか? 関数がどのように機能するかの例が必要です。
performance - 科学計算におけるメッシュデータのメモリレイアウト
私は有限要素システムを開発しています。いつものように、シミュレーションはメッシュノードのセットで構成され、それぞれがプロパティのセット(フローティングポイント)を持ちます。たとえば、時間内に変化するいくつかの材料プロパティ、座標、または物理量などです。
次の2つの極端なアプローチを採用できます。
プロパティごと:プロパティごとに1つの配列を維持します。
double* x, *y, *z, *e_field, *b_field, *conductivity;
エントリ単位:各配列が構造体である単一の配列を維持します
struct { double x, y, z, e_field, b_field, conductivity; } *meshnodedata;
これらの間で、座標x、y、zにのみ2番目のアプローチを適用し、残りのプロパティに最初のアプローチを使用するように、混合することができます。シミュレーションが各メッシュノードに対して維持するプロパティが多いほど、混合する可能性があります。
一方では、プログラムのパフォーマンスとコードの保守性に関して、これらのアプローチ(およびそれらの組み合わせ)のどれが科学計算に最適であるかという古典的な質問があります。一方で、異なるアプローチ間の移行が容易になるようにコードを実装するにはどうすればよいのでしょうか。さらに、プログラムのさまざまな部分のさまざまなメモリレイアウト間で移行することも解決策になる可能性があります。
要点を言えば:
- これらの異なるアプローチでのあなたの経験は何でしたか?
- これらの違いはどれほど重要でしたか?
- これら2つのレイアウト間での移行の経験を積んでいますか?
graphics - 一連の面からエッジ ループを検出する方法
単一のメッシュから選択された一連の面 (三角形のみ) が与えられた場合、次のことをどのように検出できますか: a) 選択された面が作成するエッジ ループ。b) 含まれているエッジ ループに基づいた面の高速グループ化。
この方法は、複数の面が選択されていて、複数の領域を押し出したいが、個々の面を押し出す代わりに方向として平均法線を使用する場合に、面の押し出しを行うために必要です。
3d - 手続き的に球メッシュを生成する
次のような球メッシュの 3D 座標を生成するアルゴリズム (疑似コード) を探しています。
水平方向と横方向のスライスの数を構成可能にする必要があります
graphics - Maya Mesh XML をブラウザに表示する
Maya で作成されたメッシュ ファイル (XML 形式) があります。ズームインとズームアウトの回転など、ユーザー向けの追加オプションを使用してブラウザに表示したいと思います。
そうするための最良かつ簡単な方法は何ですか?(SilverLight、HTML5/JS/Canvas、Flesh)
HTML5/Canvas を実際に試してみたいのですが、その方法を知っているライブラリはありますか?
ありがとう。
algorithm - 三角形メッシュのエッジにラベルを付けるためのアルゴリズム
序章
より大きなプログラム(ボリュームグラフィックスのレンダリングに関連する)の一部として、任意の(ただし有限の)三角形の2Dメッシュに特定の方法でラベルを付ける必要がある、小さいがトリッキーなサブ問題があります。少し前に、その時点で使用していたテストメッシュに十分なソリューション(以下を参照)を作成しましたが、考えられるすべてのメッシュに対してこのアプローチがうまく機能しない可能性があることに気付きました。今、私はついに現在のソリューションがまったくうまく機能しないメッシュに遭遇しました-そして私はまったく異なる種類のアプローチを考え出すべきであるように見えます。残念ながら、自分の考え方をリセットすることはできないようです。そのため、ここで質問したいと思いました。
問題
下の写真を考えてみましょう。(色は問題の一部ではありません。視覚化を改善(?)するために色を追加しただけです。また、エッジ幅の変化はまったく関係のないアーティファクトです。)
すべての三角形(たとえば、オレンジ色のABCと緑色のABD)について、3つのエッジのそれぞれに、「0」または「1」などの2つのラベルのいずれかを付ける必要があります。要件は2つだけです。
- 三角形のすべてのエッジに同じラベルを付けることができるわけではありません。つまり、三角形ごとに2つの「0」と1つの「1」、または2つの「1」と1つの「0」が必要です。
- エッジが2つの三角形で共有されている場合は、両方で同じラベルを付ける必要があります。つまり、画像のエッジABが三角形ABCの場合は「0」とラベル付けされている場合、ABDの場合も「0」とラベル付けされている必要があります。
メッシュは本物の2Dメッシュであり、有限です。つまり、メッシュはラップせず、明確に定義された外側の境界があります。明らかに、境界線では要件を満たすのは非常に簡単ですが、内部ではさらに難しくなります。
直感的には、証明できなくても、少なくとも1つの解決策が常に存在する必要があるように見えます。(通常、いくつかあります-それらのいずれか1つで十分です。)
現在のソリューション
私の現在の解決策は本当にブルートフォースの解決策です(完全を期すためにここで提供されています-このセクションをスキップしてください):
- 三角形の4つのセットを維持します-ラベル付けされる残りのエッジの可能なカウント(0..3)ごとに1つ。最初は、すべての三角形がセット内にあり、3つのエッジにラベルが付けられたままになっています。
- ラベルのないエッジを持つ三角形がある限り:
まだ三角形が残っている、割り当てられていないエッジのゼロ以外の最小数を見つけます。言い換えれば、いつでも、ラベル付けが部分的に完了している三角形の数を最小限に抑えるように努めています。残りのエッジの数は1から3の間です。次に、この特定の数のエッジが割り当てられるように、そのような三角形を1つ選択します。この三角形に対して、次のようにします。- 残りのエッジのラベル付けが、他の三角形のラベル付けによってすでに適用されているかどうかを確認します。その場合は、上記の要件2で示されているようにラベルを割り当てます。
- これにより行き止まりになる場合(つまり、現在の三角形で要件#1を満たせなくなる場合)、プロセス全体を最初からやり直します。
- 次のように残りのエッジを割り当てます。
- これまでにラベル付けされたエッジがない場合は、最初のエッジをランダムに割り当てます。
- 1つのエッジがすでに割り当てられている場合は、反対のラベルが付けられるように2番目のエッジを割り当てます。
- 2つのエッジが割り当てられた場合:同じラベルが付いている場合は、3番目のエッジに反対のラベルを割り当てます(明らかに)。2つのラベルが異なる場合は、3番目のラベルをランダムに割り当てます。
- 未割り当てのエッジの数が異なる場合は、三角形のセットを更新します。
- 私たちがここに着いたら、解決策があります-やったー!
通常、このアプローチは数回の反復で解決策を見つけますが、最近、アルゴリズムが1〜2千回の再試行後にのみ終了する傾向があるメッシュに遭遇しました...これは明らかに、終了しないメッシュが存在する可能性があることを示唆しています。
今、私は常に解決策を見つけることが保証されている決定論的アルゴリズムが欲しいです。メッシュはそれほど大きくなく、ラベル付けは基本的に新しいメッシュがロードされたときにのみ実行する必要があるため、計算の複雑さはそれほど大きな問題ではありません。これは常に発生するわけではありません。したがって、(たとえば)指数関数を使用するアルゴリズムそれが機能する限り、複雑さは問題ないはずです。(しかしもちろん:より効率的であるほど良いです。)
ここまで読んでいただきありがとうございます。さて、どんな助けでも大歓迎です!
編集:提案された解決策に基づく結果
残念ながら、Dialecticusによって提案されたアプローチを機能させることができません。うまくいかなかったかもしれません...とにかく、開始点が緑色の点で示されている次のメッシュを考えて みましょう。少しズームインしてみましょう... それでは、アルゴリズムを開始しましょう。最初のステップの後、ラベル付けは次のようになります(赤=「スター付きパス」、青=「リング状パス」): これまでのところ良好です。2番目のステップの後: そして3番目: ... 4番目: しかし今、私たちは問題を抱えています!もう1ラウンドやりましょう。ただし、マゼンタでプロットされた三角形に注意してください。 私の現在の実装によると、マゼンタの三角形のすべてのエッジはリングパス上にあるため、青色である必要があります。これは事実上反例になります。どういうわけか間違っているかもしれません...しかし、いずれにせよ、開始ノードに最も近い2つのエッジを赤にすることはできません。3番目のラベルが赤で表示されている場合、そのソリューションはもはやアイデアに実際には適合していないようです。
ところで、これが使用されたデータです。各行は1つのエッジを表し、列は次のように解釈されます。
- 最初のノードのインデックス
- 2番目のノードのインデックス
- 最初のノードのx座標
- 最初のノードのy座標
- 2番目のノードのx座標
- 2番目のノードのy座標
開始ノードは、インデックス1を持つノードです。
次に、RafałDowgirdによって提案された方法を試してみるべきだと思います...しかし、おそらくしばらくの間、まったく異なることをする必要があります:)
graphics - メモリ リークのない .ply ファイルの解析
スタンフォードの 3D スキャン リポジトリで .ply ファイルをダウンロードし、そのページからスタンフォードのコード (ply.h、plyfile.c) を使用して解析しています。しかし、このコードを見ると、決して解放されない malloc がはびこっていることがわかります。目を閉じて横を見ることもできますが、歯がかゆくなります.
2 つの回避策が考えられます。
1 つは、Hans Boehm のガベージ コレクタ、またはガベージ コレクタ内で実行するように「malloc」を再定義する同様のものを使用することです。私はこのライブラリを使用したことはありませんが、スタンフォード コードの malloc だけで動作し、他の場所では動作しないようにする方法があるかもしれません。
他の回避策は、別のパーサーを使用することです。できれば、適切に RAII 化されたメモリ管理を備えた C++ パーサーを使用してください。上記のリンクにいくつかの代替パーサーとコンバーターがリストされていますが、それらすべてを試すのに1日か2日を費やすのではなく、ここで推奨事項を取得したいと考えていました.
スタンフォード パーサーでメモリ リークを封じ込めるか、別のパーサーを使用するか、または私が考えもしなかった第 3 の方法を使用して、メモリ リークなしで .ply ファイルを解析する方法を推奨できる人はいますか?
java - 3D配列から境界情報を取得する
ねえ、私は現在、3D配列から情報を抽出しようとしています。ここで、各エントリは、そこから何かを引き出すための座標を表します。問題は、配列が途方もなく大きい(そしてそれらのいくつかがある)ということです。つまり、実際にすべてを描画することはできません。
そのとき私が達成しようとしているのは、必要に応じて配列のシェルである外側の座標の表現を描画することです。この配列はいっぱいではないか、数ピクセルしか設定されていない大きな空のスペースがあるか、ピクセルデータの大きなクラスターがグループ化されている可能性があります。どんな形が期待できるのか(単純な立方体か複雑な凹面メッシュか)わからず、境界線を効果的に抽出するアルゴリズムを考え出すのに苦労しています。この配列は、ポイントのセットを3D空間に効果的に格納します。
6つの2Dメッシュ(3D配列の各側に1つ)を作成し、各位置で見つけることができる最も浅いポイントを取得して、別々に描画することを考えました。ただし、前述したように、この3D形状は凹型である可能性があり、このアプローチでは問題が発生します。上部に円がある円錐を想像してください(円錐の底よりも大きい円)。上部と側面のメッシュは形状から正しい深度情報を取得しますが、下部のメッシュは垂直線を介してベースを円に接続し、円錐形を効果的に緩めます。
次に、配列をスライスごとに分析し、スライスデータから2つのメッシュを作成することを考えました。これはどのタイプの形状でも機能するはずですが、各スライスの境界情報を正確に提供するアルゴリズムを見つけるのに苦労しています。繰り返しになりますが、スライスから高さマップを作成しようとすると、凹みがある場合に問題が発生します。また、ある種のエッジ追跡アルゴリズムを使用しましたが、配列は連続データを提供せず、各スライスに沿って連続エッジがないことはほぼ確実です。
医用画像などで使用されているボリュームレンダリングを調べてみましたが、私が抱えている問題と同様の問題を扱っているため、実際に使用できるものは見つかりませんでした。
この種の問題や貴重な情報を経験したことがある人がいたら、私を正しい方向に向けてください。
PSシェルの閉じた表現を取得したいので、以前の2Dメッシュアプローチです。ただし、シェルポイントを接続せずに単純にシェルポイントを取得するアプローチは、それでも非常に役立ちます。
ありがとう、Ze
c++ - Ogre3D カスタム マップ
これを行う方法がわかりませんが、助けが必要です。ゲーム用のカスタム 'マップ' (建物、地面、橋など) を作成し、それを Ogre3D にロードしたいと考えています。それを行う最良の方法は何ですか?
3d - サーフェスの交差によって定義される 3D セルのモデリング
任意のサーフェスの交差によって定義されるセルのインタラクティブな 3D 表現を作成しようとしています。これからメッシュを作成する方法を理解するのに苦労しています (または、3D ボリュームを表現するために目指すべきメッシュよりも優れたものがありますか?)。各面 s は、次のような s = f(x,y,z) = 0 として、平面、球、円柱、円錐などの解析式によって与えられます。
各セルには、サーフェスのリストと各サーフェスの +/- センスがあります。これにより、x、y、z ポイントがセル内にあるかどうかを判断するのは簡単です。そのポイントを各境界サーフェスの式に代入することで、その結果がすべての + サーフェスに対して + で、すべての - サーフェスに対して - である場合、そのポイントは中にあります。明らかに、いずれかのサーフェスで結果がゼロの場合、ポイントはそのサーフェス上にあります。
何千もの格子点をテストして、セルごとにそのセルの内側にある点に注目し、それらの点の最も外側を使用してそのセルのメッシュを作成できます。ただし、私は何千ものセルを持っているので、これでは十分に高速ではありません。多くのセルは、他のセルに比べて非常に小さいか、アスペクト比が低いため、この方法で行うには、非常に細かい点のグリッドが必要になります。
この方法で定義されたセルを静的な 3D モデルに配置する効率的な方法を提案できる人はいますか? この種のジオメトリ仕様で動作し、3D メッシュを作成できるライブラリはありますか? 明らかな何かが欠けていますか?
ありがとう、ニック