Как реализовать независимые слои рендеринга в Direct3D9? - PullRequest
0 голосов
/ 09 июня 2009

Я работаю над оконным приложением для построения графиков данных Direct3D, которое должно отображать несколько оверлеев поверх данных (аналогично HUD в играх). Так как может быть большой объем данных, которые нужно прорисовать, и не все пометки будут меняться каждый раз, я подумал, что было бы не очень хорошей идеей повторять вершины, когда меняется только одно наложение на дисплее.

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

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

Ответы [ 3 ]

0 голосов
/ 16 июля 2009

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

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

0 голосов
/ 23 июля 2010

Рендеринг в текстуру Рендеринг целевых поверхностей - очень хорошая идея, и ее можно использовать для многих целей, например. оптимизация / кэширование, но остерегайтесь операции смешивания с обычной альфой (a * c1 + (1-a) * c2); если @ - смесь ARGB, то l1 @ l2 @ l3! = l3 @ l1 @ l2; то есть это не коммутативно, но с использованием предварительно умноженной альфы во всех текстурах / слоях операция смешивания может быть сделана коммутативной.

Конечная ссылка - статья Портера / Даффа «Компоновка цифровых изображений» от 1984 года.

0 голосов
/ 09 июня 2009

RTT работает хорошо, я использовал его в игре, которую я недавно сделал. Каждая сцена (сцена относится к слою, «HUD» была сценой, «Main» была главной сценой и т. Д.) Визуализировалась в текстуру, затем каждая текстура рендерилась в четырехугольник, сортируясь обратно вперед (для альфа-смешивания ). Я выбрал это вместо простого рендеринга сцен непосредственно в задний буфер, потому что это позволило мне выполнить постобработку.

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

...