問題タブ [vbo]
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.
exception - システム終了の原因となる OpenGL VBO エラー
JOGL を使用して OBJ モデルをロードし、VBO を使用して GL キャンバスに表示しています。ほとんどの場合、すべてが機能しますが、頂点を変形する必要があるモデルがいくつかあります。たとえば、矢印オブジェクトがあり、矢頭のオブジェクト ジオメトリを維持しながら、必要に応じて尾を長く/短くするために矢のステムを変形できる必要があります。これは、レンダラーの 1 つのインスタンスでは正常に機能しますが、シーンに別のインスタンスを追加しようとすると、GLDrawElements 呼び出しでシステムが終了し、このエラー ログが出力されます。誰かが私を正しい方向に向けることができますか? 私は完全に途方に暮れています。
ios - iOS デバイス用のこれら 2 つの VBO セットアップのうち、どちらが速いと思いますか?
大規模なデータ セットをテストする前に、まずあなたの脳を選択しようと思いました。
iOS デバイス用のこれら 2 つの vbo セットアップのうち、どちらが速いと思いますか? openGL-ES 1.x 環境で。
空のメイン GL_ELEMENT_ARRAY_BUFFER を設定し、実行ループで glBufferSubData を使用して、その時点で必要なインデックス データをサブフィルします。
他のセットアップは、事前に個々の GL_ELEMENT_ARRAY_BUFFER をセットアップし、実行ループで glBindBuffer を使用することです。
(「DrawOutShape」の下の両方の状況で、実行ループ内の唯一のルーチンです)
更新:人々の将来の参考のために、例3でこれを行う最良の方法を見つけたと思います:(間違っている場合は修正してください)。
簡単な質問: この行 "(GLushort*)(sizeof(GLushort)*shapetest2->deOffset)" を実行するためのより良い方法はありますか?
更新 2: 将来の参考のために、疑似インスタンス化では、現時点で iOS でインスタンス化が必要な場合、実行ループでデータをセットアップする方法はありません (多くのピースを用意し、回転させ、スケーリングし、配置します)。実行ループの最後に単一の glDrawElements を使用してそれらをすべて同時に描画し、ループを最初からやり直す前に (速度を実際よりも悪くすることなく)、実行ループの各「形状」に対して glDrawElements を用意する必要があります。残念ながら....将来のバージョンのopenGL-ESまたはAppleが、単一のglDrawElementsでインスタンス化できるようにしたかどうかを判断しました。これにより、FPSが5倍など、大幅に増加する可能性があります。スピードワイズ IMO で ES を抑えているのはレンガの壁です。
例 1:
例 2:
例 3:
c++ - OpenglesがVBOレンダリングと非VBOレンダリングを混合すると、EXC_BAD_ACCESSが得られます
やあみんな。以下に示す2つのメソッドをレンダリングしようとしています。RenderA()はVBOを使用していますが、RenderB()は使用していません。RenderB()でglDrawArrays()に到達すると、EXC_BAD_ACCESSエラーが発生します。
RenderB()は正常に機能しますが、VBOを作成して使用しない場合、つまりCreateVBOs()とRenderA()をコメントアウトする場合です。
- つまり、VBOの使用を開始すると、すべてのレンダリングでVBOを使用する必要があるということですか?
- または私はここで何が間違っているのですか?
編集(解決済み)
理解した。どうやら、vboなしでレンダリングするには、以前にバインドされていたバッファのバインドを解除する必要があります。
私のCreateVBOs()関数はバインドされましたが、バッファのバインドを解除しなかったため、RenderB()がglDrawArraysを使用しようとしたときに不正なアクセスが発生しました。バッファのバインドを解除すると、次のように0にバインドされます。
java - OpenGL Java VBO
とLWJGLで立方体を描画していますがglBegin/glEnd、この方法は非常に非効率的で、VBO の使用を開始する必要があると聞きました。それがどのように機能するのかわかりません。
VBOさまざまなサイズと位置 (回転なし) の立方体を描画したいのですが、これには s を使用する必要があると思います。
VBOsを使用する方法、またはs が最良の選択であるJava場合でも、サンプルコードや洞察を誰かに教えてもらえますか?VBO
ios - glBufferSubDataのパフォーマンスはiOSでひどいですか?
このコードがiOSのGPUで遅い理由を完全に理解することはできません。このコードは、Windowsで問題なく機能します。
基本的に私がやっていることは、1つの大きな動的頂点バッファー(GL_STREAM_DRAW)を持っていて、その一部だけを更新しようとすることです。単一のフレームでオーバーラップしてはならない部分は、フラッシュを引き起こさず、CPUはすべきではありません。 GPUが終了するのを待つ必要はありませんが、iPhone 4で10〜20の三角形を描画した場合でも、約10 fpsが得られるわけではありません...一方、PCでは400FPSを超えています。同じコード...
トレースでわかるように、同じバッファーを再利用していますが、更新された部分が重複しないようにしています...パフォーマンスを向上させるために何ができますか?
iphone - vboは同じサイズの頂点のみを保持しますか?
OpenGL / OpenGLES VBOは同じサイズの頂点のみを保持しますか?
glDrawElementsのパラメーターにはインデックスバッファーのみのオフセット値(最後のパラメーター)があることがわかったので、これは次のことを意味します。1.バッファーが既に部分的にいっぱいになっている場合は、インデックスをIBOに送信する前に手動でオフセットする必要があります。とにかく、手動でインデックスをオフセットするのは簡単なので、ここでは問題ありません。2.頂点バッファとして使用されるVBOは、同じサイズの頂点を保持する必要があります。そうでない場合、インデックスは無意味です。
この動作はDirectX頂点バッファーとは異なります。directxにはSetStreamSourceがあり、これを使用してVerterxバッファーをオフセットできます。また、VBが任意のサイズの頂点を保持できるDrawIndexedPrimitiveもあります。
SetStreamSourceのOpenGLES1.1バージョンが利用できない可能性がありますか?多分OpenGLES2.0はそれをサポートしますか?
私のターゲットプラットフォームはiPhoneOpenGLES1.1なので、GLバージョンのSetStreamSourceが利用できない場合は、次の理由でVBOの使用を断念します。1。問題が発生します(異なるサイズの頂点を保持する多くのVBOを割り当てる必要があります)2。とにかくパフォーマンスの向上はありません(OpenGLES 1.1ではハードウェアサポートはありません)
読んでいただきありがとうございます。OpenGLES1.1でVBOを使用する正しい方法についての経験を共有していただきありがとうございます。ありがとうございます。
c++ - 多くの大腿四頭筋、VBOにもかかわらず十分なfpsではない
しばらく時間があり、VBOについて読んだことがあります。それが、私が得たものです。
http://img64.imageshack.us/img64/5733/fps8.jpg
わかりました、以前よりずっと良くなりました。リリース時にコンパイルされます。私はVBO(おそらく、すべてがOKの場合)とglDrawArraysを使用して描画します。
これが描画コードです。最適化の方法を教えてください。地形で欲しかった...ええと、数千FPS、それは本当ですか?
それで私はそれで何ができるのでしょうか?(上記のコードは主な描画機能です)
編集
私はこれを移動しました:
私の主な機能に。おそらく改善はありません。
edit2
さて、それが記憶を食べていることもわかります。数秒ごとにプログラムのメモリ使用量がどんどん増えています...何が問題なのですか?削除しないものは何ですか?
edit3
わかりました、すっごくありがとう。いくつかのコードを描画関数の外に移動しました...はるかに多くのfps!本当にありがとう !
http://img197.imageshack.us/img197/5193/fpsfinal.jpg
640x640ブロック(つまり40倍大きい)マップで、650'000クワッド(約70倍)であり、それでも約170fpsです。素晴らしい !そして、メモリリークはありません。再度、感謝します !
opengl - glDrawArraysを使用したVBOの描画は、OpenGL 2.1では機能しますが、OpenGL3.xでは機能しません。
コードのコア(赤い長方形を表示):
コンテキストをOpenGL3.xに切り替えると、このコードは機能しなくなります(背景の色しか表示されません)が、上記のコードと同じ方法でVAOを初期化してから、VAOをバインドしてglDrawArraysを呼び出すと、その後、それは動作します。
何が問題なのですか?VAOを使用せずにVBOを描画するにはどうすればよいですか?
(シェーダーは本当に単純ですが、複数の行列とpsのみが赤色を出力します)
opengl - Using a different array for vertices and normals in glDrawElements (OpenGL/VBOs)
I'm currently programming a .obj loader in OpenGL. I store the vertex data in a VBO, then bind it using Vertex Attribs. Same for normals. Thing is, the normal data and vertex data aren't stored in the same order.
The indices I give to glDrawElements to render the mesh are used, I suppose, by OpenGL to get vertices in the vertex VBO and to get normals in the normals VBO.
Is there an opengl way, besides using glBegin/glVertex/glNormal/glEnd to tell glDrawElements to use an index for vertices and an other index for normals? Thanks
c# - C# でインターリーブされた頂点を使用する VBO
VBO を使用して、OpenTK を使用して C# でモデルを描画しようとしています。私のオンライン調査では、インターリーブされたデータ構造のサイズを正確に 32 バイトの倍数にすることをお勧めします。
具体的な質問:
1.) インターリーブされた頂点データ構造は、構造体またはクラスのどちらである必要がありますか? これは、VBO および/またはメモリ フットプリントに関する限り、違いがありますか? (私は構造体を使用することにしましたが、それは間違っていると感じました。頂点はメモリに格納されると変更されないためです。)
2.) このデータ構造は本当に 32 バイトの倍数のサイズである必要がありますか? (つまり、正しいサイズを強制するために「ダミー」のパディングメンバーが必要ですか?オンラインで見つけた例はすべて C++ であったため、同じアイデア/動機が C# に引き継がれるかどうかに特に関心があります。
3.) [Serializable] [StructLayout(LayoutKind.Sequential)] は本当に必要ですか? これをオンラインで見つけた例からコピーしたので...