LINUX.ORG.RU

SDL infinite sprite

 , ,


0

1

Вот рисую окошко, тискаю спрайты по нему, а так как опыта - нуль, не знаю как вернее нарисовать плывущие облачка. Видел примеры, где анимацию делают, но там текстуру режут по кадрам и показывают в определенном прямоугольнике. А как крутить плавно в нем же текстурку, отрисовывая ее хвост у изголовья? Спасибо!

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

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

trex6 ★★★★★
()
Ответ на: комментарий от trex6

В интерфейс игры типа «Mario Br.» вряд ли влезут красивые облака на общем фоне. Пока скилл оттачиваю на точном клоне со спрайтами, срезанными с оригинала. В продакшен такую не выставишь, но логику отработать поможет

minakov ★★★★★
() автор топика

В DX и OpenGL можно просто смещать текстурные координаты.

andreyu ★★★★★
()
Ответ на: комментарий от minakov

А новый фрейм рисовать как? Я действительно алгоритм не понимаю

ничего рисовать не нужно, все спрайты нужно грузить/генерировать/рисовать заранее перед игрой либо перед загрузкой уровня

anonymous2 ★★★★★
()

отрисовывая ее хвост у изголовья?

Рисуй два раза просто:

    +--------------+
 /~_|~~^\_    /~_~~|^\_
(   |     )  (     |   )
\~~^|~~_^^   \~~^~~|_^^
    |              |
    |              |
    |              |
    +--------------+
unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

так вот и представлял - создаем один спрайт(если облачка перемещаются[так захотелось попробовать]), двигаем медленно влево, когда доходим до точки склейки рисуем второе облако(на самом деле группу, но не важно, это спрайт), доходим до точки невидимости первого, удаляем его, повторяем цикл. После всего этого остался один вопрос: как заставить прятаться левый край спрайта раньше границы окна? Пробовал surface толкать в SDL_SetClipRect() с заранее созданным прямоугольником(выделением) нужной области, но похоже не понял для чего он нужен - не сработал.

    +---------------+
    |+-------------+|
    ||~~^\_    /~_~||
    ||     )  (    ||
    ||~~_^^   \~~^~||
    ||             ||
    ||             ||
    |+-------------+|
    +---------------+

minakov ★★★★★
() автор топика

Костыли itt. Каждому облачку — по своему спрайту, проверка области видимости и отсечение того, что не попадает в кадр, должны быть встроены в движок и быть универсальными.

// dmfd

anonymous
()
Ответ на: комментарий от anonymous

должны быть встроены в движок и быть универсальными

должны быть встроенными в OpenGL. поправил тебя.

x0r ★★★★★
()
Ответ на: комментарий от x0r

Зайчатки frustum culling'а в opengl таки предусмотрены: треугольник, попадающий в кадр частично, по стандарту должен биться на несколько треугольников, полностью попадающих в кадр, и растеризация делается только для них. Но более сильная оптимизация всё равно ложится на движок, что правильно: человек, программирующий мерзкое 3D, должен страдать.

anonymous
()
Ответ на: комментарий от minakov

Как вы пришли к такому странному выводу? Это камень в огород вашего движка.

anonymous
()
Ответ на: комментарий от anonymous

frustum culling

вон отсюда

более сильная оптимизация

оп рисует пачку спрайтов, о какой оптимизации должна идти речь? пусть хоть 200 раз свою сцену отрендерит. как только речь зайдет о высокополигональных сценах и шейдерах на 5 экранов - позовете.

x0r ★★★★★
()
Ответ на: комментарий от x0r

оп рисует пачку спрайтов, о какой оптимизации должна идти речь?

Я тогда не понимаю, при чём здесь была ваша фраза про "встроены в opengl". Можете не рассказывать, мне это совершенно не интересно.

anonymous
()
Ответ на: комментарий от minakov

поверх закрасил и все :) Всем спасибки в этом чатике!

minakov ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.