問題タブ [vertex]

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 投票する
1 に答える
17529 参照

arrays - OpenGL頂点のインデックス付き配列をいつ使用する必要がありますか?

gl [Multi] DrawElementsなどで描画されたOpenGL頂点のインデックス付き配列を使用する必要がある場合と、gl[Multi]DrawArraysで描画された頂点の連続配列を使用する必要がある場合を明確に理解しようとしています。 。

更新:私が得た回答のコンセンサスは、常にインデックス付きの頂点を使用する必要があるということです。)

私はこの問題について何度か行ったり来たりしたので、私の現在の理解の概要を説明します。誰かが私が最終的に多かれ少なかれ正しいと私に言うか、または私の残りの誤解がどこにあるかを指摘できることを願っています。具体的には、太字で3つの結論があります。間違っている場合は修正してください。

単純なケースの1つは、ジオメトリが曲面を形成するメッシュで構成されている場合です。この場合、メッシュの中央にある頂点は、頂点を使用するすべての三角形に対して同じ属性(位置、法線、色、テクスチャ座標など)を持ちます。

これにより、私は次のように結論付けることができます。

1.継ぎ目が少ないジオメトリの場合、インデックス付き配列が大きなメリットになります。

以下を除いて、常にルール1に従ってください。

すべてのエッジが継ぎ目を表す非常に「ブロック状」のジオメトリの場合、インデックス付き配列の利点はそれほど明白ではありません。単純な立方体を例にとると、各頂点は3つの異なる面で使用されますが、単一の頂点の場合、サーフェス法線(および色やテクスチャの座標などの他の可能性があるもの)のため、それらの間で頂点を共有することはできません。 )各面で異なります。したがって、配列に冗長な頂点位置を明示的に導入して、同じ位置を異なる法線などで複数回使用できるようにする必要があります。これは、インデックス付き配列の使用が少ないことを意味します。

例:立方体の単一の面をレンダリングする場合:

(この面とすべての隣接する面の間の継ぎ目は、これらの頂点のいずれも面間で共有できないことを意味するため、これは分離して考えることができます)

GL_TRIANGLE_FAN(または_STRIP)を使用してレンダリングする場合、立方体の各面は次のようにレンダリングできます。

インデックスを追加しても、これを単純化することはできません。

このことから、私は次のように結論付けます。

2.すべての継ぎ目またはほとんどの継ぎ目であるジオメトリをレンダリングする場合、GL_TRIANGLE_STRIPまたは_FANを使用する場合は、インデックス付き配列を使用せず、代わりに常にgl[Multi]DrawArraysを使用する必要があります。

更新:返信は、この結論が間違っていることを示しています。インデックスではここで配列のサイズを縮小することはできませんが、コメントで説明されているように、他のパフォーマンス上の利点があるため、引き続き使用する必要があります)

ルール2の唯一の例外は次のとおりです。

(ストリップやファンの代わりに)GL_TRIANGLESを使用する場合、各立方体の面が2つの別々の三角形としてレンダリングされるため、頂点の半分を同じ法線や色などで2回再利用できます。繰り返しますが、同じ単一の立方体の面の場合:

インデックスがない場合、GL_TRIANGLESを使用すると、配列は次のようになります。

頂点と法線はそれぞれ3つのフロートであることが多く、色は多くの場合3バイトであるため、立方体の面ごとに次のようになります。

(異なるタイプを使用するとバイト数が変わる可能性があることを理解しています。正確な数値は説明のためのものです。)

インデックスを使用すると、これを少し単純化して、次のようにできます。

後者の場合、頂点0と2が2回使用されますが、頂点、法線、および色の配列のそれぞれで1回だけ表されます。これは、すべてのジオメトリエッジが継ぎ目であるという極端な場合でも、インデックスを使用するための小さな勝利のように聞こえます。

これにより、私は次のように結論付けることができます。

3. GL_TRIANGLESを使用する場合、すべての継ぎ目であるジオメトリの場合でも、常にインデックス付き配列を使用する必要があります。

間違っている場合は、太字で私の結論を訂正してください。

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

algorithm - 最小と最小の頂点カバー

私は試験のために勉強していますが、サンプルの質問の 1 つが次のとおりです。

頂点カバー: グラフの頂点カバーは、各エッジがこのセット内の 2 つの終点のうち少なくとも 1 つを持つ頂点のセットです。

最小頂点カバー: グラフ内の MINIMUM 頂点カバーは、すべての可能な頂点カバーの中で最小数の頂点を持つ頂点カバーです。

最小頂点カバー グラフ内の MINIMAL 頂点カバーは、別の頂点カバーを含まない頂点カバーです (セットから頂点を削除すると、頂点カバーではない頂点のセットが作成されます)。

質問: 最小頂点被覆は常に最小頂点被覆であるとは限りません。これを簡単な例で示します。

誰でもこれを理解できますか?両者の違いがわかりません。さらに重要なことに、私はそれを視覚化するのに苦労しています。

彼が試験でこのような奇妙な質問をしないことを真剣に願っています!

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

objective-c - Box2dの頂点の位置

Box2dで頂点の位置を取得するにはどうすればよいですか?

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

3d - Xna4.03D頂点の例

現在、Riemerのチュートリアル(チュートリアルへのリンク)のように、2つの三角形を組み合わせて単純な正方形を作成しようとしていますが、3.xから4.0に大幅に変更されているため、難しいと感じています。また、この「正方形」のテクスチャを作成する方法も知りたいので、誰かが例などを挙げて私を助けてくれるなら、私はそれをいただければ幸いです:)

ありがとう!

  • 基本
0 投票する
2 に答える
904 参照

r - 頂点名によるエッジシーケンス

さて、私はigraphパッケージを使用しています。小さな例では、頂点に割り当てた名前でエッジを選択したいと思います。

今私のエッジリストはこのフォームを持っています

私が今欲しいのは、これを使う代わりに、方法を見つけることです

E(g)[G2%-%G1](割り当てた名前で頂点を呼び出す)のようなことを行うか、関連する頂点の名前でいくつかのエッジ属性を知る同等の方法を実行します。

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

c# - シェーダー/コードの問題

私はこの基本的な 3D アプリケーションを持っていて、独自のトゥーン シェーダーを作成しようとしていますが、トゥーン部分を削除しても、赤色を与えると、まだ濃い青色のままです。

シェーダーコード:

カスタム頂点フォーマット:

私が描こうとしている三角形の初期化:

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

opengl - OpenGLで表示されている頂点を特定する

特定の視点から見える頂点を識別する最も効率的な方法は何ですか?

いくつかの3Dモデルで構成されるシーンがあります。各頂点(ModelID、VertexID)に識別子を付けてから、さまざまな視点から2D画像を生成し、各画像に対して、表示されている頂点識別子のリストを生成します(基本的にこれは画像処理アプリケーション用です)。

最初は、頂点法線とカメラビューベクトルの間に内積を実行して、頂点がカメラに面しているかどうかを判断しようと考えましたが、モデルが別のオブジェクトによって遮られている場合、このテストは機能しません。

前もって感謝します

0 投票する
3 に答える
2061 参照

java - OpenGL で 2 つの交差した三角形を描画する

processing.org で OpenGL の最初のステップを実行しています。交差する 2 つの三角形を描きたいのですが、三角形を回転させて交差させる方法がわかりません。

三角形は、これらの古い木の 3D モデルのように交差する必要があります。それらは、後で使用する際に 1 つのオブジェクトとして回転および移動する必要があります。これは、両方の頂点のポップとプッシュで機能すると考えましたが、これら 2 つの三角形を一緒にするための回転がわかりません。

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

actionscript-3 - 3Dエンジン-頂点分割を適切に行う方法

AS3.0用の3Dエンジンを書いています...そして、厄介な問題に遭遇しました。AS3.0は現在、アフィンビットマップ変換のみをサポートしています(3Dは管理が非常に難しいため、エンジンを作成しています)。つまり、大きな頂点で真の遠近法を実現することはできません。

ループを実行して、ビットマップの各ピクセルをそのZ位置に基づいてレンダリングすることができます...しかし、遠近法は非線形であるため、これはほとんどのコンピューターよりも1000倍多くなります...

したがって、解決策は、頂点を自動的に(プログラマー/モデラーが行う必要がないように)小さな三角形に分割することです。

残念ながらこれは...途切れ途切れです...?アフィン変換は十分に正確ではないか、正確ではありませんが、他の三角形には適合しません...デモンストレーション用の画像:

(デッドイメージ)

赤い部分でわかるように、それらは非常に途切れ途切れで、正面中央の列で最も目立ちます。

だから-私は何が間違っているのですか?Sandy、away3D、Alternativaでこれはどのように行われていますか?

編集1:三角形への変換に使用しているコードは次のようになります。

編集2これは変圧器の小さなデモです:

こちらをクリック(デッドリンク)

(青い点を制御するための矢印、選択したハンドルを変更するための1〜3-テンキーと上部の数字キーの両方を試してください)

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

c++ - BGL: edge_descriptors と vertex_descriptors を効率的に保存するにはどうすればよいですか?

したがって、BGL の循環依存の問題が解決された後、別の障害に直面しました。

現在、隣接リストを使用してグラフをモデル化しています。ノードとエッジの両方にバンドルされたプロパティが適用され、グラフに一部の情報が格納されます。だから私はこのようなものを持っています:

特定のノードとエッジへのショートカットをコード内の別の場所に保存したい場合に問題が発生します (たとえば、複数の車線がある道路など)。私の最初のアプローチは、edge_descriptors と vertex_descriptors を必要な場所に保存することでした。しかし、そのような記述子が (バイト単位で) どれくらいの大きさになるのか疑問に思っています。同じ結果を得るために情報の一部だけを保存するなど、より良い解決策があるかもしれません。

このタイプのベクトルに使用されるメモリの量を知っている人はいますか:

edge_descriptors へのポインターを格納することについてはすでに考えましたが、それが機能するかどうか、またどのように機能するかはわかりません。

/////////////////////////////////////////////// /////////////////////////////////////////////// /////////////////////////////////////////////// ///////////////

編集:私の最初の質問が徹底的に答えられた今、私はまだ一つのことを疑問に思っています. グラフ クラス用にある種のインターフェイスを構築したいと考えています。このインターフェイスは、グラフ クラスの詳細を、グラフの詳細を認識してはならない他のクラスから分離します。したがって、他のクラスはノードとエッジを数値として認識できることが望ましいです。そこで、次の 2 つのアイデアを思いつきました。

  1. hash_map を使用してstd::tr1::unordered_map<int, edge_descriptor>、数値を記述子に変換できるようにします。記述子は、再びグラフ オブジェクトのインデックスとして使用されます。これは、1 つのステップから多くのステップになる可能性があります。計算するノードとエッジが十分にある場合、ハッシュ値の計算に時間がかかりすぎる可能性があります。だからこそ、私は第二の考えを思いつきました。
  2. グラフ自体は、これらの数値をエッジとノードに内部的に変換します。内部プロパティとプロパティ マップを併用すると、私のアイデアを実現できることを知っています。次に、次のように入力するだけでノードにアクセスできます。
    boost::property_map<My_Graph, my_prop>::type index = get(my_prop(), G);

しかし、そのようなプロパティ マップをバンドルされたプロパティと組み合わせる方法はありますか?

それとも、私がまだ思いつかなかった別のアイデアがありますか?