Я пытаюсь отобразить кучу квадрациклов на экране, но я не могу заставить его правильно отображать.Извлечь часть массива 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.