Permalink
Browse files

map drawing

  • Loading branch information...
ssloy committed Feb 9, 2019
1 parent 90b7cfb commit c6a12066bffdaf09e0fb68551e9eaea995fdab49
Showing with 43 additions and 0 deletions.
  1. BIN doc/002.png
  2. +43 −0 tinyraycaster.cpp
BIN +2.98 KB doc/002.png
Binary file not shown.
@@ -29,11 +29,43 @@ void drop_ppm_image(const std::string filename, const std::vector<uint32_t> &ima
ofs.close();
}

void draw_rectangle(std::vector<uint32_t> &img, const size_t img_w, const size_t img_h, const size_t x, const size_t y, const size_t w, const size_t h, const uint32_t color) {
assert(img.size()==img_w*img_h);
for (size_t i=0; i<w; i++) {
for (size_t j=0; j<h; j++) {
size_t cx = x+i;
size_t cy = y+j;
assert(cx<img_w && cy<img_h);
img[cx + cy*img_w] = color;
}
}
}

int main() {
const size_t win_w = 512; // image width
const size_t win_h = 512; // image height
std::vector<uint32_t> framebuffer(win_w*win_h, 255); // the image itself, initialized to white

const size_t map_w = 16; // map width
const size_t map_h = 16; // map height
const char map[] = "0000222222220000"\
"1 0"\
"1 11111 0"\
"1 0 0"\
"0 0 1110000"\
"0 3 0"\
"0 10000 0"\
"0 0 11100 0"\
"0 0 0 0"\
"0 0 1 00000"\
"0 1 0"\
"2 1 0"\
"0 0 0"\
"0 0000000 0"\
"0 0"\
"0002222222200000"; // our game map
assert(sizeof(map) == map_w*map_h+1); // +1 for the null terminated string

for (size_t j = 0; j<win_h; j++) { // fill the screen with color gradients
for (size_t i = 0; i<win_w; i++) {
uint8_t r = 255*j/float(win_h); // varies between 0 and 255 as j sweeps the vertical
@@ -43,6 +75,17 @@ int main() {
}
}

const size_t rect_w = win_w/map_w;
const size_t rect_h = win_h/map_h;
for (size_t j=0; j<map_h; j++) { // draw the map
for (size_t i=0; i<map_w; i++) {
if (map[i+j*map_w]==' ') continue; // skip empty spaces
size_t rect_x = i*rect_w;
size_t rect_y = j*rect_h;
draw_rectangle(framebuffer, win_w, win_h, rect_x, rect_y, rect_w, rect_h, pack_color(0, 255, 255));
}
}

drop_ppm_image("./out.ppm", framebuffer, win_w, win_h);

return 0;

12 comments on commit c6a1206

@RazorNeko

This comment has been minimized.

Copy link
Contributor

RazorNeko replied Feb 11, 2019

Подскажите пожалуйста откуда берется дополнительная строка?
assert(sizeof(map) == map_w*map_h+1); // +1 for the null terminated string

@ssloy

This comment has been minimized.

Copy link
Owner Author

ssloy replied Feb 11, 2019

Это не строка дополнительная, а символ. Чтобы промаркировать конец строки, там стоит ещё дополнительный символ с нулевым кодом.

@RazorNeko

This comment has been minimized.

Copy link
Contributor

RazorNeko replied Feb 11, 2019

Спасибо! Прочитал как map_w * (map_h + 1)
Отктыл сгенерированный файл в GIMPe цвета почему-то отличаются.

@ssloy

This comment has been minimized.

Copy link
Owner Author

ssloy replied Feb 11, 2019

Сильно отличаются? Можно скриншот?

@RazorNeko

This comment has been minimized.

Copy link
Contributor

RazorNeko replied Feb 11, 2019

sc

@ssloy

This comment has been minimized.

Copy link
Owner Author

ssloy replied Feb 11, 2019

Очень странно. Явно перепутан порядок каналов, вместо rgb он читает grb. Никогда такого формата не видел. Причём на этой стадии даже little endian / big endian не должен влиять... Можете мне .ppm файл скинуть напрямую? Я заинтригован. ha@haqr.eu

@ssloy

This comment has been minimized.

Copy link
Owner Author

ssloy replied Feb 12, 2019

Не получил письма, вы ответили в гитхаб-ветку.

@RazorNeko

This comment has been minimized.

Copy link
Contributor

RazorNeko replied Feb 12, 2019

Переслал в лс

@ssloy

This comment has been minimized.

Copy link
Owner Author

ssloy replied Feb 12, 2019

Это прелестный файл! У меня тоже цвета неправильные. Рассказывайте, как вы его получили!!!
Я правильно понимаю, что этот файл получен при помощи кода из этого коммита как есть, без изменений? Если так, то у меня баг. Расскажите, пожалуйста, какая у вас операционная система, и какой компилятор. Хочу всё знать про машину, на которой этот файл сгенерирован.

@RazorNeko

This comment has been minimized.

Copy link
Contributor

RazorNeko replied Feb 12, 2019

Код скопирован с вашего коммита без изменений. ОС Windows 10 64. Я использую Microsoft Visual Studio 2017 Community компилятор по умолчанию ничего не менял.

@ssloy

This comment has been minimized.

Copy link
Owner Author

ssloy replied Feb 12, 2019

У меня на работе есть такой компьютер, завтра проверю. Это точно баг у меня, причём на данный момент я ума не приложу, где он может быть. Я специально старался избегать подобных ситуаций.

@RazorNeko

This comment has been minimized.

Copy link
Contributor

RazorNeko replied Feb 12, 2019

Скомпилировал на Ubuntu 64 gcc на тойже машине. Получилось как задуманно.

Please sign in to comment.