Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Возникла проблема при отрисовки рендер таргета обратно на сцену (http://www.flasher.ru/forum/showthread.php?t=215748)

artem2033 16.01.2020 23:14

Возникла проблема при отрисовки рендер таргета обратно на сцену
 
Есть текстура в которую рисуются символы, и их нужно отрисовать с той же глубиной на сцену, с которой они были нарисованы. Думал рендерить 2 текстуры одну с глубиной другую с символами, после проверять в шейдере перекрывает ли текущий пиксель буфер глубины. Вот только чтение из буфера не доступно. Единственный, до которых я додумался, это не использовать стандартный буфер глубины, а создать свой. Так вот, есть ли другие какие способы без рендеринга каждого символа отдельно?

artem2033 17.01.2020 17:22

Вложений: 1
Кажется нашёл решение.
Рендерю всё в текстуру с координатами каждого символа/объекта, потом использую эту текстуру как текстурный-атлас, и с такими же данными, высчитывая в шейдере текстурные координаты отрисовываю на сцену. Вот только не знаю, как это скажется на производительности.

Bletraut 17.01.2020 21:59

А какая стоит задача? Почему нельзя просто хранить порядок отрисовки в текстуру и потом в таком же порядке на сцену рисовать?

artem2033 17.01.2020 22:31

Задача отрисовать из текстуры объекты в таком же порядке в каком они были отрисованы в неё за 2 прохода, один в текстуру, второй на сцену. Порядок отрисовки?
Вот как на скриншоте, символы были отрисованы в одном пакете, а квадрат в другом и он половину перекрывает, а другую нет.

Bletraut 17.01.2020 23:16

Как буквы отрисовываются в текстуру? В цикле рисуется каждая буква через отдельный вызов draw или это всё один большой меш, а каждая буква это 2 полигона?

Добавлено через 3 минуты
Если это 2д, то буффер глубины вообще можно отключить. Если нужно просто отрисовывать объекты поочереди то можно поступить так, для квадрата вызываем draw, он рисуется на сцене, следующий драв вызвать для букв они рисуются на сцене поверх квадрата, либо наоборот если нужен иной порядок, к тому же это будет значительно быстрее работать без Z-буффера (я думаю тут идёт речь о нем, т.к. во флеше нет полноценного depth-буффера как в opengl).

artem2033 17.01.2020 23:39

Получается так, собирается вся геометрия в буфер вершин и индесов, потом за 1 вызов draw все символы рисуются в текстуру, то есть да как 1 меш. Каждая буква это не квад, это контуры, в виде координат из файла шрифта. Если я его отключу, то придётся делать сортировку всего что на сцене, тогда вырастет количество drawCalls. И с каждой такой сортировкой ещё и придётся данные для видеокарты упаковывать заново. А с z-буфером(который я называю, буфером глубины), 1 раз всё упаковал и только меняешь z координату. Это вы же про Painter - алгоритм, не знаю пока что 60000 символов 7 мс времени занимают, мне кажется этого достаточно.


Часовой пояс GMT +4, время: 22:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.