Я создал 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
,
Я хочу, чтобы мои плитки на экране представляли карту выше. Любые идеи, как это исправить? Благодарю.
Проблема в том, что 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--){
вместо существующего начала внешнего цикла и все. Но, в любом случае, хорошо знать, что он НЕ случайно инвертирован, как вы думали, — это просто система координат.
Других решений пока нет …