Хитрые способы нарисовать звездное поле

Я работаю над игрой, и я придумал довольно интересную проблему: умные способы рисовать звездные поля.

Это 2D-игра, поэтому действие может прокручиваться в направлениях X и Y. Кроме того, мы можем настроить масштаб, чтобы показать большую или меньшую часть игровой площадки. Я также хотел бы, чтобы у звездного поля был фальшивый параллакс, чтобы создать впечатление глубины.

Сейчас я делаю это традиционным способом, используя большой массив звезд, каждая из которых имеет метку 'depth фактор. Чтобы нарисовать, я перевожу каждую звезду в соответствии с положением камеры, умноженным на «глубину», поэтому некоторые звезды сильно двигаются, а некоторые - немного. Все это работает нормально, но, конечно, поскольку у меня есть конечное количество звезд в моем массиве, у меня возникают проблемы, когда камера перемещается слишком далеко или мы слишком сильно уменьшаем масштаб. Это все будет работать, но требует большого количества кода и особых случаев.

Это оскорбляет мое чувство элегантности. Есть лучший способ добиться этого.

Я рассмотрел процедурную генерацию моих звезд, которая позволяет мне иметь неограниченное количество: например, используя фиксированное начальное число и ГПСЧ для определения координат. Мне нужно было бы разделить небо на плитки, сгенерировать начальное число, хешируя координаты плитки, а затем нарисовать, скажем, 100 звезд на плитку. Это позволяет мне расширять свое звездное поле на неопределенное время во всех направлениях, при этом мне все еще нужно учитывать только видимые плитки, но это не работает с коэффициентом «глубины», так как это позволяет звездам уходить за пределы своей плитки. Я мог бы просто использовать многослойные звездные поля без параллакса, используя этот алгоритм, но это кажется мне обманом.

И, конечно же, мне нужно делать все это каждый кадр, так что это должно быть быстро.

Как вы все думаете?

14
задан David Given 6 November 2010 в 13:47
поделиться