問題タブ [vertex-array]
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 - 頂点バッファ サイズの実用的なサイズ制限はどれくらいですか?
OpenGL では、通常、頂点バッファーを使用するとパフォーマンスが向上し、多くのオブジェクトを同じ頂点バッファーに入れることでパフォーマンスがさらに向上するため、1 回のglDrawArrays
呼び出しで多数の頂点を描画できます。
しかし、これの実際の上限はいくらですか? 同じバッファ内の頂点データの何 MB が多すぎますか? 頂点配列を 2 つの別々の頂点配列に分割する必要があるのはどの時点ですか? どうやってこれを知っていますか?
c - 頂点配列で一連の点を描画します:何も表示されません
私は次のことを行うための演習を試みています:いくつかのGLfloatで表されるポイントの配列があります。ユーザーはウィンドウ内のポイントをクリックして別のポイントを表示する必要があります。ポイントが追加されると、ウィンドウは次のようになります。再描画すると、ポイントが線で結ばれて表示されるため、ユーザーはウィンドウのいくつかの場所をクリックして線を描くことができます。
このコードでは、クリックがあるたびにベクトル内のポイントをプッシュしますが、ポイントは追加されないため、ポイントのない灰色のウィンドウ(ヘッダーで定義されたAPPLE_GRAY)が表示されます。
opengl - OpenGLのglDrawArrays()がコアプロファイル3.2のGL_INVALID_OPERATIONで失敗するのに、3.3または4.2では失敗しないのはなぜですか?
私はglDrawArraysを呼び出すOpenGLレンダリングコードを持っています。これは、OpenGLコンテキストが(自動的に/暗黙的に取得される)4.2の場合は問題なく機能しますが、明示的に要求されたOpenGLコアコンテキスト3.2では一貫して失敗します(GL_INVALID_OPERATION)。(どちらの場合も、シェーダーは常に#version 150に設定されていますが、それはここでのポイントの脇にあると思います。)
仕様によると、glDrawArrays()がGL_INVALID_OPERATIONで失敗する場合は2つだけです。
「ゼロ以外のバッファオブジェクト名が有効な配列にバインドされていて、バッファオブジェクトのデータストアが現在マッピングされている場合」-この時点ではバッファマッピングを行っていません
「ジオメトリシェーダーがアクティブで、モードが[...]と互換性がない場合」-いいえ、現時点ではジオメトリシェーダーはありません。
さらに:
glDrawArrays()呼び出しだけが失敗することを確認して再確認しました。また、glDrawArrays()に渡されるすべての引数が、両方のGLバージョン、バッファーバインディングでも同一であることを再確認しました。
これは、3つの異なるnvidia GPUと2つの異なるOSで発生します(Win7とOSX、どちらも64ビット-もちろん、OSXには3.2コンテキストしかなく、4.2はありません)。
統合された「IntelHD」GPUでは発生しませんが、その場合は、自動の暗黙的な3.3コンテキストしか取得しません(ここでGLFWを介してこのGPUで3.2コアプロファイルを明示的に強制しようとすると、ウィンドウの作成に失敗しますが、これはまったく別の問題です...)
価値のあるものとして、Golangのレンダリングループから抜粋した関連ルーチンを次に示します。
したがって、もちろんこれはより大きなレンダリングループの一部ですが、現時点での「* TMesh」構造全体は、単純な立方体と単純なピラミッドの2つのインスタンスにすぎません。重要なのは、描画ループ全体が問題なく動作し、GLが3.3と4.2の両方でエラーを照会されたときにエラーが報告されないことですが、明示的な3.2コアプロファイルを持つ3つのnvidia GPUでは、仕様に従ってのみ呼び出されるエラーコードで失敗します2つの特定の状況がありますが、私が知る限り、ここでは当てはまりません。
ここで何が間違っている可能性がありますか?これに遭遇したことがありますか?私が見逃しているアイデアはありますか?
opengl - glGenVertexArrays が一意の vaos を与えない
私の友人と私は、C++ と OpenGL を使用するプロジェクトに取り組んでいます。「ModelObject」の C++ クラスを作成しました。各 ModelObject にはメンバー変数として Gluint vao があります。次に、ModelObject の初期化中に呼び出します。
そして、初期化関数の最後に呼び出します
文脈から抜け出すこと。ここで、電車と立方体の 2 つのオブジェクトをレンダリングしようとしています。彼のマシン (Linux Mint) では、どちらも独自のテクスチャを使用して適切にレンダリングされ、vaos のオブジェクトをクエリすると、それぞれ 1 と 2 が返されます。
ただし、私のマシン (MacBook Pro) では、両方のオブジェクトが立方体としてレンダリングされます (ただし、一方は電車のテクスチャで、もう一方は立方体のテクスチャです)。それらの vaos を照会すると、0 と 0 が返されます。
実験として、glGenVertexArrays に ModelObject ごとに 5 つの vaos を作成するように指示しました。これにより、リスト 0、1、918273、8、7 (またはそれに類似したもの) が生成され、両方の ModelObject で同じリストになりました。
したがって、私が知る限り、glGenVertexArrays は、a) 有効なアドレスとして 0 を使用し、b) glDeleteVertexArray を呼び出していないにもかかわらず、呼び出しごとに同一のアドレスを生成します。彼のマシンではなく私のマシンでこれを行うのはなぜですか?どうすれば停止できますか?
c++ - 動的配列とバッファ オブジェクトを使用した描画
頂点配列とインデックス配列を作成するときに問題があります。コードの実際の問題はわかりませんが、配列の型に問題があると思います。誰かがこれについて教えてくれますか?
編集:
ここでの問題は、描画がまったく機能しないことです。しかし、エラーは発生しません。表示したいものが表示されないだけです。頂点を作成するコードを別の関数のバッファーに入れても、これは機能しません。私はこれをやろうとしました:
残りのコードは、プログラムの開始時に呼び出される別の関数に表示されます。しかし、問題はまだ
編集2:
glBufferData(GL_ARRAY_BUFFER,sizeof(squareVerts),squareVerts,GL_STATIC_DRAW); で問題が見つかりました。
sizeof(squareVerts) は sizeof(GLfloat)*x である必要があり、インデックスと同じです。
objective-c - OpenGL と Vertex Array オブジェクトの間違いをキャッチする際のトラブル
この OpenGL 実装の間違いを見つけるのに苦労しています。プログラムを実行すると、黒い画面しか表示されません。立方体が見えるはずです。私はどんな種類のエラーも得ていません。犯人は VAO に嘘をついている疑いがあります。
opengl-es - OpenGL ES 2.0-独自の平行移動、回転、スケール、およびアルファを持つパーティクルをバッチ描画するにはどうすればよいですか?
多くのパーティクルのすべての頂点データを1つの配列に結合しました。独自の翻訳を維持する方法で、これらすべてのパーティクルをバッチ描画するにはどうすればよいですか?
私はこれを行う方法についてとても混乱しています。この問題についてはすでに2つの投稿を作成しましたが、まだ混乱しています。現在OpenGLES1.1を使用していますが、独自の平行移動や回転などを使用してパーティクルのバッチレンダリングを実際に実行できる場合は、2.0にアップグレードする予定です。
2つの投稿は次のとおりです。
- OpenGL ES-さまざまなアルファ、回転、スケールを使用して500以上のパーティクルをバッチレンダリングする方法は?
- ゲームの速度を落とさずに、iPhone OpenGL ESパーティクルシステムで1000以上のパーティクル(独自の回転、スケール、アルファ付き)を描画するにはどうすればよいですか?
どちらも高レベルのアプローチを説明していますが、各パーティクルの平行移動、回転、スケールがフレームごとに変わるこのパーティクルのバッチをレンダリングする方法を知る必要があります。あなたの答えがCPUでの変換を計算することである場合は、この例を示してください。
現在、実装で頂点配列オブジェクトを使用しています。最高のパフォーマンスを得るには、VBOを使用する必要があることを理解しています。VBOを実装しますが、最初にバッチ処理を実装したいと思います。バッチ処理が正常に完了したら、VAOをVBOに変更します。したがって、この質問の焦点は、VAOを使用してこれをどのように達成するかです。
バッチ処理前のコードは次のとおりです。モデルビューマトリックスに新しいマトリックスをプッシュし、レンダリングされている現在のアクターに応じて変換、回転、スケーリング、アルファ化し、レンダリングされている現在のアクターの頂点とテクスチャコードを描画します。
ここで、すべてのパーティクルアクターの頂点とtextureCoordsをバッチ配列に結合したので、modelviewマトリックスに新しいマトリックスをプッシュし、それらのアクターの頂点とtextureCoordsを適切な変換、回転、スケールで描画したいと思います。 、アルファなど。
だから私の推測では、それは次のように見えるでしょう:
有効な答えは、この質問の解決策を明確に示すコード例を含むものです。
opengl - 頂点配列オブジェクトを使用するには何が必要ですか?
プログラムの1つで頂点配列オブジェクトを使用しようとしていますが、私のPCはこの機能をサポートしていないようです。
この関数を実行するglewIsSupported("GL_ARB_vertex_array_object")
と、falseが返されます。
ビデオドライバーを更新しようとすると、頂点配列オブジェクトが使用可能になる可能性がありますか?
ビデオカードのサポートをOpenGLで確認するにはどうすればよいですか?
頂点配列オブジェクトは、OpenGL 3.0以降で使用できますか?
ios - glVertexAttribPointerを使用して、シェーダーを使用してOpenGL2.0でモデルを描画します
OpenGLES 2.0を使用し、シェーダーも使用するデフォルトのテンプレートに基づいて、オブジェクト指向のiOSアプリを大まかにノックアップしましたが、これを以前に呼び出していたモデルにロードしようとしています。
上記のコードを使用した理由は、.obj
ファイルを、定義する必要のあるすべての配列に含めることができるファイルに変換したためです(obj2openglを参照)。現在、私は100%でglVertexPointer
はありませんが、非推奨の場所を読んでおり、デモアプリでこれを機能させるのに苦労しています。現在、私はこの単純な立方体を描いています:
代わりに、OpenGLシェーダーコードを使用して使用したテンプレートと、使用glVertexAttribPointer
した頂点配列は、同じ配列内に法線が含まれているため、わずかに異なります。
このコードを使用して、キューブを描画します(シェーダーファイルをロードした後)。
さて、私の質問は、Open GLES 2.0を使用して、シェーダーを使用している間ではなく、obj2opengl
使用して前述したように定義された頂点をロードすることは可能ですか?glVertexAttribPointer
glVertexPointer
モデルファイルの1つからのサンプルを次に示します。
opengl-es - 複数の頂点配列オブジェクトを使用するレンダラーに深度バッファーを導入する
複数の頂点配列オブジェクトを使用して複雑なシーンをレンダリングするレンダリング インフラストラクチャがあります。各頂点配列オブジェクトは、バインドされたバッファー、ポインター、および属性の独自のセットを維持する責任があります (これらは設計されているため)。
レンダリングを担当する複数の配列オブジェクトが与えられた場合、各個別の配列オブジェクトがレンダリング中に同じ深度バッファを使用するような方法で深度バッファリングを導入するにはどうすればよいですか? 言い換えれば、Vertex Array Objects (およびそれらの優れたカプセル化プロパティ) の概念と、よりグローバルな概念であると思われる深度バッファリングを統合するにはどうすればよいでしょうか。
私が見つけたすべての例は、フレームバッファのコンテキストで深度バッファを使用することを説明しています。Apple は、この手法についてここで説明しています。フレームバッファ レベルで深度バッファリングを実装し、頂点配列オブジェクトをそのフレームバッファに書き込む手法はありますか? VAO と深度バッファリングを使用する従うことができる例はありますか?
頂点配列オブジェクトをカプセル化するクラスがあり、これがそのバインド メソッドです (さまざまなバッファー、ポインター、および属性の設定を担当します)。
バインド後、draw メソッドは次のように実装されます (この draw メソッドは、個々の頂点バッファー オブジェクトごとに呼び出されます)。
これはすべてスムーズに機能しますが、深度バッファリングがこれに適合する場所を見つけるのに苦労しています。