問題タブ [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.
java - VAO がシェーダーでカラーでレンダリングされない
私は最近 OpenGL の学習を開始し、シェーダーで VAO と VBO を使用して画面にダイヤモンドを表示するプログラムを作成しようとしています。私のコードは主にこのチュートリアルに基づいています: https://www.opengl.org/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_%28C_/_SDL%29 また、チュートリアルのシェーダーも使用しました。ひし形は、頂点配列オブジェクトからの色情報を使用して描画されるはずですが、代わりに白で描画されます。シェーダーは正常にロードされているように見えるので、頂点とバッファー配列オブジェクトに問題があると思います。誰かが私のコードが期待どおりに機能しない理由を説明したり、色属性の配列から色を使用して VAO をレンダリングする方法の明確な例を示したりできますか?
}
ShaderControl2 コード:
シェーダー コード
f.txt:
v.txt:
c++ - OpenGL VAO VBO シェーダーの混乱
私はレンダラーを作成しており、vao/vbo/shader の管理を処理する最終的な方法を選択する段階にあります。Web 上で、実際に何が推奨されているかについて非常に矛盾した情報を見つけました。現在のアイデアは次のとおりです。
- 1 つの VBO にすべてのメッシュが連続して格納されます。
- 「シェーダー マッピング」ごとに VAO を作成し、特定のポインター マッピングを VBO に格納します。(「シェーダー マッピング」、同一の入力を持つ異なるシェーダー全体で一貫しています)
次に、エンティティを「シェーダー マッピング」で並べ替え、メイン VBO のオフセットを使用してレンダリングし、シェーダーと VAO の切り替えを最小限に抑えます。何かのようなもの:
これにはかなりの量のリファクタリングが含まれるため、このソリューションが最適かどうかを尋ねたかったのです。また、単一の VBO で複数のインターリーブ形式を使用できるかどうかも疑問です。
opengl - glDrawElements によりアクセス違反の読み取りが発生する
私はそれを修正しました - 実用的な解決策はページの下部にあります。
インターリーブされた vbo と vao で遊ぼうとしています。私は単純な三角形でそれをテストしています - これは私のインデックスデータと頂点データがどのように見えるかです:
これは vertex_col 構造体です:
これは、vao と vbo にデータをロードする方法です。
そして、これが私がvaoを描く方法です:
最後の操作により、このエラー「アクセス違反の読み取り場所 0x00000000」が発生し、その理由がわかりません。また、質問に関連する場合は、ライブラリ glew と glfw を使用しています。
修正版:
opengl - OpenGL VAO は常に原点から最初の頂点を描画します
タイトルは私の問題を要約していますが、最初の頂点を何に設定しても、OpenGL は常に原点に描画します。学校のコンピューターでこれを試してみましたが、問題はありませんでしたが、学校にいないので、変更したものが問題を引き起こしている可能性があります。とにかく、これが起こるべき理由はわかりません。構文が奇妙に思われる場合、このコードは D で記述されていますが、C からのほぼシームレスなポートである必要があります。
私のコードは次のとおりです。
opengl - OpenGL 頂点バッファー バインディング ポイントを異なる VAO 間で再利用できますか?
新しい (OpenGL 4.3 以降) glBindVertexBuffer メカニズムを使用して、2 つの VAO を設定するとします。
...
...
そして、同じ OpenGL コンテキストに存在する場合を除いて、2 つが独立しているとします。それらは異なるバッファーをバインドし、異なるものを描画するために使用されます。
bindingIndex0 は bindingIndex1 と異なる必要がありますか? 2 つの指標が等しい (または等しくない) ことには、まったく意味がありますか?
...
編集:
回答を受け取った後、「頂点バッファー バインディング ポイント」とは何か、特にその範囲を実際に知っている人にとって、私の質問は私が意図したものとは異なることを尋ねているように見えるかもしれないことを理解し始めました。おそらく、より適切な言い回しは、「競合を防ぐために、複数の VAO 間であっても、OpenGL 頂点バッファー バインディング ポイントインデックスが再利用されるのを防ぐために、自分のやり方を変える必要がありますか?」でした。しかし、とにかく、両方の質問に答えたようです: いいえ、「バインディング ポイント」を再利用することはできません。また、インデックスの競合をそのように回避する必要はありません。
java - LWJGL 3、VAO、シェーダーがレンダリングされない
LWJGL 3 とシェーダーを VAO で使用しています。私の現在の実装では、シェーダーを使用するときに VAO を描画しません。ただし、シェーダーを使用しない場合、VAO は描画されますが、VAO は白になります。私の質問は、シェーダーの使用時に VAO が表示されない原因となっている、シェーダーのセットアップに欠けているものは何ですか?
メインクラス。
シェーダーと VAO のセットアップは gameStart() メソッドにあります。
シェーダー クラス。
頂点シェーダーとフラグメント シェーダー。
c++ - OpenGL VAO がメッシュをレンダリングしない
OpenGL と SDL2 ウィンドウを使用して、画面に単純な形状を描画しようとしています。私のシェーダーにはエラーがなく、glGetError() は何も出力しないので、何が問題なのかわかりません。これは、.OBJ ファイルをロードし、OpenGL がレンダリングできるように解析するメッシュ クラスです。
シェーダーが正しくコンパイルおよびリンクされているため、ここに何かがあるに違いないと思います。描画メソッドを呼び出したときに実際には何も描画されていないだけです。誰かが何か洞察を持っているなら、それは大歓迎です。ありがとう