2D путаница координат - PullRequest
1 голос
/ 05 мая 2019

Хорошо, поэтому я никогда не создавал игру раньше, и я пытаюсь сделать игру на основе двухмерных плиток.

Так что я действительно озадачен чем-то, что должно быть довольно простым, координаты.

У меня есть координаты плиток, например

{0,0,0,0,0,1}
{0,0,1,0,0,1}
{0,0,0,0,0,1}
{0,0,1,1,1,1}
{0,0,0,0,0,1}

Допустим, это мой мир, и я пытаюсь его визуализировать, ну, я не могу его визуализировать, каждая плитка нуждается в ширине, вот где я запутался, так что вы можете сделать, я не новичок в кодировании

twidth = 100, theight = 100;

for(y = each row) {
    for(x = each tile in each row) {
        draw rect (
            X1 = x*twidth,
            Y1 = y*theight,
            X2 = x*twidth+twidth,
            X2 = y*theight+theight
            )
    }
}

Я могу ошибаться, но: теперь буквально все остальное нужно умножить на ширину / высоту, это будет еще сложнее, если вы хотитеплитки разных размеров, по крайней мере, меня смущает, как другие игры справляются с такими вещами?я не уверен, что если я очень хорошо объясню, в чем заключается моя проблема, любая помощь будет признательна

, я использую opengl [legacy], и я думаю, что решение может быть функцией для настройки экранного пространства по-другому, поэтому рендеринг glVertex2d (0,1) на самом деле 100px, это может привести к столкновениям, и так, намного проще

1 Ответ

0 голосов
/ 05 мая 2019

я использую opengl [legacy], и я думаю, что решение может быть функцией установки пространства экрана по-другому, поэтому рендеринг glVertex2d (0,1) на самом деле составляет 100px, это может привести к коллизиям, и, таким образом, намного проще

Этого можно добиться в устаревшем OpenGL, правильно настроив матрицу проекции:

glMatrixMode(GL_PROJECTION);
glOrtho(0, 16, 0, 9, -1, 1);

Это настроит ее так, чтобы glVertex2d(0, 0) отображалось в нижнем левом углу и glVertex2d(16, 9) отобразится в верхнем правом углу, давая вам плитки размером 16x9 в области просмотра.Чтобы зафиксировать размер плитки в пикселях, вместо этого мы вычисляем дробное число плиток:

glOrtho(0, (double)viewportWidth / twidth, 0, (double)viewportHeight / theight, -1, 1);

После этого вы можете «прокручивать» мир, переводя его в матрицу GL_MODELVIEW.

...