C ++ OpenGL递归Push_Back不起作用

时间:2015-04-16 02:16:30

标签: c++ opengl recursion vector push-back

我的OpenGL代码中出现了一个问题,看起来很简单,但它似乎没有像我预期的那样工作。

代码如下:

int x = 0, y = 0, z = 0, TP = 1;
bool initiate_placement = true;
float trans[3][3][2] = {{{-16.0,16.0},{0.0,16.0},{16.0,16.0}},
                        {{-16.0,0.0},{0.0,0.0},{16.0,0.0}},
                        {{-16.0,-16.0},{0,-16.0},{16.0,-16.0}}};

vector<tiles> Place;
tiles VER, HOR, NOREA, NORWE, SOUEA, SOUWE, TNOR, TSOU, TEA, TWE, CRO;

void Tile_Placement()
{
    int A = rand() % 10 + 1;
    if (TP <= 9)
    {
        switch (A)
        {
            case 1:
                VER.vertical(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(VER);
                break;
            case 2:
                HOR.horizontal(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(HOR);
                break;
            case 3:
                NOREA.north2east(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(NOREA);
                break;
            case 4:
                NORWE.north2west(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(NORWE);
                break;
            case 5:
                SOUEA.south2east(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(SOUEA);
                break;
            case 6:
                SOUWE.south2west(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(SOUWE);
                break;
            case 7:
                TNOR.T_north(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(TNOR);
                break;
            case 8:
                TSOU.T_south(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(TSOU);
                break;
            case 9:
                TEA.T_east(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(TEA);
                break;
            case 10:
                TWE.T_west(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(TWE);
                break;
            case 11:
                CRO.cross(trans[x][y][z],trans[x][y][z + 1]);
                Place.push_back(CRO);
                break;
            }
        cout << trans[x][y][z] << " , " << trans[x][y][z + 1] << endl;
    }
}

void Tile_LoopZ()
{
    if (z < 1)
    {
        Tile_Placement();
        TP++;
        z++;
        Tile_LoopZ();
    }
    z = 0;
}
void Tile_LoopY()
{
    if (y < 3)
    {
        Tile_LoopZ();
        y++;
        Tile_LoopY();
    }
    y = 0;
}
void Tile_LoopX()
{
    if (initiate_placement == true)
    {
        if (x < 3)
        {
            Tile_LoopY();
            x++;
            Tile_LoopX();
            x = 0;
        }
    }
    initiate_placement = false; //<<< problem is focused here
    x = 0, y = 0, z = 0, TP = 1;
}

void gameScene()
{
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLineWidth(2.0);

    glColor3f(1.0, 1.0, 1.0);
    Tile_LoopX();

    glutSwapBuffers();
}

这里的代码告诉我,在递归函数Tile_LoopX();中,一旦initiate_placement == true,就会发生一个推回九个图块的代码。将九个磁贴推回后,会导致initiate_placement错误,如果再次调用gameScene()Tile_LoopX();将无法运行其代码。

到目前为止我所知道的事情是gameScene()是一个无限循环。删除initiate_placement = false;会使图块随机突然显示,因为它会一遍又一遍地调用。放置initiate_placement = false;听起来像是一个很好的解决方案,但瓷砖从未被推回过。为了测试代码是否通过,我添加了一个cout,它实际上已通过。

如果有的话,我可能错过了一些非常简单的东西,我真的需要帮助。

2015年4月16日更新:

向量被推回,因为我cout对向量的大小(即9)。现在的问题在于,矢量中的对象从未在程序中直观显示,甚至无法在程序中使用其代码。

0 个答案:

没有答案