Генерация случайного фона для игры

Я разрабатываю 2D-игру с OpenGL (OpenTK) и C#. Мне нравится иметь случайный фон, состоящий из звезд и тумана.

В середине моей проекции звездолет. Звездолет может двигаться в любом направлении. Фон также будет генерироваться динамически в любом направлении. Моя проблема в производительности. Я визуализирую 48000 вершин (6000 прямоугольников с текстурой .png) для небольшой области. И площадь будет расти, потому что мой звездолет движется. МОЙ ПК: ЦП 4 ядра x 2300 МГц, GeForce 9800 GTX+, и он все еще работает медленно. Это нормально?

У меня в голове 1 решение. Рендерим область и создаем растровое изображение для backgroundtexture.

Возможно, у вас есть лучшее решение. Или вы можете сказать мне о недостатках создания динамической текстуры фона.


person MR.ABC    schedule 21.03.2012    source источник


Ответы (2)


Пусть поле зрения будет 4x4.

Таким образом, вы должны визуализировать изображение 5x5, составленное из изображений 1x1, и центрировать его на экране.

Затем, когда ваш космический корабль движется, вы должны сгенерировать кусок изображения 1x5 (5 маленьких изображений размером 1x1) и поместить его перед своим кораблем, и вы должны удалить кусок изображения с другого направления. Если корабль движется влево, вы должны поставить новую фигуру слева и убрать фигуру справа. и т.п.

person Anton Sizikov    schedule 21.03.2012
comment
это то, что я делаю прямо сейчас. но без картинок. я генерирую настоящие звезды и туман. решение построить картину фона уже было у меня на уме. - person MR.ABC; 22.03.2012

Если вам просто нужен текстурный фон с прокруткой, вы можете просто изменить координаты текстуры в зависимости от положения звездолета. Чтобы сделать его более уникальным, вы можете использовать несколько прозрачных текстур и наложить их друг на друга, что даст вам эффект параллакса.

Что касается звезд, я бы использовал GL_POINTS. Как только звезда «упадет» с края видимого экрана, заставьте ее появиться на другой стороне. Опять же, вы можете иметь их больше с разной скоростью, потому что, как мы знаем, звезды не находятся на одинаковом расстоянии.

Извините, я не могу быть более точным, но я на работе.

person Tom    schedule 21.03.2012
comment
Извините, решение с текстурой прокрутки не для меня. У игрока должно быть ощущение, что фон не повторяется и всегда остается неизменным, если звездолет возвращается на место. - person MR.ABC; 22.03.2012
comment
Что ж, решение не в том, чтобы нарисовать всю вселенную. Если вы разделяете его на квадраты, то вы должны просто рисовать те, которые находятся на экране. Рендеринг 48000 вершин — это слишком много только для фона. - person Tom; 22.03.2012
comment
правильно, поменял. коллекция становится большой. поэтому у каждого квадроцикла есть набор звезд, и он будет добавлен в мой пакет рендеринга только тогда, когда он виден. Я не могу принять ваш ответ, потому что вы пишете что-то другое. - person MR.ABC; 22.03.2012
comment
Не стесняйтесь написать ответ на свой вопрос, а затем принять его. Это поможет другим, кто будет читать это в будущем, и улучшит вашу репутацию. - person Tom; 23.03.2012