LINUX.ORG.RU

[SVG] Трапециевидное преобразование

 


0

0

Перелопатил чуть ли не весь w3.org, никак не могу понять: возможно ли сделать средствами SVG (skew, scale и т.п.) трапециевидное преобразование прямоугольной области <g>? А нужно мне это для нормального отображения трехмерных картинок «в перспективе». Сейчас преобразую посредством rotate+scale+skew, но получается некрасиво: «задние» края области получаются слишком широкими, а «передние» - узкими.

Метод расчета каждой точки по-отдельности (как в SVG-VML3D) мне не подходит: слишком он тормозной, годится лишь для простеньких картинок. А мне надо будет сотню-другую сложных элементов нарисовать.

☆☆☆☆☆
Ответ на: комментарий от Eddy_Em

> А что, по-вашему выходит, для 3D только OpenGL годится?

3D-демок для Canvas много было, но я не специалист по Canvas. Ключевым свойством SVG является то, что это формат разметки, основанный на XML. Конечно, SVG можно пытаться использовать для 3D, но возможности подобного применения ограничены, ибо никакой специальной поддержки для подобного применения со стороны SVG нет.

archimag ★★★
()

Честно, я вообще не в курсе данного вопроса, просто быстро глянул в гугл - вроде как так можно указывать матрицу преобразования, т.е., то, что тебе нужно.

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

вроде как так можно указывать матрицу преобразования

Можно, только она не полноценная: в ней всего две верхних строки. И непонятно, как рассчитать компоненты этой матрицы.

Eddy_Em ☆☆☆☆☆
() автор топика

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

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

> Это обычное преобразование системы координат, причём тут 3D?

При том, что не очень разумно использовать SVG для 3D (как хочет автор)

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

не очень разумно использовать SVG для 3D

Предложите лучший вариант - с радостью приму. Но это должно работать в браузере (т.е. строим картинку при помощи JavaScript по полученным через xmlhttpquery данным, затем мышью ее крутим-вертим; раз в 10-20 секунд данные обновляются, соответственно должно измениться изображение).

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

Flash не?

Это, вообще-то, не винфак. Нечего здесь троллить...

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

> Предложите лучший вариант - с радостью приму. Но это должно работать в браузере (т.е. строим картинку при помощи JavaScript по полученным через xmlhttpquery данным, затем мышью ее крутим-вертим; раз в 10-20 секунд данные обновляются, соответственно должно измениться изображение).

http://ru.wikipedia.org/wiki/VRML

?

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

http://ru.wikipedia.org/wiki/VRML

VRML - практически RIP, а из остальных ссылок с этой странички ничего в браузере работать не будет (часть - только для мастдая, и все требуют установки специальных плагинов).

Мне же нужно, чтобы картинка отображалась во всех браузерах, кроме IE.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от isden

И где по вашей ссылке 3D? Обычная масштабируемая растровая текстура...

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

> Годится лишь для сверхпримитивных рисунков.

Даже до SVG canvas'у еще далеко.


Зацени: http://mugtug.com/sketchpad/ - правда не 3D, зато очень плотно для разных элементов используется Canvas. Ну и примеров 3D-игрушек с Canvas в сети хватает.

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

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

Зацени: http://mugtug.com/sketchpad/

Класс!!! Но, жаль, что не 3D. Но закладку сделал (правда, мне не понравилось жуткое количество кода). Вообще, надо, конечно, будет почитать документацию по canvas - быть может, там что-нибудь подходящее и найдется. Просто примеров на SVG я видел множество, а вот canvas - штука новая и пока еще не раскрученная.

Eddy_Em ☆☆☆☆☆
() автор топика

Вопрос все еще висит. Я думаю, можно сделать так: для каждого объекта <g> формировать два отображения: сдвинутых в одну, и в другую сторону, но показывать по половинке отображений, совмещая их на рисунке.

Возможно ли такое в SVG? Что-то я не совсем разобрался, что собственно делают clip и mask...

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