問題タブ [vertex-buffer]
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 - NEWBIE:順序付けられた頂点配列を使用してOpenGLES形状を描画する
私はOpenGLESを初めて使用しますが、Objective-CとiOSの開発にはかなりの経験があります。これまでのところ、次のコードを使用して、頂点の配列と対応するインデックスの配列を定義することにより、頂点バッファーオブジェクトを使用して形状を描画および色付けすることに問題はありませんでした。
次に、次のコードを使用して画面に描画します。
これは、コードで自分自身を定義できる基本的な形状にはすべて問題ありません。これで、3Dグラフィックプログラムからエクスポートされた.hファイルを生成してもらいました。このファイルには、形状を定義するために必要な情報が含まれていますが、インデックス配列は含まれていません。代わりに、インデックス情報が頂点配列に埋め込まれています。頂点配列には、描画される順序を定義する繰り返し座標があります。以下のサンプルコードを参照してください。また、法線の配列とテクスチャ座標の配列もあります。以前のように個別の頂点/インデックス配列とは対照的に、このデータをどのように使用(読み取り:描画)するかを誰かに教えてもらえますか(またはチュートリアル/ガイドを教えてください)?前もって感謝します!
c - OpenGL頂点バッファ
VertexBuffers を使用する効率的な方法は何ですか? 私は単純な立方体を描いています (コードへのリンク) . 理想的には、頂点を GPU に 1 回ロードしてから、毎回 GPU にコピーする必要がないようにする必要があります (これは、renderScene の 115 行目で行っていることです)。それ、どうやったら出来るの?コードはここでも提供されています(チュートリアルから派生したものです):
c# - SharpDX の動的 Vertexbuffer
SharpDX を使用して動的 VertexBuffer と IndexBuffer を設定する方法を理解するのに大きな問題があります。
ユーザーが画面上で押すたびに三角形を生成する必要があります。
画面座標を投影座標に変換する変換関数を設定する必要があると思います。
しかし、ここまで来ることはありません...
10000 個の頂点用のスペースを持つバッファーをセットアップしたいと考えています。
そのバッファは、次を使用して新しい三角形を追加する必要があるたびに更新したい:
updateVB は、追加される新しい三角形です。
レンダリングは次のように機能します。
私は DirectX を初めて使用し、Web 上の DirectX9 チュートリアルは、DirectX11.1 についてはあまり役に立ちません。
ありがとう
opengl - OpenGL は各頂点バッファ オブジェクトの型をどのように認識しますか?
Vertex Array Objects と Vertex Buffer Objects に関するチュートリアルを読んだところですが、OpenGL が最初の VBO ( vertexBufferObjID[0]
) が頂点座標を表し、2 番目の VBO ( vertexBufferObjID[1]
) がカラー データを表していることを次のコードから理解できませんか?
編集: Peter の回答のおかげで、各 VBO をシェーダーに接続する次の 2 行のコードが見つかりました (インデックス 0 と 1 は VBO インデックスに関連付けられています)。
opengl - VBO の頂点データの更新 (glBufferSubData と glMapBuffer)
VBO の作成後にオブジェクトの頂点リストを更新したいと考えています。私は両方を見てきましたがglBufferSubData
、glMapBuffer
どちらも同じようなことをしているように見えます。つまり、どちらを使用すればよいかわかりません。
私の疑似ワークフローは次のとおりです。
オブジェクトの作成頂点の
更新を開始します (data = nullptr で glBufferData を呼び出します)
オブジェクトの頂点を更新します 頂点の更新を終了します (更新された頂点を受け取り、または
を呼び出します)glBufferSubData
glMapBuffer
ipad - glBufferData と組み合わせて glVerttexAttribPointer をどのように使用しますか?
iOS 5 のストック「回転キューブ」OpenGL の例では、次のコードがあります。
めちゃくちゃな部分は への最後の引数glVertexAttribPointer
です。ドキュメントによると、最後の引数は配列へのポインターです。
しかし、このプログラムでは、まっすぐな数を使用しています。実際、BUFFER_OFFSET
次のように定義されます。
gCubeVertexData
では、メモリ アドレス 0 から始まる配列に依存しているのでしょうか。
だから、私は2つのことを理解していません:
コードの 3 行目を次のように「修正」すると、例が機能しない(立方体が描画されない)のはなぜですか?
/li>glVertexAttribPointerを呼び出す正しい方法は何ですか?
ドキュメントにあるように、最後のインデックスのメモリ ポインターを渡すことになっていると思いました。実際、ここで別のサンプルが glVertexAttribPointer を使用しています。
したがって、後者の例では、直接の数値ではなく、ポインター (最後の引数) のメモリアドレスが渡されていることがわかります。
ios - 2 番目の頂点バッファーをバインドすると、最初の頂点バッファー、OpenGL OES ios 5.1 が損なわれるようです
2 つの異なるシェーダーを使用してレンダリングする 2つの異なる頂点バッファーを作成しています。2 番目の頂点バッファーをバインドするとすぐに、最初の頂点バッファーに格納したデータが破損または失われたように見えます。
次のように、頂点バッファーを 1 つだけ生成して描画すると、次のようになります。
次に、 draw() ループで、
その後、正常に動作し、問題もエラーもありません(私はgl* 呼び出しのたびに glGettingLastError() を使用しているため、このコードは完全に問題ないようです)
ここで、2 番目の頂点バッファーを生成してバインドすると、最初の頂点バッファーが生成されてバインドされた後はいつでも、
glBindBuffer
この新しく生成されvb2
たバッファで呼び出すとすぐに、データvb1
が完全にダンプまたは失われたようです。描画しようとするとvb1
(そうではありませんvb2
!)、このクラッシュが発生します:
私も配列を埋めましたGL_STATIC_DRAW
。
わかりません。別の頂点バッファーが作成されて初期化されても、これらの頂点バッファーはデータを保持するはずだと思っていましたか? ..私は何を間違っていますか?
ios - iOS 5.1 のストック OpenGL ES アプリでは、宣言した頂点配列を本当に使用していますか?
(XCodeで新しい「OpenGLゲーム」を作成するときに)取得するストックOpenGL ESアプリには、setupGL
関数に次のものがあります。
ただし、頂点配列が使用されているようには見えません (私が知る限り、頂点バッファーが OpenGL サーバー メモリにパークされている間、頂点配列はクライアント メモリにとどまります)。
コマンドをコメントアウトするglBindVertexArrayOES
と、コードはまったく同じように動作するように見えます。
glBindVertexArrayOES
この xCode サンプルの呼び出しは無関係ですか?
ios - OpenGL Es 2.0 で頂点配列を適切に更新するにはどうすればよいですか?
OpenGL 2.0 の iOS で頂点配列を更新すると、元の頂点データが画面に残ります。つまり、最初のフラッシュは永続的です (GPU に送信した最初のポイント セットはフレームごとにレンダリングされます)。 、3番目、4番目、.. n番目のフラッシュはすべて同じメモリを上書きしているようです。
だから私はやっている:
後続のフレームでは、もう一度呼び出しています。
私も試しました
しかし、どちらの方法でも、次のようになります。
白い点は初期データで、赤い点はその後の呼び出しの結果です。glBufferData
したがって、この質問には、OpenGL ES 2.0 の動的 vbo に関するいくつかの部分があります。
すべてのフレームで要素が完全に更新される動的頂点バッファを作成するための正しいコマンド順序は?
頂点バッファはフレーム間で大きくなりますか? または、まったく同じサイズでフラッシュする必要がありますか?
「クライアントメモリ」ポインターの使用について知っていますが、OpenGL ES 2.0 でこれを行うことができますか (memcpy を回避するため)、または非推奨であり、頂点バッファーのみを使用する必要がありますか?
opengl - VAOはどのようにバッファーバインディングを保持しますか?
VAOがバッファマッピングをどのように正確に処理しているかを理解するのに苦労しています。私がしていることは、この擬似コードで説明できます。
これは、DrawElementsが呼び出されたときに、OpenGLがバインドされたVAOを使用して配列と要素のバッファーバインディングを解決するということは正しいですか?Draw呼び出しの後、バインドされた配列バッファーは0ですが、要素バッファーは引き続きDrawに使用されたものです。
VAOのセットアップ中にバッファメモリを割り当てることは必須ですか?セットアップ後にBufferDataが呼び出された場合、VAOは無効になりますか?