問題タブ [vao]
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.
ios - IBO と VAO を解放するときの EXC_BAD_ACCESS
新しいモデルが読み込まれるたびにステージ上で VBO、IBO、VAO が作成される iOS で小さなゲームを作成しました。モデルが不要になると、それらのバッファーは解放されます。
バッファの作成と破棄は、常にレンダリング ループの開始時に行われます (ゲーム ループでフレーム スキップを行う 1 つのスレッドがあります)。
以前は VBO と VAO のみを使用していて、以前はクラッシュしたことはありませんでしたが、インデックス バッファー オブジェクト (IBO) を追加すると、突然これらのクラッシュが発生し始めました。
バッファを解放しなければクラッシュしないので、モデルがまだレンダリングされていて、バッファを消去するとクラッシュするのではないでしょうか? しかし、スレッドが 1 つしかない場合はどうすればよいでしょうか。ところで、私はデータを消去しません。すべての頂点とインデックスは静的です。
これは、特定のモデルの参照が残っていないときに呼び出されるバッファーを解放するコードです。
c++ - C++/OpenGL - VAO の問題
VBO について学んだ後、ある友人から、立方体のインデックスを頂点にリンクするために VAO を使用してみるように言われました。私は見つけることができるすべてのチュートリアルについて、役に立たなかった. バッファが正しくバインドされているように見え、描画しようとするまですべてが機能します。
これは私がVAOを生成する方法です -
レンダリング -
opengl - QOpenGLVertexArrayObject は複数の VBO で segfault を引き起こしますか?
Qt 5 でインスタンス化されたレンダリングを使用しようとしていますが、問題が発生しています。私の問題は、VAO の使用にまでさかのぼると思います。私は経験豊富なプログラマーであり、これらの問題はほとんど常に私のせいであることを知っていますが、時折 Qt のバグに遭遇したので、バグ レポートを提出する前に助けを借りることができると思いました。
インスタンス化を使用しない簡単な例をまとめました (開発中の「実際の」ソフトウェアではこの問題が発生していないにもかかわらず、何らかの理由で最新バージョンの OpenGL を要求できません)。 .
初期化時に、VAO と 2 つの VBO を作成します。1 つの VBO には何らかのデータが入力され、バインドされたままになります。もう 1 つは割り当てられますが、解放されます (実際には使用しません。最終的にインスタンス化のために行列を書き込むことを計画していましたが、そこまでは行きませんでした)。
VAO または 2 番目の VBO の使用を簡単にオンまたはオフにするために、いくつかのプリプロセッサ ディレクティブを追加しました。VAO と VBO の両方を使用すると、セグメンテーション エラーが発生します。2 番目の VBO または VAO のいずれかを取り除くと、セグ フォールトはなくなり、図面は正しく表示されます (色付きの三角形の後ろに白い三角形が描かれるはずです)。
コードは次のとおりです。
glbuffertest.cpp:
glbuffertest.cpp:
glwindow.cpp:
glwindow.h:
私がやっている愚かなことを誰かが見つけることができますか?
opengl - OpenGL VBO 割り当てに関する単純な好奇心
OpenGL と GLSL を使用して単純なグラフィック エンジンを作成しました。ここまでは、新しいメッシュ シーン ノードを作成する必要があるときに、メッシュごとに VAO、VBO、および IBO を作成していました。この方法で各メッシュの頂点属性をロードしました。
しかし、シーンが多数のメッシュで構成されている場合、パフォーマンスが正しくありません (状態の変化が多すぎます)。そこで、シーンのすべてのジオメトリに対して一意の VAO、VBO、および IBO (シングルトン クラス) を作成することにしました。
これを行う方法は次のとおりです。
各メッシュの特定のクラス (「VertexAttributes」と呼びましょう) にすべての頂点属性をロードします。すべてのメッシュがロードされた後、大きな頂点バッファーを一意の VBO に割り当てることができます。上記のように、最初に関数 'glBufferData' を呼び出してシーン内のすべての頂点属性のサイズでメモリ全体を割り当て、その後ループ内の頂点属性の種類ごとに関数 'glBufferSubData' を呼び出します。
しかし、(メッシュごとに) glBufferData を数回呼び出して、シーンの読み込み中に VBO を埋めることは可能ですか (メッシュごとに段階的に)。したがって、再割り当てのように見えます。OpenGLでこれを行うことは可能ですか、それとも私の最初の方法は良い方法ですか?
qt - Qt 5 のインスタンス化で VAO を使用する方法
インスタンス化されたレンダリングに適切にVAOを使用する方法に頭を悩ませようとしています(特にQt 5.2では、OpenGL 3.3を使用しています)。私の理解では、VAO は VBO と関連する属性の状態を保存するため、描画時にすべてをバインドして有効にすることを心配する必要はなく、VAO をバインドするだけです。しかし、インスタンス化では、複数の VBO を持つことがよくあります。それらすべてをバインドする必要があることをどのように回避しますか? それとも、頂点ごとのデータとインスタンスごとのデータの両方に単一の VBO を使用する必要がありますか?
たとえば、いくつかのチュートリアルを見てきました。http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html
彼が行っていることは、インスタンスごとのデータではなく、頂点ごとのデータに VAO を使用しているように見えます。私は自分の Qt ベースのコードで同じことを試みましたが、うまくいきません (おそらく、それがどのように機能するかを完全には理解していないためです...描画が発生したときに、彼のインスタンス データをバインドする必要があるべきではありません)。 ?)
いくつかのダミー コード...これは少しばかげています。インスタンスごとの属性として透視行列を使用して、2 つの三角形の 1 つのインスタンスを描画しているだけです。
glwindow.cpp:
glwindow.h:
glbuffertest.cpp:
glbuffertest.pro:
_matbo
更新:バッファーを取り除き、代わりに行列データを位置と色の属性と同じ VBO に入れようとしましたが、うまくいきません。私のinitGL
関数は次のようになります。
とpaintGL
:
したがって、私のインスタンス化の問題は、間違ったタイミングで間違ったバッファーをバインドすることよりも大きいようです。他に何が間違っていますか?
opengl - 3D コンピュータ サイエンス (3D エンジン) で「バッチ」という用語は正確には何を意味しますか?
OpenGL を使用して 3D アプリケーションを開発しています。
次の投稿の一部について誤解があります: OpenGL VAO のベスト プラクティス
この投稿の「バッチ」という用語の意味がよくわかりません。
シーンのオブジェクトごとということですか?では、シーンの各オブジェクトまたは複数のオブジェクトに対して VAO を作成することをお勧めしますか? バッチとは、同じマテリアル、変換、およびシェーディングを共有する複数のオブジェクトを指しますか?
groovy - OpenGL の「hello world」レンダリングが行われないのはなぜですか?
私はこれで2日間壁に頭をぶつけてきました。私は可能な限り単純な OpenGL コア ~2.0-3.2 描画シーケンスを抽出して、そこからコードを構築し、API を本当に理解できるようにしようとしています。私が直面している問題は、チュートリアルに、使用している OpenGL のバージョンを示す便利なタグが付いていないように見えることです。これは、コンテキストから特定のバージョンを要求する方法についてのドキュメントに出くわしたのは、純粋に運が良かったからです。
即時モードの描画でエラーがスローされるため、3.2 コアが有効になっていることは確かです (これは良いことです! 即時モードを残したい!)。また、座標変換や三角形の巻線などの空想的なものを取り除こうとしました。それは私のディスプレイを台無しにするかもしれません。問題は、画面に何も表示されないことです。
このプログラムの以前の反復では、ランダムな座標を使用して画面上に白い三角形を表示することができましたが、頂点が適切に設定されていないように思われ、奇妙なビットの組み合わせが奇妙な結果を生み出します。三角形が出現する場所の符号は問題ではありませんでした。したがって、私の理論では、頂点情報が頂点シェーダーに適切に転送されていないか、シェーダーがそれを台無しにしているということです。問題は、私が見つけたすべての結果とログをチェックしていて、シェーダーが見事にコンパイルされ、リンクされていることです。
以下にリンクとコードを提供しますが、三角形を画面上に表示するだけでなく、シェーダー プログラムでテキストや診断値をシェーダー情報ログに吐き出すことはできますか? これにより、デバッグプロセスが大幅に簡素化されます。
私が相談しているさまざまなチュートリアルは...
http://arcsynthesis.org/gltut/Basics/Tutorial%2001.html http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Introduction https://en.wikipedia.org/wiki/Vertex_Buffer_Object http://www .opengl.org/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_(C_/_SDL) http://antongerdelan.net/opengl/hellotriangle.html http://lwjgl.org/wiki/index.php?title=The_Quad_with_DrawArrays http ://lwjgl.org/wiki/index.php?title=Using_Vertex_Buffer_Objects_(VBO) http://www.opengl.org/wiki/Vertex_Rendering
http://www.opengl.org/wiki/Layout_Qualifier_(GLSL) (提供されたコードには存在しませんが、私が試したのはレイアウト修飾子 0 (in_Position) および 1 (in_Color) を持つ #version 420 でした)
コード (LWJGL + Groovy)
重要ではありませんが、カードは GL4 をサポートする ATI Radeon HD 8550G (A8 APU の一部) です。
リクエストに応じてさらに情報を更新しますが、これを診断するのに他に何が役立つかわかりません.
編集: Reto Koradi によって提案された変更を反映するために上記のコードを更新しました。別の頂点宣言を使用して実行されるコードのバリアントもあります。
これは実際には画面上にラスタライズされたものを生成しますが、私が期待するものとはまったく異なります。単純に右下 (右上?) のポイントを再配置するのではなく、何もない、完全に白い、次の 2 つの形状の間で反転します。
2 番目または 3 番目の頂点を置き換えると、これが発生します。最初の頂点を置き換えると、画面に何も表示されません。したがって、どの頂点が実際にウィンドウの中央に表示されているかについての私の仮定を確認するために、次のことを試しました。
シンプルですね。中央の頂点はおそらく最初の「赤い」頂点であるはずです。これはオプションではない頂点であり、それなしでは画面に何も描画できないようです。実際にはそうではありません。ハーフスクリーン ブロックは常に予想どおり赤ですが、左向きの三角形の形状は常に、置き換える頂点の色になります。2 番目の頂点を置き換えると緑になり、3 番目の頂点を置き換えると青になります。「-0.8、-0.8」と「0.8、-0.8」の両方が画面からはみ出しているように見えるため、表示されている三角形のセクションは事実上無限に細い線になっています。しかし、これは変換によるものではないと思います。これは、配置の問題のように動作し、0.9 前後の任意のしきい値を使用して、座標をファーランドに送信します。
ドリルダウンを続けるために、ハードコードされたGLSLの量を増やして、バッファーを完全に無視しました-
これにより、各頂点に異なる色の素敵な大きな三角形が生成されます。明らかに、頂点バッファーからこの同じ三角形を取得したいのですが、それは本当に良いスタートです.2つの頂点を使用すると、少なくとも最終頂点がどの方向に発射されているかを知ることができます.最初の頂点の場合、それは間違いなくdown .
また、プロファイルでデバッグ モードを有効にする方法も見つけましたが、カラー バッファ エラーが発生しています。良い!それが始まりです。では、大量の VBO エラーが発生しないのはなぜでしょうか?