0

glDrawElements()の最後の引数にベクトルを渡そうとしています。配列を使用した場合、正常に機能しました。ただし、ベクターに切り替えると、オブジェクトの一部しかレンダリングされませんでした。

これは問題なく機能しました。

//TA_CartesianSys.h
class TA_CartesianSys
{
    private:
        int drawOrder[86];
    //the rest of the class
}


//---------------------------------
//TA_CartesianSys.cpp
TA_CartesianSys::TA_CartesianSys()
{
    GLfloat CartesianVertices[] = { ... };
    int tempOrder[] = { ... };
    for(int i = 0; i < sizeof(tempOrder) / sizeof(int); i++)
    {
         drawOrder[i] = tempOrder[i];
    }
    //Code to generate and bind vertex array and buffer
    glDrawElements(GL_LINES, sizeof(drawOrder)/sizeof(int), GL_UNSIGNED_INT, drawOrder);
}

期待どおりに機能し、次のようになりました。

ここに画像の説明を入力してください

ここで、drawOrder[]に配列の代わりにベクトルを使用することにしました。これは新しいコードです:

//TA_CartesianSys.h
class TA_CartesianSys
{
    private:
    std::vector<int> drawOrder; //***NOTE: This is the change   
    //the rest of the class
}
//---------------------------------
//TA_CartesianSys.cpp
TA_CartesianSys::TA_CartesianSys()
{
    GLfloat CartesianVertices[] = { ... };
    int tempOrder[] = { ... };

    drawOrder.resize(sizeof(tempOrder) / sizeof(int));
    for(int i = 0; i < (sizeof(tempOrder) / sizeof(int)); i++)
    {
        drawOrder[i] = tempOrder[i];
    }

    //Code to generate and bind vertex array and buffer - Same as above

    glDrawElements(GL_LINES, sizeof(drawOrder)/sizeof(int), GL_UNSIGNED_INT, &drawOrder[0]);
}

そして、これは私がプログラムを実行したときに私が得たものでした:

ここに画像の説明を入力してください

注:中央の正方形はこのオブジェクトの一部ではありませんでした。それは全く異なるクラスに属していました。

したがって、基本的に、drawOrder []を配列ではなくベクトルに変更すると、オブジェクトのごく一部(2行)のみがレンダリングされました。残りは見られなかった。

draw()関数にブレークポイントを設定すると、drawOrderベクトルが適切に初期化され、配列のカウンター部分とまったく同じ値になっていることがわかりました。

ここに画像の説明を入力してください

では、なぜグリッド全体ではなく2行しか取得できないのでしょうか。私は何が欠けていますか?

4

1 に答える 1

6

sizeofベクトルオブジェクトでは、要素の数ではなく、ベクトルクラスインスタンスのサイズを通知するだけです。必要なのは、要素の数を示すstd :: vectorのサイズメンバー関数です(つまり、std :: vector :: sizeによって返される数を要素sizeofで除算してはなりません)。

glDrawElements(
    GL_LINES,
    drawOrder.size(), // <<<<<
    GL_UNSIGNED_INT,
    &drawOrder[0] );
于 2013-02-04T07:48:34.393 に答える