среда, 29 августа 2012 г.

Урок 3 - Отрисовка в текстуру.


Тема № 2 - Рендер в текстуру.
Отрисовка изображения в текстуру - мощный инструмент, активно использующийся при создании графических эффектов в играх. Прежде всего, сгенерированные текстуры используют для создания постэффектов, но им можно найти много применений - генерация тайлов поверхности, теней, всяческие оптимизации и т.д. В демосцене большая часть текстур генерируется именно с помощью рендера в текстуру(ну и математики, естественно).
С помощью рендера в текстуру можно эффективно кэшировать сложные изображения - например нарисовать деревце с миллионами листиков в одну текстуру, а потом выводить ее одним полигоном.
Quad Engine изначально поддерживает этот мощный графический инструмент, причем делает это легко и красиво.
Для рендера в текстуру нужно:
  • создать текстуру;
  • назначить ее рендертагетом;
  • что ни будь в нее нарисовать;
  • собственно все - использовать текстуру можно как угодно.

Теперь код:

//для рендера в текстуру понадобится обыкновенная текстура
var
  ScreenTexture: IQuadTexture; 
  ...
  //при создании мы указываем, что это текстура для рендера,    
  //описываем ее размер и индекс
  Quad.CreateRenderTexture(256, 256, ScreenTexture, 0);
  ...
  //рисование в текстуру ничем не отличается от обычного
  Quad.BeginRender;
  //включаем рисование в текстуру, указываем
  //индекс и режим обрезания
  Quad.RenderToTexture(True, ScreenTexture, 0, True);
  //экран можно почистить или закрасить произвольным цветом,
  //как обычно
  Quad.Clear($ff000000);
  //тут нарисуем что ни будь
  uad.Rectangle(100, 100, 200, 200, $ffffffff);
  //и собственно закончим рисование в текстуру и вернемся к обычному рисованию на экран
  Quad.RenderToTexture(False, ScreenTexture);
  //собственно все - теперь полученную текстуру можно
  //использовать, как обычную
  ScreenTexture.Draw(0, 0);
  Quad.EndRender;

Примеров будет даже два, фрактал и змейка.

Естественно, если текстура нужна для пост эффекта, то ее размер обычно равен размеру экрана.
Сами пост эффекты делают шейдером, но об этом в следующих уроках.
При создании и в начале рендера в текстуру можно указывать номер регистра. Это так же необходимо для работы с шейдерами(чтобы передавать данные о нескольких текстурах).
Если почистить текстуру цветом без альфы, текстура будет с прозрачным фоном.

Еще один важный параметр - режим обрезания.
Если он установлен в True, то в текстуру рисуется только область размером с саму текстуру.
Если он установлен в False или не указан, все содержимое экрана рисуется в текстуру, и при несовпадении размеров экрана и текстуры, изображение либо сжимается, либо растягивается.




Комментариев нет:

Отправить комментарий