Флаттер и 3D
Что, если я хочу отобразить что-то в 3D? Хм…
Все в одном ресурсе Flutter: https://flatteredwithflutter.com/flutter-and-3d/
Предварительные требования…
Созданное приложение предназначено для Flutter Desktop… Если вы новичок в нем, мы вам поможем, прочтите статью здесь
Начинать…
В этой статье основное внимание уделяется следующим виджетам:
Преобразовать…
Согласно официальной документации Flutter,
«Виджет, который применяет преобразование перед рисованием своего дочернего элемента».
Это важный виджет, если вы стремитесь к трехмерному преобразованию…
Наш код с использованием Transform Widget,
Параметры для виджета преобразования:
- alignment: выравнивание начала координат (в нашем случае FractionalOffset.centerLeft)
- преобразовать: матрица для преобразования…
- дочерний: виджет, в котором происходит преобразование.
Преобразовать матрицу…
Преобразование принимает трехмерную матрицу преобразования, которая является Matrix4.
Шаги:
- Создайте матрицу:
Начните с единичной матрицы и примените к ней преобразования.
Matrix4.identity()
2. Установите перспективу:
По статье Flutter
Перспектива заставляет объекты, находящиеся дальше, казаться меньше. Установка для строки 3 и столбца 2 матрицы значения 0,001 уменьшает масштаб в зависимости от расстояния до них.
Теперь мы знаем,
setEntry(3, 2, 0.0011)
3 означает строку 3, 2 означает столбец 2
Число 0,0011: число перспективы… Это число может быть достигнуто только путем игры…
В нашем случае 0,0011 (подходит)…
3. Установите вращение / наклон оси….
..rotateX(_offset.dy) ..rotateY(_offset.dx),
rotateX и rotateY принимают в качестве параметров угол. В нашем случае мы определили смещение как:
Offset _offset = Offset(0.3, -0.9);
Опять же, эти ценности были достигнуты путем игры….
4. Укажите дочерний элемент: RotationTransition в нашем случае.
RotationTransition…
Согласно официальной документации Flutter,
Анимирует вращение виджета.
Это дочерний виджет для нашего трехмерного преобразования…
Параметры для виджета RotationTransition:
- повороты: анимация (в нашем случае контроллер анимации)
- дочерний: виджет, в котором происходит вращение…
Примечание. Поскольку для ваших поворотов нужен контроллер, следовательно, виджет должен быть виджетом с отслеживанием состояния, имеющим контроллер анимации….
Изображение солнечной системы вращается с помощью контроллера анимации, также анимация сохраняется в режиме повтора с продолжительностью 50 секунд (для одного цикла анимации)…
Как выглядит 3D-эффект:
Замедление анимации…
Этого можно добиться с помощью (timeDilation)
timeDilation = 2.0; // Will slow down animations by a factor of two
Это свойство присутствует внутри пакета
import 'package:flutter/scheduler.dart';
Статьи, связанные с Flutter Desktop:
Исходный код учебника здесь…