tile — C ++ 2D Array Map для вывода листов, инвертированного

Я создал 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Но это вращает карту на экране, поэтому его 12 плиток на x и 20 плиток на y,

Я хочу, чтобы мои плитки на экране представляли карту выше. Любые идеи, как это исправить? Благодарю.

0

Решение

Проблема в том, что 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--){

вместо существующего начала внешнего цикла и все. Но, в любом случае, хорошо знать, что он НЕ случайно инвертирован, как вы думали, — это просто система координат.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]