問題タブ [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.
c++ - インデックス作成はどのように機能しますか?
私の理解では、OpenGL のインデックス作成またはIBO
s は主に、特定のジオメトリの描画に必要な頂点の数を減らすために使用されます。インデックス バッファを使用すると、OpenGL は指定されたインデックスを持つ頂点のみを描画し、他の頂点をスキップすることを理解しています。しかし、それはテクスチャリングを使用する可能性を排除しませんか? 私の知る限り、インデックス バッファで頂点をスキップすると、頂点属性もスキップされますか? 頂点属性が次のように設定されている場合:
次に、インデックスバッファをglDrawElements(...)
使用して、テクスチャリングの使用を排除しませv_Position
んか、それとも「再利用」されますか? そうでない場合、インデックス バッファを使用するときにテクスチャを作成するにはどうすればよいですか?
android - x 軸または y 軸に頂点を反映させた後、反時計回りの巻き順を復元する方法は?
頂点配列が呼び出され、CCW 巻きで呼び出さvertices
れるfinal
インデックス バッファーを使用して、OpenGL でポリゴンをレンダリングしています。DRAW_ORDER
バック フェース カリングを有効にして、 を使用してドロー コールを行いますglDrawElements(GL_TRIANGLES, DRAW_ORDER.capacity(), GL_UNSIGNED_SHORT, DRAW_ORDER)
。
行列変換を介して x 軸または y 軸で反射vertices
すると、反射によって頂点の向きが逆になり、 の反時計回りの巻き順と一致しなくなるため、ポリゴンがカリングされDRAW_ORDER
ます。
vertices
カリングを無効にすることで問題を防ぐことができますが、パフォーマンスのために、順列経由の向きを復元する方法を見つけたいと思います。たとえば、ポリゴンが三角形の場合、反射の後に 2 番目と 3 番目の頂点を交換するだけで、反時計回りの向きに戻すことができます。このアプローチを任意の数の頂点とインデックスを持つポリゴンに拡張するにはどうすればよいですか?
編集:これは、凸面ポリゴンでは機能するように見えるが、凹面では機能しないソリューションです。
下の画像では、楕円 (凸) では解決策が機能するが、星 (凹) では機能しないことがわかります。
c++ - オブジェクトを 1 つずつロードするときに OpenGL インデックスバッファが機能しない
私は OpenGL を学んでいて、「障害」に遭遇しました。インデックスバッファを使用していくつかの家 (ブロックとピラミッド) を描きました。これは、(すべての家からの) すべての頂点を頂点バッファーにロードし、1 つの大きなインデックスバッファーを使用する場合にうまく機能します。ここで、オブジェクトを 1 つずつアニメートし、頂点バッファに 1 つずつロードして、オブジェクトを 1 つずつ変換できるようにします。コードは 1 つの大きなバッファーと大差ありませんが、これを実行すると、ランダムな形状が画面上で動き回るのが見えます。私のコードは次のとおりです。
3D オブジェクトのリストを保持するワールド クラスがあり、すべての頂点の 1 つの大きなリスト (試行用)、インデックスの 1 つの大きなリスト (これも試行用)、および Object3D オブジェクトをワールドに追加するメソッドがあります。
};
Object3D クラス:
World AddObject メソッドは、単にオブジェクトを「オブジェクト」リストに追加し、頂点とインデックスを「頂点」リストと「インデックス」リストに追加して、1 つの大きなバッファーを作成します。
すべての頂点とインデックス (以下に示すように) を含む大きなバッファーをレンダリングすると、正常に動作します。
}
オブジェクトをループして、オブジェクトの頂点を一度に 1 つのオブジェクトずつバッファにロードすると (以下に示すように)、ランダムな「形状」が表示されます。ここで何が間違っていますか?アドバイスをよろしくお願いします。
UpdateBuffers メソッド:
最初の Render メソッド (ループなし) では、バッファーは次のように init メソッドで 1 回作成されます。
opengl - IBO の 3 重化シーケンスはどのように機能しますか?
難読化された OpenGL アプリケーションを分析しています。.obj
アプリケーションに表示されるマルチポリゴン モデルを記述するファイルを生成したいと考えています。
そこで、アプリをフリーズして、VBO と IBO に設定されている値を掘り出しました。しかし、IBO に設定された値は、私が予想していたよりもはるかに神秘的でした。値は
0、0、1、2、3、4、5、6、7、7、5、8、3、3、9、9、10、11、12、12、10、13、14、14、10、 15, 16, 16, 17, 17, 7, 8, 8, 18, 18, 19, 20, 21, 21, 22, 22, 23, 24, 25, 25, 26, 26, 27, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 35, 36, 37, 38, 38, 36, 39, 34, 34, 40, 40, 40, 41, 42, 43, 44, 44, 45, 45, 46, 47, 48, 49, 49, 50, 50, 51, 52, 52, 53, 53, 54, 55, 55, 56, 56, 57, 58, 58, 59, 59, 60, 61, 62, 62, 63, 63, 63, 64, 65, 66, 67, 64, 68, 68, 69, 69, 70, 71, 72, 73, 74, 75, 76, 76, 77, 77, 78, 79, 80, 81, 82, 82, 80, 83, 83, 84, 84, 85, 86, 87, 88, 88, 89, 89, 90, 91, 91, 92, 92, 92, 93, 94, 95, 96, 96, 97, 97, 97, 98, 99, 100, 101, 102, 102, 100, 103, 103, 104, 104, 105, 106, 107, 107, 108, 108, 108, 109, 110, 111, 112, 112, 100, 100, 101, 113, 114, 114, ... (長さ=10495)
40
、63
、 のようなインデックスが3 倍になっている 92
のがわかります。108
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
GL_QUADS
GL_QUAD_STRIP
GL_POLYGON
glDrawElements
IBO でトリプル シーケンス インデックスを使用する高度なテクニックはありますか? どういう意味ですか?どのような理由で使用されますか?
opengl - glDrawElementsBaseVertex はどのように機能しますか?
フラット プレーンとインデックス バッファー、または画像にインデックスがマークされた EBO があります。
今私が電話した場合:
私はこれを得る:
これはわかります。さらに、これを行うと:
これも一理あります。しかし、他のパラメーターのいずれかを変更すると、私の理解は完全に崩壊します。私がこれを行う場合:
次のようになります。
したがって、引数 3 を basevertex 引数 (最後の引数) に渡すことにより、インデックスの 3 つの位置からではなく、インデックスの 3 つの三角形からでもなく、インデックスの使用が開始されますが、約 6 つの三角形、またはより正確には開始されます。インデックス番号 18. この動作が理解できません。
また、これらの関数の「インデックス」の引数について矛盾する意味を読みました。
インデックス ポインターを使用すると、ポインターを提供することでインデックス バッファーを直接参照できるようになることを読みました。それが null の場合、インデックス バッファーは現在バインドされている GL_ELEMENT_ARRAY_BUFFER から取得されます。ただし、あるバージョンのドキュメントからは、次のように書かれています。
インデックスの読み取りを開始する GL_ELEMENT_ARRAY_BUFFER にバインドされたバッファーへのバイト オフセット (ポインター型にキャスト) を指定します。
そして、別のバージョンでは次のように述べています。
インデックスが格納されている場所へのポインターを指定します。
最後から 2 番目の引数 (インデックス) を (void*)3 として glDrawElementsBaseVertex を呼び出すと、最初の三角形が赤く描画されます。(void*)6 を指定すると、三角形が強調表示されません。(void*)9 を指定すると、2 番目の三角形が強調表示されます。
私はこれを理解することはできません。この引数 index は、現在バインドされている要素配列バッファーを使用する代わりに、使用したいインデックスへのオプションのポインターではないということですか?
javascript - インデックス バッファを使用してオフセットを使用して球体メッシュを描画する WebGL の問題
後で木の葉のように見えるように変更できる球メッシュを描画しようとしています。ただし、pointsArray には、球体メッシュから生成された頂点よりも前にある頂点もあります。各三角形を順番に描画するためのインデックスを含むインデックス バッファーがありますが、インデックス バッファーが他の頂点から三角形を描画することなく、球メッシュである頂点の最後の部分にアクセスする必要があります。ここでは、頂点、色、テクスチャ座標のバッファーを作成して、シェーダー コードに転送します。また、球メッシュ用に作成されたインデックス バッファもあります。
ここに私の球体生成コードがあります:
ここでは、残りの頂点を描画した後に球を描画しようとしています。
このコードを実行すると、インデックス バッファーは pointsArray の先頭から描画を開始し、建物全体を描画します。球体メッシュのインデックス バッファのみを使用するには、pointsArray のオフセットから開始する方法を教えてください。