問題タブ [index-buffer]
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.
opengl - 三角メッシュのインデックス バッファ内のポイント
三角形分割されたメッシュがあるとします。三角形の間に多数の繰り返し位置があり、この場合、インデックス バッファーが非常に便利になる可能性があります。
しかし、法線も必要な場合は、すべての三角形の法線が異なるため、ゲインはありません。したがって、タプル { position, normal } は一意です。テクスチャ座標やその他の機能を追加する場合、インデックス バッファが必要な理由がわかりません。
opengl - プリミティブ アセンブリ パフォーマンス
現在、地形/高さマップのレンダリングを試しています。その地形の各タイルは、VBO と IBO でレンダリングされます。サブタイルを簡単に描画できるようにするために、Morton コーディングを使用してインデックスを注文しました。この時点で、プリミティブ アセンブリに関するいくつかの疑問が頭に浮かびました。
プリミティブ アセンブリは頂点処理の後に発生しますが、
- GPU は処理する頂点をどのように認識しますか? それらのいくつかは索引付けされていない可能性があります。それらはまだ処理されますか?
- GPU は、頂点を処理する必要がある順序をどのように認識しますか? おそらく、三角形は VBO の最初と最後の頂点を使用するので、VBO 全体が処理されるまでプリミティブ アセンブリ ステージを待たなければならないのでしょうか?
opengl - Index Buffer Object (IBO) のセグメントをバインドすることはできますか?
3 つのオブジェクト (2 つのボックスと 1 つの平面) で構成されるシーンを想像してみましょう。これら 3 つのメッシュは、次のように一意の Vertex Buffer Object (VBO) 内に保存されます。
現在、特定のインデックス バッファ オブジェクト (IBO) を使用して、シーンの各メッシュの頂点のインデックス付けを次のように管理しています。
したがって、シーンをレンダリングするには、次のように、頂点バッファーの一意のバインディング呼び出しと、インデックス バッファーの 3 つのバインディング呼び出しが必要です。
したがって、すべてのインデックス (Box_1_index + Box_2_index + Box_3_index) を (VBO のように) 一意の IBO に格納し、関数 glBindBuffer ではなく、今回は関数 glBindBufferRange を使用して IBO データに焦点を当てることができるかどうか疑問に思います。
このようにして、次のパターンのコードが作成されます。
しかし、公式の OpenGL ドキュメントによると、関数 'glBindBufferRange' の最初のパラメーターは GL_TRANSFORM_FEEDBACK_BUFFER または GL_UNIFORM_BUFFER にすることができますが、GL_ELEMENT_ARRAY_BUFFER にすることはできません (現在、これを使用して IBO をバインドしています)。
では、関数「glBindBufferRange」を使用して、特定の IBO 内に含まれる特定のデータ セグメントをバインドすることは可能ですか?
opengl - glDrawElements、インデックス バッファ、および有効な GL_CULL_FACE を使用して円柱横方向を描画します。
私はこれを必要とする:
そして、私はこれを使用する必要がglDrawElements
あります: glEnable(GL_CULL_FACE)
.
私が試したこと:
そして悪い結果:
しかし、 delete で修正できますがglEnable(GL_CULL_FACE);
、それを使用する必要があります。
java - インデックス バッファ オブジェクトの設定方法
lwjgl (Java OpenGL バインディング) を使用して基本モデルをレンダリングしようとしています。私は、私が覚えているものを使用して、できるだけ自分の知識からこれをやろうとしています. 次のような vbo を作成しました。
ここまでは、インデックス バッファ オブジェクトを使用して取得しました。
私が抱えている問題は、インデックス バッファを vao にバインドするために使用する方法がわからないということです。使用することがわかっている頂点データを含む vbo については、GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0);
インデックス バッファーの動作が異なることを覚えています。これは学習プロセスですので、批判は建設的に行ってください。
algorithm - 複数の .OBJ-index-buffers を OpenGL の 1 つのインデックス バッファにマップ/フォールドします。
.obj-File を読み込んで、 を使用して描画しようとしていますglDrawElements
。
さて、glDrawArrays
すべてが完璧に機能しますが、もちろん非効率的です。
私が今抱えている問題は、.obj ファイルが (属性ごとに) 複数のインデックス バッファーを使用しているのに対し、OpenGL は 1 つしか使用できないことです。したがって、それに応じてそれらをマッピングする必要があります。
そこには多くの疑似アルゴリズムがあり、C++ の実装も見つけました。私はかなりの C++ を知っていますが、奇妙なことに、どちらも Scala での実装には役立ちませんでした。
どれどれ:
これval indices: List[Int]
は私の最初の単純なアプローチであり、もちろん間違っています。しかし、一番上から始めましょう:
ファイルを読み込んで調べます。(.objファイルがどのように構成されているか知っていると思います)
頂点、テクスチャ座標、法線を読み込みました。それから私は顔に来ます。
さて、私の例の各面には、 をv_x, t_y, n_z
定義する3 つの値がありvertexAtIndexX, textureCoordAtIndexY, normalAtIndexZ
ます。したがって、これらのそれぞれが 1 つの頂点を定義し、これらの 3 つ (またはファイル内の 1 行) が面/ポリゴン/三角形を定義します。
私は実際にval vertices: List[Vertex] = for(face <- faces) yield(new Vertex(positions(face._1-1), textureCoordinates(face._2-1)))
頂点を作成しようとしています (現在、位置とテクスチャ座標のみを保持し、法線を無視するケースクラス)
本当の問題は次の行です。
val indices: List[Int] = faces.map(f => f._1-1) // Wrong!
実際のインデックスを取得するには、基本的に代わりにこれを行う必要があります
val vertices: List[Vertex] = for(face <- faces) yield(new Vertex(positions(face._1-1), textureCoordinates(face._2-1)))
と
val indices: List[Int] = faces.map(f => f._1-1) // Wrong!
擬似コード:
それでも私は完全に立ち往生しています。私はさまざまなことを試しましたが、実際に機能する素晴らしくクリーンなソリューションを思い付くことができません。
次のようなもの:
区別するものは何f.distinct
もないため、そこにあるすべてのエントリは一意であるため、機能していません。ファイルを見ると完全に理にかなっていますが、疑似コードが確認するように指示しています。
もちろん、それに応じてインデックスを埋める必要があります(できればワンライナーで、多くの機能的な美しさで)
しかし、重複を見つけようとする必要があるので...ちょっと困惑しています。すべての参照で、さまざまな「頂点」と「位置」を混同しすぎていると思います。
では、私の考えは間違っているのでしょうか、それともアルゴリズム/考え方が正しいのでしょうか?
教えてください!
コメントに従って、少し更新しました。
顔がまだある場所:
楽しい事実、私はまだそれを明らかに理解していません。
combinedIndices
最後に次のような自然数を保持することを意味します。