Watch, Follow, &
Connect with Us

Vsevolod Leonov

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 |



10 Responses to “FireMonkey 3D - работа с TMesh (запись)”

  1. Serge Rumyancev Says:

    Скачал, но что-то не могу найти кодека, чтоб воспроизвести видео, звук есть, а видео нет =(

  2. Дмитрий Says:

    Добрый день Всеволод.

    Когда ж Вы нас порадуете статьями про Datasnap новый. Я понимаю конечно, что тренд сейчас Firemonkey - но все же?

  3. Vsevolod Leonov Says:

    Перекодировано, перезалито.

    Дмитрий, в работе :) Про мобильные коннекторы написал. Скоро будет как минимум локализация уже имеющегося материала.

  4. Serge Rumyancev Says:

    Всеволод, спасибо, очень познавательный вебинар.

    Правда часть с вертиксами и индесами пересматривал раза три, так как есть некая путаница в терминологии, но как только понял, что:
    1) Vertex - это массив набора точек (а не треугольников) в 3D пространстве;
    2) Indeces - это массив набора точек из Vertex и каждая пара из 3х точек создает треугольник;
    то все встало на свои места.

    Осталось еще выпустить вебинар про соотношение координат в режимах pjScreen и pjCamera. Так как при проектировании с pjScreen более сложных фигур чем куб, в которых находится интерфейс программы, сложно подогнать соприкосновение граней поверхностей элементов к примеру TLayer3D из которых составляется фигура.

    Для примера, у меня 8 поверхностей TLayer3D с размерами 1024×728 пикселей, каждая повернута к предыдущей под углом 45 градусов. В результате получается круг из поверхностей TLayer3D, между которыми пользователь перемещается путем поворота оси координат родителя TLayout3D этих поверхностей. Так как я ограничен до десятитысячных, при позиционировании объекта в пространстве, то между поверхностями получаю либо зазор, либо наложение.
    Для меня стоит принципиально один вопрос, как мне перевести размер из пикселей (1024×728) в абсолютные размеры, сохранив нужные пропорции.

  5. Andrew Tsysar' Says:

    2Serge Rumyancev:
    Подобные задачи имхо в настоящее время нужно решать при помощи доп. инструментов. Например, я для размещения большого количества объектов в пространстве делал форму с функционалом инспектора объектов для свойств угла поворота, позиции и масштабирования и в run-time подгонял эти значения, запоминал их, и потом записывал их в свойства объектов. Для перехода между "секторами" 3D пространства делал кубики-маркеры, по клику на которые происходил поворот пространства в определенной плоскости.

  6. Serge Rumyancev Says:

    2Andrew Tsysar:
    Ручная подгонка это конечно хорошо, и ей приходится пользоваться сейчас, но все можно рассчитать по формулам, просто при задании положения объекта в пространстве, в пикселях, не хватает точности, маловато точности до десятитысячных.

    В моем случае формула простая, H=1024, угол α=45гр. Для того, чтоб рассчитать позицию расположения второй плоскости, относительно первой по X, нужно просто выполнить расчет по следующей формуле:
    (Н+(H/(2*cos(α)))/2

  7. Vsevolod Leonov Says:

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

    Да, вот еще - минимум искажений, если плоскость стоит в {0,0}, если ближе или дальше, то начнет работать интер/экстра-поляция. Это к вопросу о "пропорциональности" 2Д контролов, размещенных на 3Д-плоскостях.

  8. Serge Rumyancev Says:

    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.

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

Leave a Comment



Server Response from: BLOGS1