問題タブ [vertex-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 - glDrawElementsでインデックスを理解するのに苦労
で地形を描画しようとしてGL_TRIANGLE_STRIP
いglDrawElements
ますが、背後にあるインデックスのことを理解するのに非常に苦労していglDrawElements
ます...
これが私がこれまでに持っているものです:
私は自分vArray
が正しいと信じています。描画するときに同じ値を使用しますが、glBegin(GL_TRIANGLE_STRIP)/glEnd
これは問題なく機能します。
私の推測では、各頂点の座標のインデックスのみを使用することでした。x
しかし、それが。でインデックスを使用する正しい方法であるかどうかはわかりませんglDrawElements
。
- 0:三角形の最初の頂点からのx座標のインデックス。場所:(-128、-128)。
- 768:三角形の2番目の頂点からのx座標のインデックス。場所:(-128、-127)
- 3:三角形の3番目の頂点からのx座標のインデックス。場所:(-127、-128)
- 771:2番目の三角形を描画する4番目の頂点からのx座標のインデックス。場所:(-127、-127)。
これまでのところすべてが理にかなっていると思いますか?
動作していないのは、上記の場所の値(私がダブルチェックしたものでvArray
あり、それらは正しい)がglDrawElements
使用しているものと同じではないということです。2つの三角形が描かれていますが、それらは本来あるべきものよりもはるかに大きくなっています。正しくは(-128、-128)から始まりますが、(-127、-127)ではなく(-125、-125)のようになります。
ここで何が間違っているのか理解できません...
opengl - 退化した三角形と GL_TRIANGLE_STRIP の問題
を 1 回呼び出すだけで複数の三角形ストリップを描画しようとしてglDrawElements
いますが、この問題に関する調査では、縮退した三角形を使用する必要があることがわかりました。この件に関する私の理解は間違っているかもしれませんが、これにより、ストリップから別のストリップに「ジャンプ」できるはずだと思いました。
このための私のコード全体は、私が投稿したこの最近の質問にあります。関連があると思われる場合は、そこを見てください。
私は基本的に、もちろん4つの三角形で2つのクワッド(単純化のため)を描画しようとしていますが、互いに分離しています。そのために、次のようなインデックスを使用します。
最初のストリップの最初の頂点は 0 から始まり、2 番目のストリップの最初の頂点は 256 から始まります。これは、このインデックスの最終結果です。
これは正しいですか、それとも 2 つのクワッドを「接続」する線がまったく存在しないと考えているのは正しいですか?
c++ - 頂点バッファ データのメモリ管理
静止画像 (100 個の星) をレンダリングする必要があるとします。星のデータ (位置、色、サイズ) を std::vector 星に生成します。
次に、バッファーで構成される D3D レンダリング用のクラスを作成します。
ctor では、次のように初期化します。
その後、不要になった std::vector を破棄することがあります。
質問は次のとおりです。
spDevice->CreateBuffer(&vertexBuffDescr, &initVertexData, &m_spStarBuffer));
このコードの平和のためのメモリ割り当てはどこで行われますか? それはグラフィックメモリですか、それとも現在のプロセスメモリですか?ギャラクシー マップをレンダリングする必要がなくなった場合 (たとえば、ギャラクシー マップが不要な次のレベルに移動したい場合)、CGalaxyMapRenderer を破棄します。dtor で m_spStarBuffer が自動的に破棄されます。問題は、すべてのバッファ リソースをクリアするだけで十分かということです。または、メモリを解放するために追加の手順を実行する必要がありますか?
opengl - 頂点とインデックス バッファを GPU にアップロードする
私は地形エンジンを作成しており、地形が巨大ではないため、現在、地形 VB (頂点バッファー) と IB (インデックス バッファー) 全体を一度に GPU にアップロードしています。現時点では 256x256 です。
ここで、パーリン ノイズを使用して高さマップを生成する手続き型地形を作成したいとします。
もちろん、「パッチ」を生成し、パッチのすべての VB と IB を一度に GPU にアップロードすることもできますが、プレーヤーが遠くに移動して新しいパッチを生成する必要がある場合は、新しいパッチを生成してアップロードする必要があります。それらをGPUに。私が心に抱えている混乱や問題は次のとおりです。
VB と IB を GPU にアップロードするのは遅いですか? データが GPU にアップロードされるとき、プレーヤーはちらつきに気付きますか?
パッチの VB と IB を一度にすべてではなく、徐々に GPU にアップロードすると、パフォーマンスは向上しますか? 基本的に、VB と IB のサイズが重要かどうかを尋ねています。
この概念に関する情報は大歓迎です。
ありがとう!
ios - OpenGLES2頂点配列オブジェクトのヘルプ
OpenGL ES2(iOS上)でVAOを使用する方法を理解し、それらを機能させるのに問題があります。私の現在のレンダリング設定は次のようになります(擬似コード):
初期化:
フレームのレンダリング:
これは正常に機能しますが、両方のVBOにはまったく同じインターリーブ頂点属性構造体があります。ご覧のとおり、すべてのVBOのフレームごとに各属性を設定して有効にしています。InstrumentsはglVertexAttribPointer()とglEnableVertexAttribArray()への冗長な呼び出しについて文句を言いますが、それらの一方または両方を初期化フェーズに移動すると、glDrawElementsを呼び出すときにEXC_BAD_ACCESSを取得するか、何も描画されません。
私の質問は、これをフレームごとに行う必要があるかどうか、そうでない場合になぜ機能しないのか、そしてこれを解決するためにVAOをどのように使用するのかということです。
opengl - OpenGL 頂点バッファ オブジェクト、衝突検出などの他の用途のために頂点データにアクセスできますか?
私は現在、Superbible 5th edition に付属している GLTools クラスを使用しています。私は GLTriangleBatch クラスを探していますが、次のコードがあります:
私が理解していることから、コードはポインター pVerts、pNorms、pTexCoords、pIndexes の配列を渡し、それらを頂点バッファー オブジェクトの配列である頂点配列オブジェクトに格納します。これらは GPU のメモリに格納されます。その後、元のポインタは削除されます。
pVert が指す配列に保持されていた頂点位置にアクセスすることに興味があります。
今、私の質問は衝突検出を中心に展開しています。GLTriangleBatch のすべての頂点の配列にアクセスできるようにしたいと考えています。vertexBufferObject
何らかの getter メソッドを使用して、後でそれらを取得できますか? pVerts ポインターを保持し、代わりに getter メソッドを使用するのが最善でしょうか? 将来的にGJK衝突検出アルゴリズムを実装したいので、パフォーマンスの面で考えています...
opengl - 次の gcc 警告を修正するにはどうすればよいですか?
私は OpenGL の学習を開始し、頂点バッファー オブジェクトを使用して回転する立方体を作成することができました。ただし、コードをコンパイルすると、gcc は次の警告を発行します。
これらの警告を修正するにはどうすればよいですか?
これは私のコードです:
さらに、次のコマンドを使用してコードをコンパイルします。gcc sdlogl.c -g -Wall -lSDL -lGL -lGLU
opengl - 古典的な「何もレンダリングされていない」OpenGLの問題
私は知っています、それはかなりイライラします。OpenGLアプリケーションに何も表示されません。表示されるのは空のビューポートだけです。
私が最初にアプリケーションを書き始めたとき、私は手動で頂点を描画していました(を使用してGL_QUADS
)、そしてすべてがうまくいきました。次に、 VBO(V ertex B uffer Object)に切り替えることにしました。今は何も機能しません。
頂点の構造は次のとおりです。
ご覧のとおり、これは非常に単純です。頂点とRGBAカラーデータのx座標とy座標です。頂点とインデックスバッファを埋めるコードは次のとおりです。
最後になりましたが、間違いなく重要なことですが、長方形を描画するためのコードは次のとおりです。
何もレンダリングされていない理由がわかりません。頂点とカラーのデータは、を使用していた以前のバージョンから基本的に変更されていませんglVertex2f()
。
iphone - OpenGL ES 2.0および頂点バッファオブジェクト(VBO)
opengl es 2.0 for iphoneで、自分の地形に頂点バッファオブジェクトを使用する方法がわかりません。静的データなので、VBOを使ってスピードアップしたいと思っています。通常のOpenGLでは、シェーダーと一緒にディスプレイリストを問題なく使用しています。ただし、opengl es 2.0では、頂点データを属性としてシェーダーに送信する必要があり、これがVBOでどのように機能するかわかりません。頂点バッファは、呼び出されたときに頂点データをバインドする必要がある属性をどのように知ることができますか?これはopengles2.0でも可能ですか?そうでない場合、静的な地形のレンダリングを最適化する他の方法はありますか?
directx - directx 9 の固定機能パイプラインで setvertexdeclaration を使用する
独自の頂点構造を使用し、頂点を頂点バッファーにアップロードし (FVF コードを使用せずにインデックス バッファーにインデックスを挿入)、頂点宣言とストリーム ソースをセットアップして使用し、固定シェーダーで DrawIndexedPrimitive を使用してそれらを描画しようとしています (ただし、 FVF)。
directx 9 SetVertexDeclaration を使用するには、独自のシェーダーを作成する必要がありますか? SetVertexDeclaration と fixed-pipeline でカスタマイズされた頂点構造を使用できますか? 可能であれば、固定パイプラインと頂点宣言に制限はありますか?
カスタマイズされた頂点構造: