Перейти к содержанию
Fire Monkey от А до Я

Поиск сообщества

Показаны результаты для тегов '3d'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Общие вопросы
    • Анимация
    • Графика
    • Стили
    • Базы данных и REST
    • Компоненты
    • Положение, размеры, выравнивание
    • Работа с текстом
    • Приложение и формы
    • Отладка
    • Развертывание приложений
    • Вопросы по языку Object Pascal и RTL
    • Общая информация о TControl
    • События
    • Прочие вопросы
  • Вопросы по платформам
    • Android
    • iOS
    • OSX
    • Windows
    • Windows Phone
    • Linux
  • Вопросы по использованию RAD Studio
    • Лицензирование
    • Сборка проектов
    • Multi-Device Designer
    • Редактор кода
    • Вопросы
  • Обучение
    • Основная информация
    • Вопросы
    • Отзывы
  • Поиск специалистов по FireMonkey
    • Консультации
    • Ищу подрядчика
  • Дополнительные ресурсы по FireMonkey
    • Сторонние компоненты
    • Приложения, написанные с использованием FireMonkey
    • Примеры
    • Руководства
    • Шаблоны
    • Статьи и заметки
    • Информация о версиях RAD Studio
    • Новости
  • Организация работы данного форума

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


StackOverflow


Защита от ботов


Город


Интересы

Найдено: 13 результатов

  1. Здравствуйте. Для проекта понадобилось мышью перемещать TSphere по линии, нарисованной с помощью Drawline. Не подскажите, как можно реализовать такое движение строго вдоль линии. Хотя, был бы благодарен если бы помогли понять обычное движение 3d объектов. Заранее спасибо.
  2. Jeysi Z

    Текст на context

    Здравствуйте, хотел поинтересоваться, как писать что-то в процедуре render на context?
  3. Здравствуйте, для проекта понадобилось рисовать линии в 3d графике, но возникла такая проблема, можете подсказать, что не так? Вот часть кода procedure TForm2.Sphere1Render(Sender: TObject; Context: TContext3D); var v1,v2:TPoint3D; begin if Context.BeginScene then try v1:=TPoint3D.Create(Sphere1.Position.X,Sphere1.Position.Y,Sphere1.Position.Z); v2:=TPoint3D.Create(Sphere2.Position.X,Sphere2.Position.Y,Sphere2.Position.Z); Context.drawline(v1,v2,1,TAlphaColorRec.Black); finally Context.EndScene; end; end; На изображении результат работы программы.
  4. fima

    Перемещение 3D объектов

    Здравствуйте. Может кто из форумчан подскажет, как реализовать сабж. Нашла видео на ютубе, но там перемещение сферы по объекту Plane. А как реализовать перемещение по всей сцене? Допустим на сцене есть только один объект TCube, как его переместить мышкой в нужную позицию?
  5. Pulsarius

    3D приложение и Android Emulator

    Привет всем! Кто-нибудь сталкивался с проблемой запуска приложения с использованием 3D компонентов на Android эмуляторе? Приложение написано на Delphi. На iOS эмуляторе всё в порядке - запускается и работает без проблем, а вот Android эмуляторе не хочет. Точнее приложение только начинает запускаться и эмулятор падает. Подчёркиваю - не приложение а сам эмулятор падает! Если убрать 3D компоненты, то всё будет нормально работать, но стоит только добавить хотя бы один 3D компонент, то всё... Delphi 10 Seattle, Android API 22 для 5.1.1. Такое же было и на прежних версиях студии - XE7, XE8. Решение не находил и забивал, т.к. под Android приложение не требовалось - чисто для интереса пробовал запустить, а сейчас потребовалось. Буду очень благодарен за помощь!
  6. Захотелось создать игрушку для дальнейший освоение FM, так как у меня работа связана с дорогами. Каким способ лучше создать дороги, пробовал ректанглам получается какие то не красивые коробки Планируется что то наподобие этого картинки плюс разные разветвление и в некоторых местах узкие или широкие дороги PS. Дорога трехмерная, еще было бы круто создать редактор карт. За ранее спасибо
  7. Уже создавал тему по этому вопросу, надеялся, что в ХЕ8 рендеринг исправят, но нет. Кроме того, проблема обросла подробностями. Итак, та же моделька того же человечка в шлеме, собрана на TPlane'ах, код текстурирования тот же, всё так же не рендерится голова внутри. В тот раз проблема решилась случайно и я сам не понял, что же именно привело к решению. С тех пор форму старался не трогать, но рано или поздно дошёл и до неё черёд. И как результат, та же проблема - уже в ХЕ8. Подробнее о том, как организована модель: Viewport3D, внутри него лежит TDummy, в котором собрана TPlane'ами модель, а также камера, которая на это безобразие смотрит: Теперь непосредственно к проблеме: Смотрим на скрин: По вайрфреймам можно понять, что боковые плоскости головы не рендерятся вообще (а не пропадает текстурка, как я полагал раньше). Интересно, а что "внутри" шлема? Чтобы узнать, сделал возможность в рантайме, не закрывая программу, "снять" шлем (Visible для всех граней в False). Смотрим: Оп! Все грани на месте, всё отлично прорендерилось! А если снова "надеть" шлем? Нет, надевание шлема привело всё к той же грустной картине на первом скрине - боковые плоскости просто отсеклись и упрямо не хотят рендериться... Следующим шагом попробуем уменьшить прозрачность одной из плоскостей шлема и посмотреть сквозь неё на отсечённую плоскость головы: Так точно, и полупрозрачность не заставляет включаться рендеринг "внутренних" граней. А что будет, если поменять разрядность платформы? Выставим Win64/Debug и - о чудо! - рендеринг внезапно заработал! И под конец экспериментов всплыл не такой страшный, но всё же назойливый баг, из-за которого иногда не прорисовываются те или иные графические элементы: к примеру, здесь не прорисовались текстуры модельки, иногда не прорисовываются некоторые превьюшки списка серверов, но это лечится обновлением битмапа. Итак, что же мы узнали из этих исследований? Ровным счётом ничего. Рендеринг или, наоборот, нерендеринг не имеют никаких закономерностей. Какими способами удалось повлиять на прорисовку этих поверхностей: 1) Изменение целевой платформы (Win32/Win64/Debug/Release) дают разный результат - практически всегда из четырёх комбинаций есть удачная, где всё рендерится 2) Изменение формы - добавление новых элементов или удаление существующих, помогает не всегда. На рабочей конфигурации может наоборот привести к отсечению граней 3) Изменение кода. ЛЮБОЕ. Даже никак не связанное с рендерингом. Достаточно воткнуть в произвольное место что-то типа Inc(Variable), чтобы рендеринг починился. Этого же, впрочем, достаточно и для того, чтобы рендеринг сломался. Что НИКАК не влияет на рендеринг: А не влияет всё то, что должно было бы повлиять, а именно: 1) Расстановка в любых мыслимых и немыслимых местах BeginUpdate'ов и EndUpdate'ов 2) Repaint'ы и Invalidate'ы всего и вся 3) Обновление текстур (грубо говоря, заливка модели новой текстурой) 4) Использование StyleBook'a Исходя из вайрфреймов, нарисованных на каждой плоскости, мы видим, что не прорисовываются сами TPlane'ы. Могу предположить, что движок считает их невидимыми и отсекает как ненужные для оптимизации, но почему, в таком случае, рендерятся передняя и задняя плоскости головы? Итак, вопрос - классика: кто виноват и что делать. Баг ли это в движке FMX, или же всё учтено и достаточно задать волшебную опцию, которая разом всё починит - я так и не узнал. Приветствуется любая помощь, а также хотелось бы раз и навсегда закрыть вопрос: в каких случаях нужно делать BeginUpdate/EndUpdate и влияет ли он на обработку отрисовки унаследованных объектов.
  8. FreeOS

    Линия в 3D (как MoveTo и LineTo в 2D)

    Здравствуйте, Как можно рисовать линии в 3D (как например в канвасе MoveTo и LineTo) у меня есть две точки A(x1,y1,z1) и B(x2,y2,z2)
  9. Как создавать(ну и удалять,изменять) примитивные 3D фигуры (например Rectangle3D, Cube, Sphere ...) в runtime-ме в большом количестве. То есть я не знаю сколько мне надо фигур заранее. За ранее СПАСИБО
  10. vanois

    Частицы 3D

    Доброе время суток! Подскажите, возможно ли принципиально как-то организовать генерацию частиц? Создать имитацию огня, например? Или с FireMonkey можно и не пытаться?
  11. Есть моделька человека, собранная из TPlane'ов, на голове - шлем, на шлем накладывается текстура с прозрачными пикселями. Модельку можно вращать. Если подключить StyleBook, то голова перестаёт прорисовываться сквозь прозрачные пиксели при вращении. Запустили приложение, голова прорисована: Поворачиваем - голова мгновенно "стирается": Отключаем StyleBook - крутим модельку, всё хорошо: Как исправить рендеринг сквозь прозрачные пиксели? P.S.: Если в StyleBook'e поставить галочку на UseStyleManager, то снова всё отрисовывается нормально, но использовать StyleManager очень неудобно. Код текстурирования // Скопировать часть битмапа в другой битмап: procedure CopyBitmapToBitmap( const SrcBitmap : FMX.Graphics.TBitmap; // Из какого битмапа копируем const DestBitmap : FMX.Graphics.TBitmap; // В какой битмап копируем const SrcRect : TRectF; // Какой прямоугольник const DstRect : TRectF; // В какой прямоугольник ScaleCoeff : Single = 1.0; // Коэффициент масштабирования (DstRect * ScaleCoeff) Opacity : Single = 1.0; // Коэффициент прозрачности накладываемого изображения FlushBeforeDrawing : Boolean = True; // Очищать ли предыдущее содержимое Interpolate : Boolean = False // Интерполировать ли при масштабировании ); function Max(const A, B: Single): Single; inline; begin if A > B then Result := A else Result := B; end; begin if FlushBeforeDrawing then DestBitmap.Clear($00000000); DestBitmap.SetSize(Round(Max(DstRect.Left, DstRect.Right) * ScaleCoeff), Round(Max(DstRect.Top, DstRect.Bottom) * ScaleCoeff)); DestBitmap.Canvas.BeginScene; DestBitmap.Canvas.DrawBitmap( SrcBitmap, SrcRect, RectF( DstRect.Left, DstRect.Top, DstRect.Left + ((DstRect.Right - DstRect.Left) * ScaleCoeff), DstRect.Top + ((DstRect.Bottom - DstRect.Top) * ScaleCoeff) ), Opacity, not Interpolate ); DestBitmap.Canvas.EndScene; end; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - procedure TMainForm.DrawSkin(FileStream: TMemoryStream); type TTextureInfo = array of Integer; // OffsetX, OffsetY, Width, Height TCubeTexture = array of TTextureInfo; // Front, Back, Left, Right, Top, Bottom TSurfaceArray = array of ^TPlane; // Индексы элементов в массивах: const iOffsetX = 0; iOffsetY = 1; iWidth = 2; iHeight = 3; iFront = 0; iBack = 1; iLeft = 2; iRight = 3; iTop = 4; iBottom = 5; iHead = 0; iTorso = 1; iLeftArm = 2; iRightArm = 3; iLeftLeg = 4; iRightLeg = 5; iHelmet = 6; const HeadTexture : TCubeTexture = [// X Y W H [8 , 8, 8, 8], // Front [24, 8, 8, 8], // Back [0 , 8, 8, 8], // Left [16, 8, 8, 8], // Right [8 , 0, 8, 8], // Top [16, 0, 8, 8] // Bottom ]; ... { здесь пропущен список координат для каждой текстуры из битмапа } ... const ScaleCoeff: Single = 16.0; var Bitmap: FMX.Graphics.TBitmap; // Список поверхностей каждой части модели: HeadPlanes : TSurfaceArray; TorsoPlanes : TSurfaceArray; LeftArmPlanes : TSurfaceArray; RightArmPlanes : TSurfaceArray; LeftLegPlanes : TSurfaceArray; RightLegPlanes : TSurfaceArray; HelmetPlanes : TSurfaceArray; // Список частей модели: ModelParts: array of ^TSurfaceArray; // Список текстур каждой части модели: ObjectTextures: array of ^TCubeTexture; // I - счётчик по частям модели, J - счётчик по поверхностям: I, J: LongWord; begin // Загружаем битмап из PNG-файла: Bitmap := FMX.Graphics.TBitmap.Create; Bitmap.LoadFromStream(FileStream); // Составляем массив из групп текстур для каждой части модели: ObjectTextures := [@HeadTexture, @TorsoTexture, @LeftArmTexture, @RightArmTexture, @LeftLegTexture, @RightLegTexture, @HelmetTexture]; // Составляем список поверхностей: HeadPlanes := [@HeadFront , @HeadBack , @HeadLeft , @HeadRight , @HeadTop , @HeadBottom ]; TorsoPlanes := [@TorsoFront , @TorsoBack , @TorsoLeft , @TorsoRight , @TorsoTop , @TorsoBottom ]; LeftArmPlanes := [@LeftArmFront , @LeftArmBack , @LeftArmLeft , @LeftArmRight , @LeftArmTop , @LeftArmBottom ]; RightArmPlanes := [@RightArmFront, @RightArmBack, @RightArmLeft, @RightArmRight, @RightArmTop, @RightArmBottom]; LeftLegPlanes := [@LeftLegFront , @LeftLegBack , @LeftLegLeft , @LeftLegRight , @LeftLegTop , @LeftLegBottom ]; RightLegPlanes := [@RightLegFront, @RightLegBack, @RightLegLeft, @RightLegRight, @RightLegTop, @RightLegBottom]; HelmetPlanes := [@HelmetFront , @HelmetBack , @HelmetLeft , @HelmetRight , @HelmetTop , @HelmetBottom ]; // Составляем список частей модели: ModelParts := [@HeadPlanes, @TorsoPlanes, @LeftArmPlanes, @RightArmPlanes, @LeftLegPlanes, @RightLegPlanes, @HelmetPlanes]; // Проходимся по каждой части модели (голова, корпус, ...): for I := 0 to High(ModelParts) do begin // Проходимся по каждой поверхности модели: for J := 0 to High(ModelParts[I]^) do begin // Рисуем текстуру на каждой поверхности: with (ModelParts[I]^)[J]^ do begin CopyBitmapToBitmap( Bitmap, TTextureMaterialSource(MaterialSource).Texture, RectF( (ObjectTextures[I]^)[J][iOffsetX], (ObjectTextures[I]^)[J][iOffsetY], (ObjectTextures[I]^)[J][iOffsetX] + (ObjectTextures[I]^)[J][iWidth], (ObjectTextures[I]^)[J][iOffsetY] + (ObjectTextures[I]^)[J][iHeight] ), RectF(0, 0, (ObjectTextures[I]^)[J][iWidth], (ObjectTextures[I]^)[J][iHeight]), ScaleCoeff ); // Инвертируем текстуры для симметрии: if I in [iLeftArm, iLeftLeg] then TTextureMaterialSource(MaterialSource).Texture.FlipHorizontal; end; end; end; FreeAndNil(Bitmap); end;
  12. К примеру у меня есть объекты TSphere, TCylinder, а также TModel3D, все эти объекты находятся в движении, соответственно могут пересечься. Вопрос в том, как определить факт их пересечения? В 2D, например в TImage, когда объекты рисуются вручную, там выбирать не приходиться, просчитываешь всё сам, но тут даже не 2D шейпы, а 3D, и я предположил, что есть какой-то более простой способ просчёта пересечений. Может быть есть какое-то явное сравнение двух множеств точек на которых находятся два объекта, и если они пересеклись (булево пересечение), то можно запустить какой-то кусок кода? Подскажите пожалуйста способы определения пересечения 3D объектов.
  13. Можно ли реализовать эффект перелистывания листов книги при смене табов в табконтрол? Пробовал реализовать в 3D приложении. На Layer3D кидал табконтрол и свойство Layer3D->RotationAngle->Y привязывал к FloatAnimation->StopValue=360 Но получается не красиво - делается два оборота,- может есть возможность полностью перевернуть табконтрол на 360о , в идеале табитем,за один поворот 180о ? Если кто смотрел на андроиде NextLauncher, в нем можно поставить эффект перелистывания рабочих столов Ткань, что-то типа такого я хочу реализовать Вот, только ето сильно крутой эффект, меня устроит и простое прямоугольное перелистывание , желательно итемов табконтрола но устроит и вариант смена итема и переворот всего табконтрола RotationAngle->Y подходит, но из за того что происходит двойной переворот табконтрола и визуально ето не красиво, а реализовать переворот на 360 в одном перевороте пока не выходит Заранее спасибо
×
×
  • Создать...