Здесь битовая раскладка выглядит следующим образом: tile_u_part UUUUU000 00000uuu 0fffffff ffffffff tile_v_part 00000VVV VVVVV000 0fffffff ffffffff tile_du UUUUU111 11111uuu 1fffffff ffffffff tile_dv 00000VVV VVVVV111 1fffffff ffffffff TILE_U_MASK 00000111 11111000 10000000 00000000 TILE_V_MASK 00000000 00000111 10000000 00000000
Полные формулы (функции) для перевода из 16:16 fixedpoint в "тайловый" 8:15 fixedpoint приведем именно для этого случая; выглядят они вот так: int make_tile_u(int u) { return ((u > 1) & 0x7FFF); } int make_tile_v(int u) { return ((v > 1) & 0x7FFF); }
Для полной комплектности осталось только привести кусочек кода для перевода обычной текстуры в тайловую форму (для случая текстуры 256x256, тайла 8x8, "вертикального" расположения тайлов).
void tile_texture(char *dst, char *src) { int u, v;
for (v = 0; v < 256; v++) for (u = 0; u < 256; u++) dst[((u