問題タブ [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 に答える
1750 参照

c++ - Directx10、インスタンス化されたレンダリング、頂点バッファー入力

そのため、頂点構造体が頂点の位置、テクスチャ座標、法線、およびインスタンスのモデル マトリックスを取得する単純なシェーダーを使用して、DirectX10 でハードウェア インスタンス化を実行しようとしています。問題は、シェーダーのモデル マトリックスにデータを送信する入力レイアウトを作成することです。PIX を使用してデバッグすると、行列が無意味な値しか得られないことがわかります。

関連コード:

入力レイアウト

シェーダー構造体

バッファ

ドローコール

m_instanceData は、各インスタンスの D3DXMATRIX を保持するベクトルです。SDK に付属の例を見てみましたが、入力レイアウトは同じように見えますが、マトリックスが正しく転送されていませんか?

現在、テスト目的で単位行列をモデル行列として送信しているだけですが、まったく別のものとして表示されます。インスタンスバッファを初期化したら、データが確実にベクトルにあることを確認しました。

Edit1: BuildInstanceBuffer() メソッドを

2番目の編集:それは少し時期尚早だったと思います. 各行が適切なポイントで値を取得するため、シェーダーのモデル マトリックスが「正しく」埋められているようです。しかし、その値はまだ私が渡しているものではありません。

これは正直なところ、分ごとに奇妙になります。Visual Studio でプログラムをデバッグすると、緑色のメッシュが表示されます。PIX では、黒で表示されます。私は本当にこれで助けを使うことができました、私は今何が起こっているのかわかりません.

0 投票する
3 に答える
1330 参照

opengl - OpenGL: たくさんの小さな VBO は大丈夫ですか?

私はたくさんのオブジェクトを持っていますが、これらのオブジェクトの 1 つ (マウスがホバリングしているオブジェクト) を「光らせる」(急速に色を変える) 必要があります。

これを行う 1 つの方法は、各オブジェクトに独自の VBO を持たせることです。色の配列はありません。次に、それぞれ約 20 個のクワッドを持つ 1000 個の VBO を作成します...それが選択されたオブジェクトである場合は、その前に glColor3f(blah,blah,blah) を呼び出します。それ以外の場合は、デフォルトの色になります。

もう 1 つの方法は、それらすべてを 1 つの大きな VBO にまとめることです。色の配列があります。次に、glBufferSubDataARB をカラー配列に非常に頻繁に挿入して、1 つのオブジェクトを光らせます。

どちらの方法が優れていて、その理由は? 両方の方法が悪い場合は、別の方法も提案してください。

0 投票する
3 に答える
2750 参照

ios5 - Open GL ES 2.0 (iOS GLKit) で複数のメッシュを処理しますか?

iOS の GLKit を使用して、Open GL ES 2.0 で単一のメッシュを作成することができました。私が理解できないのは、位置が異なることを除いて最初のメッシュと同じように見える2番目のメッシュを作成する方法です。

私がこれについて完全に間違っていると思うので、誰かが複数のメッシュを描画するサンプルコードを単純に提供できれば、最も役立つと思います。それにもかかわらず、これを機能させるために私が行ったことのリストを次に示します。

  • 頂点情報の C 配列を 2 つ作成しました。1 つ目はテンプレート (0,0,0 を中心とするハードコードされた座標) で、2 つ目は表示したいもの (最初は空) です。
  • インデックス情報の 2 つの C 配列を作成しました。頂点情報と同じ扱いです。
  • vertexCount と indiceCount の 2 つのグローバル変数 int があり、どちらも最初は 0 です。
  • 私はac関数createAt(float x、float y、float z)を持っています。この関数は、頂点テンプレートを頂点表示配列にコピーし、渡されたオフセットを各頂点に適用します。また、インデックスをコピーしてオフセットを適用し、新しい表示頂点を指すようにします。

しかし、これはうまくいきません。画面に描画されるオブジェクトは 1 つだけです。

他の人の質問と回答を見ると、複数の頂点バッファーが必要なように思えますか? 知らない; 私はひどく混乱しています。

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

opengl-es - glBindBuffer は以前の gl*Pointer 呼び出しを無効にしますか?

コードを次のように処理したいと思います。

これは機能しますか?

または、バッファごとに gl*Pointer を呼び出す必要がありますか?

0 投票する
3 に答える
1423 参照

c++ - OpenGL Basic IBO/VBO が機能しない

ここにリストされているチュートリアルに従っています。

インデックス バッファー オブジェクト、頂点バッファー オブジェクト、独自の頂点およびフラグメント シェーダー、独自の頂点構造を使用して、1 つの三角形を描画したいと考えています。

私の問題は、描画時に何も表示されないことです。何が間違っているのかわかりません。私のシェーダーは正常に動作します。ibo/vbo を使用せずにテストしましたが、問題ありません。

これが私のコードです:

カメラの前にすべてがうまく表示されるように描画するより基本的な手段を使用する場合、ビューの変換は実行していません。私は本当に、これらのバッファを宣言する方法について何かだと思います。

編集 1:アプリケーションはダブル バッファリングされます。

編集2:解決しました。3 つの頂点 V0、V1、および V2 はすべて、同じ配列要素を変更していました。のように、私は , を使用していませんでしたがsimple_triangle[0]、でのみ作業していました。私のばかげたエラーを見つけてくれてありがとう。simple_triangle[1]simple_triangle[2]simple_triangle[0]

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

objective-c - iOS 用の OpenGL ES で GL_UNSIGNED_SHORT を使用すると EXC_BAD_ACCESS が発生するのはなぜですか?

私がする必要があるのは、256 を超える要素を持つ頂点配列を描画することです。その数より少なく、glDrawElements への呼び出しで GL_UNSIGNED_BYTE を使用すると、すべて正常に動作します。256 を超える要素がある場合、最初の頂点で再び描画を開始します (つまり、最後の要素 [256 - 255、何でも] が最初の [1 または 0] に接続し、それ以上の要素は描画されません)。代わりに GL_UNSIGNED_SHORT を使用すると、EXC_BAD_ACCESS が返されます。何を与える?

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

c# - XNA VertexBuffer for Terrain Editor

私は、多くのXNAプロジェクトと同様に、Device.DrawIndexedPrimitives()呼び出しでレンダリングされる頂点のコレクションを生成するために使用される地形変位マップから開始した個人的なプロジェクトに取り組んでいます。

カスタムVertexDeclarationに更新しましたが、現在そのコードにアクセスできないため、少し古いが、パラダイム的に同一の(?)コードを投稿します。

私は次のように定義してVertexBufferいます:

ここで、「頂点」は次のように定義されます。

VertexPositionNormalTexture[] vertices

また、Update()の反復ごとに交換される2つのインデックスバッファーがあります。Draw()呼び出しで、私はバッファを設定しましたGraphicsDevice

無関係なコード行を無視して、境界形状内をチェックして、頂点がマウスカーソルの特定の半径内にあるかどうかを判断し、押されたキーに応じて頂点の位置を上下させるメソッドがあります。私の問題はVertexBuffer.SetData()、コンテナクラスの初期化時にが1回だけ呼び出されることです。

配列の頂点位置を変更してVertexPositionNormalTexture[]も、頂点位置の値は変更されますが、画面には反映されません。これは呼び出しに関連していると思いますが、頂点配列を変更した後でVertexBuffer.SetData()単純に呼び出すことはできません。SetData()

IndexBufferの処理方法(2つのバッファー、スワップされ、一度に渡される)を再検討した後、SetData()これが操作Update()を処理する方法であると思いますが、これは機能しますか?VertexBufferより適切な方法はありますか?ここで同様の質問への別の参照を見ましたが、ソースへのリンクはMegaUploadにあったので...

私は自分のVertexBuffer.Swap()アイデアを試してみますが、私はまた、参照を見てDynamicVertexBuffer、何が得られるのか疑問に思いますか?パフォーマンスはおそらく低下しますが、地形エディタの場合、頂点データを動的に操作できれば、それがあまりにも大きなトレードオフになるとは思いません。

さらにコードを投稿することはできますが、これはおそらく、デバイスバッファーがどのように設定されているか、またはデータがそれらにストリーミングされているかについての理解が不足していると思います。

編集:以下に提案された解決策は正しいです。すぐにコードを投稿します。

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

opengl - OpenGL -- 複数のメッシュを個別の変換で一度にレンダリング

メッシュごとにドローコールを発行する必要がないように、一度に多くのメッシュをレンダリングする方法を探しています。ここでは 2D レンダリングを扱っていますが、正方形などの典型的なオブジェクトには三角形が 2 つしかない場合があります。ただし、オブジェクトが非常に複雑で、何千もの三角形がある場合もあります。

これで、各オブジェクトは単独で動き回ることができます。概念的には、「オブジェクト」ごとに VBO (または VBO/IBO ペア) を用意することは完全に合理的です。オブジェクトが変更されない限り、各フレームを GPU にアップロードする必要があるのは変換情報だけです。向きの値。または、同等に、変換行列。

しかし、そのアプローチの問題は、1000 個の正方形オブジェクトのシーンで、1000 個の VBO と 1000 個の IBO を初期化する必要があり、2000 個の三角形をレンダリングするために各フレームで 1000 セットのユニフォームを設定する 1000 個の描画呼び出しが必要になることです。

わかった。これらのオブジェクトがすべて同一である場合、それらを記述する VBO/IBO を 1 つ持つことができます。変換データを使用して、Uniform Buffer オブジェクト (または、Uniform 配列の方が適切かもしれません。これらの使用方法をまだ学習する必要があります) をセットアップできます。それぞれを呼び出し、1 つのインスタンス化描画呼び出しを発行して、頂点シェーダーが受信したインスタンス番号を使用して UBO から変換データをプルするようにします。偉大な。

もう一歩だけ進みたい。同一でないメッシュでのインスタンス化に相当するものを実行したい: 1000 の異なるオブジェクトがあり、1000 の個別の頂点/インデックス バッファー ペア、または 1 つの巨大な頂点/インデックス バッファーのペアで喜んで記述します。1 回の呼び出しで変換データを GPU に送信したいと考えています。ドライバー/GPU に適切な頂点をバインドまたは選択させるだけです。

これはできますか?SM4 ジオメトリ シェーダーを使用せずに実行できますか?

更新:これを達成するための潜在的な方法を考えました。変換を含む UBO にインデックスを付けるための「インスタンス化」値として、頂点属性を使用します。これはそれを行う方法ですか?

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

opengl - 頂点シェーダーで 2 番目の VBO をループすることはできますか?

では、2 つの頂点バッファーがあるとします。1 つは私が描きたい実際の形状を記述し、もう 1 つは最初の形状に影響を与えることができます。

だから、私が実際にできるようにしたいのは、次のようなものです:

私がやりたいことは重力かもしれません.second_oneの各ポイントがポイントを少し近づけてドラッグしようとし、ポイントが調整された後、マトリックスを適用して実際の位置を取得します。

それが可能であるか、それに近いものであることに本当に驚きます。しかし、要点は、2 番目の VBO を使用できるようにすること、またはそれを vec3 タイプのユニフォームとして作成して、アクセスできるようにすることです。

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

iphone - iPhone Cheetah 3D OpenGL ES Vertex Buffer Object (VBO) の例

Vertex Buffer Objects (VBO) を使用して、iPhone 用の Open GL ES 1.1 ゲームでやや複雑なモデルのレンダリングを改善したいと考えています。SO に関するいくつかの投稿とこの (http://playcontrol.net/ewing/jibberjabber/opengl_vertex_buffer_object.html) チュートリアルを読んだ後でも、VBO の理解と、Cheetah 3D エクスポート モデル形式での VBO の実装方法を理解するのにまだ問題があります。誰かが VBO を実装し、それを使用して指定されたデータ構造で頂点を描画し、構文を説明する例を教えてください。どんな助けでも大歓迎です!

Pro OpenGL ES (Apppress) の第 9 章の助けを借りて、次のコードを作成しました。DrawElements コマンドで EXC_BAD_ACCESS を取得していますが、その理由がわかりません。誰かが光を当ててくれませんか?ありがとう -

例外が発生している描画コマンドは次のとおりです。