0

3 つのオブジェクト (2 つのボックスと 1 つの平面) で構成されるシーンを想像してみましょう。これら 3 つのメッシュは、次のように一意の Vertex Buffer Object (VBO) 内に保存されます。

VBO(id = 1) {[Box_1_vertex][Box_2_vertex][Box_3_vertex]}

現在、特定のインデックス バッファ オブジェクト (IBO) を使用して、シーンの各メッシュの頂点のインデックス付けを次のように管理しています。

IBO(id = 2) {Box_1_index}
IBO(id = 3) {Box_2_index}
IBO(id = 4) {Box_3_index}

したがって、シーンをレンダリングするには、次のように、頂点バッファーの一意のバインディング呼び出しと、インデックス バッファーの 3 つのバインディング呼び出しが必要です。

VBO(id = 1)->Bind()
{
    FOR_EACH(IBO in IBO_LIST(size = 3))
    {
         (*IBO)->Bind();
         {
            glDrawElements(...);
         }
    }
}

したがって、すべてのインデックス (Box_1_index + Box_2_index + Box_3_index) を (VBO のように) 一意の IBO に格納し、関数 glBindBuffer ではなく、今回は関数 glBindBufferRange を使用して IBO データに焦点を当てることができるかどうか疑問に思います。

このようにして、次のパターンのコードが作成されます。

VBO(id = 1)->Bind()
{
    IBO(id = 2)->Bind();
    {
        glDrawElements(...);
    }
}

しかし、公式の OpenGL ドキュメントによると、関数 'glBindBufferRange' の最初のパラメーターは GL_TRANSFORM_FEEDBACK_BUFFER または GL_UNIFORM_BUFFER にすることができますが、GL_ELEMENT_ARRAY_BUFFER にすることはできません (現在、これを使用して IBO をバインドしています)。

では、関数「glBindBufferRange」を使用して、特定の IBO 内に含まれる特定のデータ セグメントをバインドすることは可能ですか?

4

0 に答える 0