1

こんにちは、VBO での描画に問題があります。だから私はここで質問をしました.私は私の問題の答えを見つけることができませんでした. しかし、そこに与えられた 1 つの答えについて議論することで、VBO のストライドについて別の質問ができました。私はそれが何であるかについて混乱しています。

ここで私は 誰かが答えたのを見つけました

すべての頂点データが 1 つの配列 (array : malloc''ed ポインターとして読み取られる) にある場合、すべての法線が別の配列にある場合など。ストライドは 0 です。たとえば、頂点、法線などが次のように格納されている場合:

[頂点0][頂点1][頂点2]...

[ノーマル0][ノーマル1][ノーマル2]...

[texcoord0][texcoord1][texcoord2]...

頂点、法線などがそのようにパックされている場合:

[頂点0][法線0][texcoord0][頂点1][法線1][texcoord1][頂点2][法線2][texcoord2]...

次に、ある要素から次の要素に切り替えるために必要なオフセットに対応する、null 以外のストライドを設定する必要があります。(このストライドはバイトとしてカウントされます)

その説明から、ストライドは実際には、バッファー内の 1 つの頂点の終わりと別の頂点の始まりの間の距離を意味すると思いました。最初のケースでは、すべての頂点が連続して格納されているため、0 です。テクスチャについても同様です。しかし、同じスレッドのストライドの定義に関する別の回答を読みました。

VBO ストライドに関しては、主に 0 の特別な意味のために、少し混乱する傾向があります。

このコンテキストでの「ストライド」とは、メモリ内の値の先頭とメモリ内の次の値の先頭の間の距離を意味します。あるものの終わりと次のものの始まりの間の距離ではありません。したがって、構造体の配列である VBO では、その構造体の各要素のストライドは、構造体全体のサイズになります。構造体のパディングがこれに影響を与える可能性があることに注意してください。

これは、他の答えの反対を言っているだけです。または、最初の答えの意味が間違っていますか?誰でも私が問題を解決するのを手伝ってくれませんか。誰かが例を挙げて答えることができれば、本当に感謝しています。この質問の冒頭で、まだ解決されていない VBO の実装のリンクを提供しました。ありがとう。

4

1 に答える 1

5

最初の答えが言おうとしているのは、2 つの要素間の「ストライド」は、1 つの要素の始まりと次の要素の始まりの間のバイト単位のオフセットであるということです。
ただし、渡す要素が連続している (つまり、要素間にスペースがない) 場合は、stride パラメーターに 0 を渡すことができます。

この場合、「ストライドが 0 である」と主張するのは間違っていると言えます。ストライドは です sizeof(element)が、値 0​​ は特別な扱いを受け、 を意味するものと見なされますsizeof(element)。これは、ほとんどの場合、貧弱なプログラマーが 2 つの (バグが発生しやすい)パラメーターが同じ場合に一般的なケースで
使用する必要がないようにするためです。sizeof

于 2013-03-10T13:29:36.100 に答える