2017-01-04 12 views
0

Я пытаюсь отобразить кучу квадрациклов на экране, но я не могу заставить его правильно отображать.Извлечь часть массива 1d как 2D?

У меня есть массив 1D, которое 10000 (100х100) в размере и держит текстуры идентификаторы:

mapping = { 1, 22, 55, 28, 95, 105, ...} 

Файл текстуры содержит 512x512 пикселей, с 16x16 пикселей для каждого изображения. Итак, это всего 32x32 изображения. И текстурные Идентификаторы соответствуют идя слева направо, начиная с 0:

0 1 2 3 ... 31 
32 33 34 35 ... 63 

............... 1023 

Учитывая разрешение экрана 800x600 пикселей, я хочу, чтобы сделать только часть моих квад, которые будут соответствовать по этой резолюции, так что я не» t хочу нарисовать все 10000 квадов из моего массива 1D.

Чтобы извлечь из (0,0) плитки, это то, что у меня есть:

for (int j = 0; j < 37; j++) {  // 600/16 = 37 
    for(int i = 0; i < 50; i++) { // 800/16 = 50 
     int quadIndex = j*800/16 + i; 
     int textureID = mapping[quadIndex]; 
     int x = (textureID % 512) * 16; 
     int y = (textureID/512) * 16; 

     // Take image from texture starting at (x,y) and draw on screen at (i, j) 
     draw(i, j, x, y);  
    } 
} 

Проблема с этим является quadIndex не является точным. Он правильно рисует первую строку, но вторая строка является продолжением первой строки вместо фактической второй строки. В основном первая строка переполнена во вторую строку, и она отбрасывает все.

Я уверен, что это потому, что я могу неправильно вычислить quadIndex, но я не знаю, что это за решение.

Кроме того, в качестве дополнительного бонуса, как бы я определял рендеринг из любого (a, b) смещения, а не всегда из (0,0)? То есть, с моим массивом 1D, я хочу извлечь из (4,4) на мое разрешение 800x600.

ответ

0

Вы должны использовать ширину исходный массив, а не ширину экрана. Насколько я понимаю, это ширина mapping = 100?

int quadIndex = j * 100 + i; 
Смежные вопросы