Новые свойства LocalAxisX,Y,Z и новые методы AnimMoveByLocal в модуле Graph3D
В версии PascalABC.NET 3.8.3.3189 от 18.10.22 в модуле Graph3D у графических объектов появились новые свойства и методы. Они предназначены для работы с трехмерными объектами в локальных координатах.
Перейти в официальный Телеграм-канал PascalABC.NET:
https://t.me/pascalabc_official
Свойства LocalAxisX, LocalAxisY, LocalAxisZ
Создадим комбинированный объект в виде параллелепипеда с двумя сферами-глазиками по бокам:
uses Graph3D; begin var b := Box(0, 0, 0, 3, 1, 1); var s := Sphere(1, 0.5, 0, 0.4); var s1 := s.Clone.MoveByY(-1); b.AddChild(s); b.AddChild(s1); end.
Можно заметить, что глазики имеют один цвет - это произошло потому что мы создавали второй глазик клонированием.
Обратим внимание, что направление взгляда объекта (от центра к глазикам) совпадает с осью OX.
Теперь повернем полученный объект на 45 градусов к нам и поднимем его "нос" на 30 градусов.
b.Rotate(OrtZ, 45); b.Rotate(OrtY, -30);
Направление взгляда объекта поменялось. Однако у каждого объекта есть своя локальная система координат, оси которой направлены так же, как и в момент его создания. Так, локальная ось OX Local по-прежнему направлена вдоль направления взгляда объекта.
У каждого 3D-объекта появились новые свойства: LocalAxisX, LocalAxisY и LocalAxisZ, задающие оси объекта в локальной системе координат.
Изобразим стрелкой направление LocalAxisX:
var a := Arrow(Origin, b.LocalAxisX * 5);
Теперь анимируем объект вдоль локальной оси OX на расстояние 10 за 2 секунды, воспользовавшись методом AnimMoveByLocal:
uses Graph3D; begin var b := Box(0, 0, 0, 3, 1, 1); var s := Sphere(1, 0.5, 0, 0.4); var s1 := s.Clone.MoveByY(-1); b.AddChild(s); b.AddChild(s1); b.Rotate(OrtZ, 45); b.Rotate(OrtY, -30); var a := Arrow(Origin, b.LocalAxisX * 5); b.AnimMoveByLocal(OrtX * 10, 2).Begin; end.
Заключение. В этой короткой статье мы продемонстрировали использование новых свойств трехмерных объектов LocalAxisX, LocalAxisY, LocalAxisZ и нового метода AnimMoveByLocal, позволяющего анимированно перемещаться в локальных координатах.