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

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

opengl-es - ジオメトリをglslに送信する最も効率的な方法は何ですか?

私のシーンにはメッシュの木があります。各メッシュには、変換行列、頂点、法線、UVのリスト、および子メッシュのリストが含まれています。

VBOを使用して「構造体の配列」でジオメトリをglslに送信したいのですが、親メッシュの行列変換が発生した場合に各メッシュの行列を更新する方法がわかりません。メッシュツリーをトラバースして、フレームごとにすべての頂点にマトリックスを追加する必要がありますか?フレームごとに頂点を事前に乗算する必要がありますか?行列のリストを均一に保持し、現在の頂点の行列をインデックスで参照する必要がありますか?メッシュごとに1つのglDrawArraysまたはglDrawElementsを使用する必要がありますか?

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

opengl - OpenGL デプス バッファの問題

最近のいくつかのプロジェクトでは、ここでいくつかのデモを見ながら見つけたいくつかのユーティリティ ファイルを使用しています。

つまり、opengl.h と呼ばれるファイル - 主に glew と別のファイル gl_font のようなシェーダーを管理するために使用されます。

gl_font は、頂点バッファー オブジェクトを使用して画面にフォントをレンダリングするために使用するクラスです。

ただし、これを使用してゲームのフレームレートをレンダリングすると、スカイボックス以外のすべてが正しく描画されます。何らかの理由で、ここに示すようにスカイボックスが白くレンダリングされます。フォントをレンダリングしないと、このようになります。

私が最も重要だと思う gl_font クラスのいくつかの部分を次に示します。

glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT | GL_TEXTURE_BIT); に変更してみました。背景テクスチャは返されますが、フォントはレンダリングされません。

これは、フォントがレンダリングされたときの深度バッファーのイメージであり、レンダリングされいないときの外観です。

誰でもこの問題に光を当てることができますか?

どんな助けでも大歓迎です!

ありがとう。

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

c# - XNA 4.0 での DynamicVertexBuffer の使用

DynamicVertexBuffer について読み、頻繁に変更されるデータに対してどのように優れているかを読みました。立方体で構築された世界があり、立方体の頂点をこのバッファーに格納して、それらを画面に描画する必要があります。

ただし、すべての立方体に頂点があるわけではなく (一部は透明な空気です)、立方体のすべての面を描画する必要もありません (互いに向き合っています)。バッファ?また、特定の面、つまり透明な面 (ガラスや葉など) を最後に描画する必要があり、これらの面も、アルファ ブレンディングを台無しにしないように後ろから前の順序で描画する必要があります。

これらの頂点がすべてこのバッファーに任意に格納されている場合、どの頂点がどこにあるかをどのように知ることができますか?

また、頂点の数は変更できますが、サイズをまったく変更できないため、DynamicVertexBuffer はあまり動的に見えません。顔を追加または削除する必要があるたびに、バッファを再作成する必要がありますか?

0 投票する
2 に答える
1987 参照

c++ - コードアシスト、OpenGL VAO/VBOクラスが描画されない

編集II:
現在のコードはうまく機能します!みんな、ありがとう。私は先に進み、参照用のシェーダーコードを下部に含めましたが、現時点では実際には何もしていません。

私はOpenGL4.1を使い始めようとしていますが、まだ開発の初期段階にあります。現在、このプロジェクトではまだ4.0の機能を実際に使用していません。したがって、これはOpenGL3の質問でもあります。

私が最初に取り組んでいた目標は、VAOとVBOを処理するための2つのクラスを作成することでした。私はいくつかの誤解を持っていましたが、最終的に空白の画面を通り過ぎました。

基本的には、この時点で画面に何かが表示されることを望んでいます。私はglfwとglewを使用しています。私はいくつかのことを完全に省略していますか、それとも何かを修正するだけで済みますか?申し訳ありませんが、現時点ではコードが多少壊れています。

base.vert

base.frag

0 投票する
2 に答える
3778 参照

c++ - OpenGL:頂点インデックスバッファの問題

VBOを使い始めたばかりですが、頂点インデックスバッファを除いてすべて問題ないようです。インデックスバッファを有効にした後でglDrawElementsを呼び出すと、アクセス違反エラーが発生し(インデックスが見つかりません)、メモリ内のインデックス配列の先頭へのポインタを使用して呼び出すだけで機能します。

私はそれを設定するときにすべてを正しく行っていると思いますが、それでも私はいくつかのコードを投稿します:

そして描くために私はします:

s-> draw()行は次を呼び出します。

(注:すべてのpointer / drawElements呼び出しで、最後の&.. [0]ポインターの代わりに、頂点バッファーの添え字を使用したいのですが、使用できません)。

ここで問題が発生します。理解できません。バッファオブジェクトを生成し、インデックスデータで埋めますが、描画に関しては、それを見つけていないようです。誰かがこの問題を解決する方法について何か考えがありますか?

ありがとう

編集:コンパイラは、バッファオブジェクトへのオフセット「0」をメモリ内の位置「0」へのポインタとして解釈しているようです。これにより、アクセス違反エラーがスローされます。

0 投票する
2 に答える
559 参照

c++ - 頂点バッファ オブジェクト Open GL

私は Open GL が初めてで、非推奨のコードをビルドしようとしています。今、私が把握できないのはVBOです。これが私がこれまでに得たすべてです。私が何をすべきか説明してください。また、OpenGL プログラミング ガイドを持っているので、読むべきページをいくつか指摘していただければ、それも非常に役に立ちます。

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

c++ - DirectX: 2 つのスプライト ポリゴン間の小さな歪み

こんにちは、私は長い間、directx でスプライトをレンダリングするのと同じ方法を使用していますが、ここでは、画面をテクスチャでレンダリングしてから、画面上に大きなスプライトでレンダリングしています。

私が使用するカメラの場合: vUpVec=D3DXVECTOR3(0,1,0); vLookatPt=D3DXVECTOR3(0,0,0); vFromPt=D3DXVECTOR3(0,0,-1);

スプライトをレンダリングするには: CUSTOMVERTEX* v; spritevb->Lock( 0, 0, (void**)&v, 0 );

これは非常に基本的で機能します。私のスプライトは画面いっぱいにレンダリングされます。しかし、よく見ると、画面を通る小さな対角線 (2 つのポリゴンの間) が色付きではなく、完全に配置されていないかのように見えます。

フィルタリングを考えて、すべてを削除しようとしましたが、何かを忘れているかもしれません...

ありがとう

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

c++ - DirectX10で頂点バッファーを適切に更新する方法

少し背景を説明します。私はC++でプロジェクトに取り組んでおり、リアルタイムのプロファイルデータに基づいてオブジェクトの3D表現を描画しようとしています。プロファイリングデータは、外部プロファイリングハードウェアから収集されます。システムはオブジェクトに沿って移動し、1秒間に300回の速度で、ソフトウェアにプロファイルスライスを提供します。各スライスは、最大8000個のXYポイントのリストで構成されます。プロファイラーの動きはエンコーダーによって記録されます。エンコーダ情報は、スキャンの3次元を提供します。

注意すべきもう1つの重要な点は、プロファイラーがオブジェクト上を前後に移動する可能性があることです。このとき、以前に読み取った/描画したスライスを(エンコーダーの位置に基づいて)新しいスライスに置き換えたいと思います。今のところ、私はエンコーダーカウントで保存するスライスの循環バッファーでこれを達成しています。これは、バッファがいっぱいになり、古いスライスの上書きを開始するときに、スライスを破棄したいことも意味します。画面に被写体の適切な量を表示するには、一度に1000スライスのプロファイルデータを描画する必要があります。今のところ、オブジェクトを点群としてレンダリングしています。将来的には、隣接するスライスを添付して、三角形のリストとしてレンダリングすることを試みる可能性があります。

私はDirectXを初めて使用しますが、書籍やオンラインの例を使用して、オブジェクトを3Dで描画するようになりましたが、頂点バッファーを効率的/適切に使用していないと確信しています。私が見つけたほとんどの例は、非常に静的なモデルで機能します。したがって、ポイントのリストを使用して単一の頂点バッファーを作成する傾向があり、その後、行列変​​換によって操作されます。一方、ハードウェアからプロファイルデータを取得すると、シーンが非常に迅速に更新されます。

現在、読み込んだスライスごとに新しい頂点バッファを作成しています。シーンを描画するときは、最大1000個のバッファのリストをループし、それぞれに対してDraw()を呼び出します。一度に描画される頂点バッファーの数を半分に減らすと、FPSが大幅に増加するのに対し、バッファーあたりの頂点ポイントの数を半分にするとほとんど改善が見られないことに気付きました。これは、複数の頂点バッファーであることを示しています。これにアプローチする適切な方法ではありません。

ですから、私の質問の本質は...頂点が頻繁に変化するときに、これらすべての頂点を1つの頂点バッファーに入れることができるかどうか疑問に思っています。既存の頂点バッファ内のポイントを更新できますか?または、シーンを更新するたびに1つの新しいバッファを再作成する必要がありますか?最後に覚えておくべきことは、ハードウェアからのスライスあたりのポイント数が異なることです。したがって、前のスライスを上書きする場合、新しいスライスには、置き換えられるスライスよりも多いまたは少ないポイントが含まれる可能性があります。

御時間ありがとうございます。どんなアドバイスも大歓迎です!

0 投票する
2 に答える
4164 参照

opengl - OpenGL頂点バッファの混乱

VertexBufferVertexArrayVertexBufferObject、およびVertexArrayObjectの違いを誰かが説明したいと思いませんか?これらがすべて異なるものの用語であるかどうかさえわかりませんが、それらすべてがOpenGL仕様に表示されているのを見てきました。

VertexBufferには頂点が含まれているだけで、バインドされると他には何も含まれないことを知っています。頂点ポインターを設定すると、DrawArraysを使用して描画できます。私は何度もこのようにそれをしました。

私はVertexArrayであると思うものを使用しています。これは、設定されている頂点バッファーの状態と、頂点ポインターを格納します。VertexArrayをバインドすると、頂点バッファーが自動的にバインドされ、頂点ポインターが設定されます。私もこれを(ほとんど)うまく使っています。

しかし、VertexBufferObjectVertexArrayObjectとは何ですか?彼らは良いですか?VertexArrayは私に必要なすべてを提供しませんか?

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

c++ - 静的 TexCoords と動的頂点で glDrawElements を呼び出す方法

シーンをレンダリングするために、VBO で glDrawElements 呼び出しを使用しています。シーンは、頂点とテクスチャ座標を持つ布です。この例では、旗をレンダリングしています。

私のシーンでは、頂点は動的です。つまり、フレームごとに VBO に書き込む必要があります。私の処理の多くは CUDA を使用して GPU で行われるため、常に CPU メモリを GPU メモリにマッピングしています。一方、テクスチャ座標は静的です。glDrawElements でレンダリングするには (私が理解しているように)、頂点 VBO でテクスチャ座標をインターリーブしてから、glTexCoordPointer() と glEnableClientState() を呼び出すだけです。CPU <--> GPU メモリ マッピングを行うときに、すべてのテクスチャ座標を一緒に描画する必要があるため、これは最適ではありません。

vbo のテクスチャ データに触れずに vbo の頂点データを更新できるように vbo を配置する方法はありますか? 以下は、レンダリング用のコードです。現在、インデックス配列、頂点配列、テクスチャ配列の 3 つの配列が埋められています。

以下のコードでは、indexVbo がインデックス配列にマップされ、vbo が頂点配列にマップされています。ここで、テクスチャを組み込む必要があります。洞察や提案をいただければ幸いです。