FireMonkey 3D - работа с TMesh (запись)
Одним из базовых направлений создания 3D-объектов с помощью FireMonkey является использование компонента TMesh. Он позволяет строить "сеточные" объекты, состоящие из совокупности пространственных треугольников. Как начать использование данного компонента? В чём разница работы с ним в design-time и run-time? Как правильно "натягивать" текстуры в виде растровых изображений?
Ответы на эти и многие другие вопросы содержатся в специальном тематическом вебинаре, доступном в записи.
Posted by Vsevolod Leonov on July 2nd, 2012 under C++Builder XE2, Delphi XE2, FireMonkey, Recorded Webinars |

RSS Feed

July 2nd, 2012 at 1:21 pm
Скачал, но что-то не могу найти кодека, чтоб воспроизвести видео, звук есть, а видео нет =(
July 2nd, 2012 at 9:15 pm
Добрый день Всеволод.
Когда ж Вы нас порадуете статьями про Datasnap новый. Я понимаю конечно, что тренд сейчас Firemonkey - но все же?
July 3rd, 2012 at 1:45 am
Перекодировано, перезалито.
Дмитрий, в работе
Про мобильные коннекторы написал. Скоро будет как минимум локализация уже имеющегося материала.
July 3rd, 2012 at 5:38 pm
Всеволод, спасибо, очень познавательный вебинар.
Правда часть с вертиксами и индесами пересматривал раза три, так как есть некая путаница в терминологии, но как только понял, что:
1) Vertex - это массив набора точек (а не треугольников) в 3D пространстве;
2) Indeces - это массив набора точек из Vertex и каждая пара из 3х точек создает треугольник;
то все встало на свои места.
Осталось еще выпустить вебинар про соотношение координат в режимах pjScreen и pjCamera. Так как при проектировании с pjScreen более сложных фигур чем куб, в которых находится интерфейс программы, сложно подогнать соприкосновение граней поверхностей элементов к примеру TLayer3D из которых составляется фигура.
Для примера, у меня 8 поверхностей TLayer3D с размерами 1024×728 пикселей, каждая повернута к предыдущей под углом 45 градусов. В результате получается круг из поверхностей TLayer3D, между которыми пользователь перемещается путем поворота оси координат родителя TLayout3D этих поверхностей. Так как я ограничен до десятитысячных, при позиционировании объекта в пространстве, то между поверхностями получаю либо зазор, либо наложение.
Для меня стоит принципиально один вопрос, как мне перевести размер из пикселей (1024×728) в абсолютные размеры, сохранив нужные пропорции.
July 4th, 2012 at 11:28 pm
2Serge Rumyancev:
Подобные задачи имхо в настоящее время нужно решать при помощи доп. инструментов. Например, я для размещения большого количества объектов в пространстве делал форму с функционалом инспектора объектов для свойств угла поворота, позиции и масштабирования и в run-time подгонял эти значения, запоминал их, и потом записывал их в свойства объектов. Для перехода между "секторами" 3D пространства делал кубики-маркеры, по клику на которые происходил поворот пространства в определенной плоскости.
July 5th, 2012 at 5:48 am
2Andrew Tsysar:
Ручная подгонка это конечно хорошо, и ей приходится пользоваться сейчас, но все можно рассчитать по формулам, просто при задании положения объекта в пространстве, в пикселях, не хватает точности, маловато точности до десятитысячных.
В моем случае формула простая, H=1024, угол α=45гр. Для того, чтоб рассчитать позицию расположения второй плоскости, относительно первой по X, нужно просто выполнить расчет по следующей формуле:
(Н+(H/(2*cos(α)))/2
July 5th, 2012 at 11:29 pm
Согласен с Андреем, что ручками подгонять сложно. Понятно дело, что мы все стараемся использовать в дизайн-тайм, но лучше объекты инстанцировать именно в дизайн-тайм, а размещать их в рантайм с точным вычислением.
Да, вот еще - минимум искажений, если плоскость стоит в {0,0}, если ближе или дальше, то начнет работать интер/экстра-поляция. Это к вопросу о "пропорциональности" 2Д контролов, размещенных на 3Д-плоскостях.
July 9th, 2012 at 4:25 pm
2Aleksey:
Да математика рулит =).
Осталось понять, как правильно её использовать в 3D пространстве FireMonkey, так как существует слишком много нюансов.
Пример простого нюанса:
У нас есть TLayout3D, который является родителем всей сцены и его координаты мы используем для всех поворотов и приближений объектов входящих в сцену. У TLayout3D существует параметр глубины (depth), который нельзя установить в 0, минимум в 0,01 и его нужно почему-то учитывать в расчетах %)
А теперь простой пример, кидаем на форму TLayout3D и в него два TLayer3D, расположим их относительно TLayout3D на равном расстоянии по оси Z, задав для одного значение 200, а для второго -200. Попробуйте теперь по поворачивать наш TLayout3D по оси Y на 180 градусов и по оси Z сделать приближение на 200. Если с первой плоскостью все будет идеально, то вторая при таком вылезет за рамки. А если нашей второй плоскости установить координату Z как -200,01 то все будет идеально.
Это я все к чему, мы пытаемся сейчас сотворить крутые штуки в Firemonkey 3D, нас пытаются подогреть конкурсами, но нам всем не хватает базовых знаний о работе системы координат 3D пространства Firemonkey.
В одной из статей было сказано уходите от расчета по пикселям, делайте расчеты в абсолютных координатах. Я согласен с тем изречением, но вот как это сделать на практике, никто так и не сказал ;).