問題タブ [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.
c++ - 非メイン スレッドからロードされた VAO でクラッシュする
私のコードでは、2 つのバッファー オブジェクトと頂点配列オブジェクトによってサポートされるオブジェクトのラッパー クラスがあります。コンストラクターでこれを使用してそれらを生成します (少し簡略化されています)。
printf は、メイン スレッドの最初のいくつかの作成でこれを提供します。
その間に、VAO #2 とバッファ #3 を使用する 1 つのインデックスのないものがあります。これは私には問題ないように見えます。各配列オブジェクトには、2 つの固有のバッファーがアタッチされています。
このコードは、後でバックグラウンド リソースを読み込む (むしろ生成する) ためにも使用します。このそれぞれのスレッドには、glfwCreateContext を使用して作成され、メイン ウィンドウとリソースを共有する独自のコンテキストがあります。これらのリソースが最初に作成されると、次の出力が表示されます。
この直後に、VAO #1 を使用して、さまざまな量の頂点を使用して 9 回描画し、必然的に何らかのセグメンテーション違反が発生します。
私の質問は、これはバグですか、それとも明らかに間違ったことをしていますか? Nvidiaカードを搭載したDellラップトップを実行しているLinux Ubuntuでこれをテストしています。
c++ - OpenGL は既存の VAO をコピーする方法はありますか?
私のコードには、基本的な VAO および VBO 機能のラッパーである Mesh クラスがあります。そのコンストラクターは、頂点とインデックスの配列を取り、draw() 関数を持っています。
インスタンス化中に glGen* 関数を呼び出し、デストラクタで glDelete* 関数を呼び出します。
明らかに、これは割り当て/コピーの構築中に問題を残します:
これを改善するために、代入およびコピー コンストラクターで、glMapBuffer を使用して VBO データを再バッファーします。
VAO の状態をある VAO から別の VAO にコピーする方法はありますか。または、新鮮な VAO のためにすべての glVertexAttribPointer() などの関数を再呼び出しする必要があります。
opengl - OpenGL 3.2 VertexArrayObjects & VertexBufferObjects
私は、VAOとVBOがどのように機能するかを(素人の言葉で)理解しようとしています。
クールなオブジェクトをグラフィカルに作成する小さな OpenGL プログラムを作成しました。
2 つの三角形と VAO/VBO を使用して正方形を描画します。また、頂点ポイントを拡大します。
以下は私のコードです(わかりやすくするために、win32のものを除くすべてを含めました):
私の質問は、より多くのオブジェクト/シェイプを描画するには、複数の VAO と VBO が必要ですか?
基本的に、三角形のチュートリアルからこのプログラムを適応させました。私が行ったように2番目の三角形を描いたことが正しいのか、それともVAOとVBOを別の方法で使用するべきだったのか疑問に思っています.
たとえば、2 番目の正方形を描きたい場合、さらに VAO が必要ですか? この質問がばかげている、または無意味に思われる場合は申し訳ありません。私は OpenGL3.2 の初心者です。
アドバイスや説明は大歓迎です。
c++ - OpenGl オブジェクトが表示されない、シェーダー関連
シェーダーを使用して OpenGL でレンダリングしようとしています。背景色が生成され、エラー メッセージは表示されませんが、レンダリングしようとしているオブジェクトが表示されません。私はこれを解決するために一日中努力してきましたが、何も起こりませんでした。ファイルから頂点とインデックスを読み込んで.txt
いますが、すべての数値が正確にあるべきものであるため、それは問題ではないようです。これが私の初期化です:
主要:
そして表示:
マトリックス変換後、頂点はすべて本来あるべき場所にあり、以前は同じマトリックスクラスを問題なく使用していたので、そうではないと思います。シェーダーと関係があると思いますが、まだopenglは初めてで、よくわかりません。頂点シェーダーは次のとおりです。
そしてフラグメントシェーダー:
c++ - OpenGL 複数のオブジェクト、テクスチャ付きおよびテクスチャなし、アーティファクト
振り子がぶら下がっているフレームを描いています。振り子にはテクスチャが適用されていますが、フレームにはテクスチャがありません。両方を表示すると、
しかし、振り子だけをレンダリングすると、振り子は正しく描画され、
これがなぜなのかわかりません。振り子を爆破すると、テクスチャがフレームから頂点にマッピングされているように見えます。これがvao宣言です
そしてディスプレイ
}
これは頂点の維持に関する問題ですか、それとも別の問題ですか?
c++ - OpenGL インスタンス化された配列の奇妙な頂点位置
VBO/VAO を使用した通常の描画から VBO/VAO を使用したインスタンス化された配列に切り替えた後、OpenGL アプリケーションから正しい出力を取得できません。出力は球の集まりであるはずですが、代わりに奇妙な三角形を形成するクレイジーな位置にある頂点です。デバッガコンソールで頂点位置を確認しましたが、特に怪しいものはありませんでした。それらはすべて -10 から 10 の範囲にあり、シーンではおそらく +/-30 になります。
これが私のコードの重要な部分です。何かが見えない場合は教えてください。よろしくお願いします!
セットアップの準備ができたら、図面に進みます。
頂点シェーダーの重要な部分は次のとおりです。
結果は次のようになります。
どうにかして助けてください。私は過去3日間これに苦労してきました。皆さん、ありがとうございました!
編集:列/行の主要な順序と関係があるかどうか疑問に思っていたので、マトリックスを転置しようとしましたが、問題の原因ではないという結論に達しました。
c++ - OpenGL は同時に 2 つの VAO をアクティブにすることができますか?
最近、VAO (Vertex Array Object) について学びました。これまでのところ、それらは非常に優れているように見えますが、解決できない問題があります。私はたくさんのモデルを持っています。それらの頂点状態は別々の VAO に保存されているので、
これのインスタンスの描画を開始するために必要なのはこれだけです。問題は、追加の VAO をバインドする必要があることです。
電話。そのため、オフセット、UV オフセット、カラー オーバーレイなどのデータが含まれています。これをバインドすると、前のものは自分自身をアンバインドするように見えます。これは OpenGL では理にかなっていると思いますが、両方をアクティブにするために何をすればよいかわかりません?
アイデアは、フレームごとにデータをアップロードせずに、同じモデルを共有するすべての静的オブジェクトを描画することです。これは完全に間違ったアプローチですか?