Использование glOrtho для прокрутки игры.Космический корабль "вздрагивает" - PullRequest
1 голос
/ 08 марта 2012

Я хочу нарисовать космический корабль в центре окна, поскольку он пронизывает пространство. Чтобы прокрутить окно мира, я вычисляю новую позицию корабля и центрирую вокруг нее окно 4000x3000, используя glOrtho. Мой тест - нажать кнопку вперед и переместить корабль вверх. На большинстве машин проблем нет. На более медленном ноутбуке Linux, где я получаю только 30 кадров в секунду, корабль вздрагивает взад-вперед. Сравнивая его положение относительно указателя мыши (который не движется), корабль отчетливо виден, прыгая вперед и назад на пару пикселей. Также показано, что звезды размыты в короткие линии.

Я хотел бы запросить значение пикселя в центре корабля, чтобы увидеть, меняется ли оно.

Есть ли OpenGL способ указать точку мира и вернуть точку пикселя, в которую она будет преобразована?

1 Ответ

1 голос
/ 08 марта 2012

Я бы подумал сделать это наоборот.Держите корабль в 0,0 мировых координатах и ​​перемещайте мир относительно него.Тогда вам нужен только вызов glOrtho, когда размер окна изменяется (камера находится в фиксированном положении).Помимо того, что вам не нужно каждый раз вычислять матрицу проекции, вы также получаете преимущество, заключающееся в том, что если в будущем ваш мир станет огромным, у вас есть возможность использовать позиции двойной точности, поскольку большие смещения на поплавках приводят к неточному расположению.1001 *

Чтобы нарисовать вашу космическую сцену, вы затем манипулируете матрицей вида модели перед рисованием каких-либо объектов и используете другую матрицу при рисовании корабля.наведите и умножьте его на матрицу проекции, умноженную на матрицу вида модели (убедитесь, что вы получили правильное умножение).Затем у вас будет значение с x и y в диапазоне от -1 до 1. Вы можете добавить [1,1] и умножить на половину размера экрана, чтобы получить положение в пикселях.(если хотите, вы можете добавить это в матричное преобразование).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...