0

我创建了一个 2D 数组,该数组表示要放置的图块的地图:

int sMap[12][20] = {
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
  {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1},
  {1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1},
  {1, 0, 1, 0, 1, 2, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1},
  {1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1},
  {1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
  {1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1},
  {1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 1},
  {1, 1, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 1, 0, 1, 1, 2, 2, 2, 1},
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1},
  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};

一旦我的瓷砖被加载,我用它function()来放置瓷砖:

for (int y = 0; y < 12; y++){ //for (int y = 11; y >= 0; y--){
    for (int x = 0; x < 20; x++){ //for (int x = 19; x >= 0; x--){
        if    (sMap[y][x] == 1)
            glBindTexture( GL_TEXTURE_2D, brick1);
        else if (sMap[y][x] == 2)
            glBindTexture( GL_TEXTURE_2D, brick2);
        else
            glBindTexture( GL_TEXTURE_2D, wall );

        glBegin(GL_QUADS);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(float(x),     float(y), 0.0f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f(float(x + 1), float(y), 0.0f);
            glTexCoord2f(1.0f, 1.0f); glVertex3f(float(x + 1), float(y + 1), 0.0f);
            glTexCoord2f(0.0f, 1.0f); glVertex3f(float(x),     float(y + 1), 0.0f);
        glEnd();
    }
}

出于某种原因,我Map是倒置的......(所以上面数字的底行map是屏幕上的顶行瓷砖,第二行是屏幕上map的第二行瓷砖)。

我的理解是,您遍历选择每个数字并分配正确的图块。我尝试更改x/y's ,但这会旋转屏幕上的地图,使其在 12 个图块x和 20 个图块上y

我希望屏幕上的图块代表上面的地图。任何想法如何解决这一问题?谢谢。

4

1 回答 1

2

问题在于 OpenGL 实际上具有点 (0, 0) 位于视口左下角的坐标系。因此,如果您想在代码中以与绘制矩阵相同的方式表示该矩阵,则需要将绘制的 y 坐标计算为<height of viewport> - (calculated y)。如何获得那个高度 - 这取决于你,可能你在代码的前面定义了它。例如,float(y + 1 + offsety)将成为float(HEIGHT - (y + 1 + offsety)).

编辑

哦,我刚刚意识到 - 你有那个循环,所以,你可以把

for (int y = 11; y >= 0; y--){

而是现有的外循环开始,就是这样。但是,无论如何,很高兴知道它不会像您想象的那样意外反转 - 这取决于坐标系。

于 2013-03-27T00:23:28.043 回答