問題タブ [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.

0 投票する
1 に答える
91 参照

java - 異なる VAO をレンダリングする

LWJGL/OpenGL を使用して学習とプログラミングを行っています。マップをチャンクでレンダリングしたい。このために、チャンクごとに VAO と VBO を作成し、それらをアップロードしてリンクします。

問題は、最初のチャンクをレンダリングすると、次の 3 つのチャンクすべてがその上にレンダリングされることです。2 番目のチャンクをレンダリングすると、次の 2 つのチャンクが一番上にレンダリングされます。

これは私のアプリケーションのログで、VAO のセットアップ方法を説明しています。

バッファサイズは予想どおりです。

バインディングには、glBindVertexArray() と glBindBuffer(GL_ARRAY_BUFFER, ) を使用します。

描画には glDrawArrays() を使用します

VAO の設定方法が間違っているのでしょうか、それとも問題を解決するために私のコードが必要ですか?

0 投票する
1 に答える
180 参照

java - OpenGL シェーダーで属性の位置をクリアする

OpenGL で属性の場所を上書きまたはクリアする方法はありますか? たとえば (私は lwjgl を使用しています)、次のようにレンダリングします。

その後、同じshaderProgramIDで次のコードを実行したい

ご覧のとおり、次のコードをこれから変更しました。

これに:

しかし、両方のコードを実行すると、

1 ではなく 0 を返します

新しい場所をバインドできるように、以前にバインドされた場所をクリアする方法はありますか?

0 投票する
0 に答える
84 参照

qt - Qt/OpenGL の問題。QGLWidget が最初に表示されない限り、プリミティブはレンダリングされません

だから私は複数のタブを持つ Qt アプリケーションを持っています。タブの 1 つに、VAO/VBO を使用してプリミティブをレンダリングしようとしている QGLWidget があります。

私の初期化コードは次のようになります。

そして、paintGL() ループの描画コードは次のようになります。

QGLWidget を含む私のタブが最初に表示されている限り、これは正常に機能します。ただし、QGlWidget が最初に表示されない場合、これは機能しません。VAO/VBO の初期化は正しく行われます (glGetError() でこれを確認したところ問題ないようです)。ただし、描画/ペイント ループが直後に呼び出されないためです (paintGL をトリガーするには、GL タブに切り替える必要があります)。 draw)、GL タブに切り替えても何もレンダリングされません。繰り返しますが、QGLWidget を最初のタブにすると、初期化の直後に描画がトリガーされ、すべてが正常にレンダリングされます。

これはなぜでしょうか?ここで何か不足していますか?描画ループ/paintGLが直後に発生しない場合、VAO/VBOの初期化が機能しない理由はありますか?

私はシェーダーを使用していないことにも言及する必要があると思います。これはレガシー アプリケーションなので、ゆっくりと更新を開始しています。最初のステップは、頂点をカードに取得することでした。もともと、VAO/VBO の代わりに glEnableClientState の呼び出しを使用していましたが、変換はすべてマトリックス スタックを介して処理され、色は glColor を介して指定されます。

0 投票する
0 に答える
1359 参照

c++ - VAO を実装しようとしているときに、glMapBufferRange エラー「バッファーはバインドされ、マップされていない必要があります」

問題は、バッファに書き込むことです。

これは最初の呼び出しでは正常に機能しますが、2 番目の呼び出しでは機能しません。正確な理由はわかりません。

考えられる原因のうち:

  • ゼロがターゲットにバインドされている場合、GL_INVALID_OPERATION は glMapBufferRange によって生成されます。
  • GL_INVALID_VALUE は、オフセットまたは長さが負の場合、オフセット + 長さがバッファ オブジェクトの GL_BUFFER_SIZE の値より大きい場合、または上で定義されたもの以外のビット セットがアクセスにある場合に生成されます。
  • 長さはゼロです。
  • バッファ オブジェクトは既にマップされた状態にあります。
  • GL_MAP_READ_BIT も GL_MAP_WRITE_BIT も設定されていません。
  • GL_MAP_READ_BIT が設定され、GL_MAP_INVALIDATE_RANGE_BIT、GL_MAP_INVALIDATE_BUFFER_BIT、または GL_MAP_UNSYNCHRONIZED_BIT のいずれかが設定されています。
  • GL_MAP_FLUSH_EXPLICIT_BIT が設定され、GL_MAP_WRITE_BIT が設定されていません。
  • GL_MAP_READ_BIT、GL_MAP_WRITE_BIT、GL_MAP_PERSISTENT_BIT、または GL_MAP_COHERENT_BIT のいずれかが設定されていますが、同じビットがバッファーのストレージ フラグに含まれていません。

...確認/修正する方法がわからない唯一のものは、「バッファーオブジェクトは既にマップされた状態にあります」です。それは私が見ているエラーに関連している可能性がありますか?

その場合、GL_MAP_PERSISTENT_BIT について読みましたが、4.2 をターゲットにしており、glBufferStorage には 4.4 が必要なので、その場合の状況を他にどのように修正できるかわかりません。

残念ながら、大量のものを変更せずに関連するすべてのコードを投稿することはできませんが、基本的なセットアップは、新しく作成された GL_ARRAY_BUFFER ごとに VAO を作成することであり、バッファーがバインドされるたびに (VAO のないコード)、私は代わりに VAO をバインドします。

バインドされている VAO は、"ローリング VBO" と呼ばれるバッファー用です。これは、すべてのテキストやその他の雑多なものをすべてキャッチするために使用されるためです。レンダリング。おそらく、それは多くの異なるものに使用されているためです...しかし、それが何であるかを正確に特定する方法はわかりません.

コードの一部やその他の情報が役立つ場合はお知らせください。この問題に正確に何が必要かはわかりません。助けてくれてありがとう!

0 投票する
1 に答える
105 参照

c++ - フレームをレンダリングする前に OpenGL がクラッシュする - VBO

遅い glBegin/glEnd 手法をあきらめた後、最終的に VBO を使用することにしました。何時間にもわたるフラストレーションの末、ようやくコンパイルすることができました。しかし、それはそれが機能するという意味ではありません。関数「CreateVBO」はエラーなしで実行されますが、呼び出されるとすぐにプログラムがクラッシュし、関数または関数glutMainLoop()も呼び出されません。Reshape()Render()

関数は次のCreateVBO()とおりです。

そして、ここにRender()関数があります。その関数を呼び出す前にプログラムがクラッシュするため、何が問題なのかわかりません。

0 投票する
0 に答える
61 参照

c++ - VAO 索引付けは1行のみを描画しますか?

こんにちは、インデックス付きの VAO を描画しようとしていますが、実際には機能していません。最初の要素 (最初の行) のみを描画します。頂点が3つしかない2本の線を描くようにしましたが、最初の作品だけです。VAO 作成コード:

描画コード: