2013-03-27 1 views
0

Я создал 2D-массив, который представляет собой карту для моих плиток для размещения:C++ 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.

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

ответ

2

Проблема в том, что OpenGL фактически имеет систему координат, в которой точка (0, 0) находится в нижней левой части окна просмотра. Поэтому, если вы хотите представить эту матрицу в коде так же, как и рисовать, вам нужно вычислить координату y для рисования как <height of viewport> - (calculated y). Как получить эту высоту - это зависит от вас, возможно, вы определили ее ранее в коде. Например, float(y + 1 + offsety) станет float(HEIGHT - (y + 1 + offsety)).

EDIT

О, я только что понял - у вас есть, что цикл, таким образом, вы можете поместить

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

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

+0

Это имеет смысл. К сожалению, это, похоже, не решает проблему ... Фактически, она выводит тот же самый вид на экране, что и предыдущие циклы :( – Reanimation

+0

Но эй, ты сделал это? Если бы вы это сделали, вы отразили его дважды У вас есть либо петля, либо вычитание :) – ceruleus

+0

Yeh, он не работал. Мне придется попробовать метод вычитания ... – Reanimation

 Смежные вопросы

  • Нет связанных вопросов^_^