問題タブ [vertexdata]

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 に答える
4224 参照

opengl - OpenGL バッファ - ストライド vs 密集

ストライド頂点バッファーを使用する場合と、各属性にぎっしり詰まったバッファーを使用する場合の長所と短所は何ですか? 私が意味するのは、たとえば次のとおりです。

ストライド:xyzrgb xyzrgb xyzrgb

きつい:xyzxyzxyz rgbrgbrgb

一見、stride を使用すると簡単にサイズを変更できるように見えますが、 で再割り当てすると、頂点バッファーの内容が削除されますglBufferData()

位置、色、texcoords がローカル メモリ内の異なる配列から取得される可能性があり、ストライド バッファ データ関数がないため、タイトなモデルを使用するのが最善のように思えます。glBufferSubData()アップロードする前に、すべての配列をインターリーブ バッファにコピーするか、属性ごとに頂点ごとに 1つ使用する必要があります (ひどい考えだと思います)。

インターリーブ バッファ (ストライド) を使用する一般的な方法があるようです。何故ですか?ここに欠けているものはありますか?

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

opengl - glDrawElements() & glMultiDrawElements() で出力を取得できない

ユーザーがキャンバスをクリックして頂点を指定し、頂点を使用してポリゴンを描画できるグラフィックアプリを構築中です。

アプリは、ライン、トライアングル、ポリゴン モードをサポートしています。線と三角形の描画は、クリック数をカウントすることによって行われます。次に、頂点配列が作成され、データがバッファにバインドされ、 を使用してレンダリングされますglDrawArrays()。難しいのはポリゴンモードです。ユーザーは任意の数の頂点を指定でき、マウスの右ボタンをクリックすると描画がトリガーされます。最初は を使用する予定でしたglMultiDrawElementsが、どういうわけか出力が得られませんでした。そこでglDrawElements()、ループで呼び出してみました。まだ運がない。glDrawElements()/glMultiDrawElements()VBO と VAO の使用、glVertexPointer()およびとの使用に関する多くのドキュメントを検索して読みましたglColorPointer。まだ運がありません。

頂点属性を追跡するために以下を使用しました。

GLfloat ** polygonVertices; //すべてのポリゴン頂点リストがこれに入る..
Gluint * polygonIndicesCounts; //各ポリゴンが持っている頂点の数を保持するポインター
** polygonIndices; //ポリゴンに対応する頂点のインデックスを保持するポインタの配列
GLfloat * polygonColors; //マウスをクリックするたびに、色がランダムに生成されます。

およびレンダリング用のコード:

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

objective-c - OpenGL でメッシュ オブジェクトに頂点を追加するにはどうすればよいですか?

私は OpenGL を初めて使用し、Red Book と Super Bible を使用しています。SB では、ファイルからロードされたオブジェクトの使用に関するセクションに進みました。これまでのところ、何が起こっているのか、どのように行うのかを理解するのに問題はないと思いますが、自分のアプリ (本質的にはモデリング アプリ) 内で独自のメッシュを作成することを考えるようになりました。私は参考文献とインターネットの両方で多くの検索を行いましたが、そのような機能を独自のアプリに実装するための優れたチュートリアルをまだ見つけていません。この機能を提供するだけのAPIを見つけましたが、実装を理解しようとしています。インターフェースだけではありません。

これまでのところ、クリックして頂点を追加できるビューを提供する「アプリ」(私はこの用語を軽く使用しています) を作成しました。頂点は接続されず、クリックした場所に表示されるだけです。私の懸念は、実験中に偶然見つけたこの方法が、このプロセスを実装する方法ではないということです。

私は Mac で作業しており、Xcode で Objective-C と C を使用しています。

MyOpenGLView.m #import "MyOpenGLView.h"

アプリは、マウス クリックの位置を取得し、それが頂点の位置であることを前提としています。頂点を追加するたびに、まず VBO をバインドしてアクティブであることを確認します。次に、現在の頂点の位置 (totalVertices) ともう 1 つの頂点のスペース (x と y の + 2) を保持する新しい配列を作成します。次に、glGetBufferSubData を使用して VBO からデータを戻し、この配列に入れました。for ループを使用して、X と Y の数値を配列の末尾に追加します。最後に、このデータを GPU の VBO に送り返し、totalVertices++ を呼び出して、次に頂点を追加するときに配列内にいくつの頂点があるかを確認します。

これは私の質問につながります:私はこれを正しくやっていますか?別の言い方をすれば、CPU 側で BufferData のコピーを保持して、GPU を呼び出して編集のためにデータを送り返す必要がないようにする必要がありますか? その方法では、glGetBufferSubData を呼び出さず、より大きな配列を作成し、新しい頂点を最後に追加してから、glBufferData を呼び出して、更新された頂点データで VBO を再割り当てします。

** プログラミングの経験が非常に浅い私のような人が、私のやろうとしていることをうまく理解できるように、私の思考プロセスを含めようとしました。私がしたことについての私の説明によって、だれも気分を害したくありません。**