![]() |
как затекстурить прямоугольник без PerspectiveMatrix3D?
возможно ли текстурирование прямоугольника (двух треугольников) без использования матрицы проекции? один треугольник текстурится легко, но с двумя все не так гладко: либо текстура помещается только а один из них, либо она сильно искажается.
|
возможно. можно даже не перспективную, можно даже не использовать матрицу проекции указывая положение вершин в вершинном буфере экранные (но нужно ли, перемножение вектора на матрицу на gpu всё равно будет быстрее, всё зависит от ситуации). проекция не влияет на искажение текстурирования. дело скорее всего в неправильных значениях uv в вершинном буфере. покажи лучше код и шейдер
|
Nooob, да, дело оказалось в перепутанных значениях uv. поправил и текстура отображается нормально. но возникла другая проблема. текстура непропорционально растягивается, т.к. выходной буфер имеет размер сцены (550х400), битмапдата для текстуры имеет тот же размер, а вот текстура - 1024х512 (т.к. ее размеры должны быть кратны 2). явно не соответствие. пока просто увеличил буфер до размера текстуры, но это явно не то. матрица сможет этому помочь?
Код AS3:
Код AS3:
|
возможно, это наведет вас на мысль:
крайний u = 550 / 1025 крайний v = 400 / 512 |
nuToH, спасибо, все работает.
а что скажете по поводу производительности? не быстрее ли будет с матрицей? можно ли как то ускорить отрисовку объектов на сцене через занесение их в текстуру? есть тест из 1000 вращающихся картинок. если отключить видимость root и отрисовывать весь root каждый ENTER_FRAME в BitmapData (которая загружается в текстуру), то никакого ускорения от использования Stage3D не наблюдается, т.к. процессор загружен преимущественно BitmapData.draw() и фпс все равно проседает. |
Быстрее с матрицей, а лучше возьми и сам проверь.
Ускорит отрисовку уменьшение вызовов drawTriangles с помощью батчинга. Процесс батчинга прост. нужно все свои прямоугольники (до 16383 на 1 вызов drawTriangles) хранить и изменять в одном буфере. Демо 1 Демо 2 К примеру для 2 прямоугольников (x=716, y=516, w=256, h=256) и (x=490, y=507, w=256, h=256) буферы будут такие Код:
vertexes = [716,772,716,516,972,516,972,772,490,763,490,507,746,507,746,763]Код AS3:
если изменилось положение треугольников нужно обновить только вершинный буфер если используешь анимацию по атласу то нужно обновлять uv буфер Плюсы: высокая производительность 16к прямоугольников при стабильных 60 fps на среднем компьюторе Минусы: на одну отрисовку можно использовать только 1 текстуру, либо использовать тест глубины (если нет прозрачных изображений) Можно в одном шейдере использовать до 8 семплов текстуры, но тогда производительность упадёт. Пример шейдера: Код AS3:
Пример: Код AS3:
|
BitmapData.draw не использует видеокарту для отрисовки. О каком ускорении Вы говорите?
|
такой батчинг существенно поднимет производительность, но подразумевает одну матрицу трансформации для всего набора ректов и следовательно манипулировать пер ректангл уже будет сложнее(скейл, ротейшн,а надо ли?). проблему с текстурой можно решить атласом.
если вам нужен просто хороший результат - можно воспользоваться готовыми решениями типа старлинг2д. но это ведь скушно, не интересно и не круто.=) |
на стейдже крутящиеся прямоугольники лишь для теста. там могут быть кнопки, вектор, анимация и т.д.
дело в том, что у меня всего один статичный прямоугольник с одной текстурой. его цель - отображать постоянно меняющийся stage средствами Stage3D. для этого я и рисую стейжд в битмапу, чтобы из нее получить текстуру для этого прямоугольника в каждом кадре. т.е. эдакий 2d рендерер использующий 3d. или это не правильный подход? |
не будет профита никакого
|
| Часовой пояс GMT +4, время: 08:32. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.