Блеск заключается в добавлении еще нескольких атрибутов для дальнейшего использования (они несут в себе информацию о направлении и величине скорости), а также , как обычно, в контроле над ошибками.

Добавьте к конусу еще четыре атрибута: vx, vy, vz и velocity. Допишите в expression еще несколько строк:

locatorl .translateX=pCone1 .oldX;

locatorl .translateY=pCone1 .oldY;

locatorl. translateZ=pCone1 .oldZ;

pConel .vx=pCone1 .translateX-pConel .oldX;

pConel .vy= pConel .translateX-pConel .oldY;

pConel ,vz=pCone1 .translateX-pConel .oldZ;

pConel .velocity = mag( <<pCone1.vx, pConel .vy, pConel ,vz>> );

pConel ,oldX=pConel .translateX;

pConel .oldY=pConel .translateY;

pConel .oldZ=pCone1 .translateZ; Очевидно, что атрибуты vx, vy, vz содержат теперь координаты вектора скорости, а атрибут velocity определяется как длина вектора скорости, то есть как величина скорости. Эти атрибуты вы можете использовать в дальнейшем.

Например, конус может удлиняться, двигаясь с большой скоростью - в соответствии с общей теорией относительности…

Для этого достаточно дописать еще одну строчку в expression:

locatorl .translateX=pCone1 .oldX;

locatorl .translateY=pCone1 .oldY;

locatorl. translateZ=pCone1 .oldZ;

pConel .vx=pCone1 .translateX-pConel .oldX;

pConel .vy=pCone1. translateY-pConel .oldY;

pConel .vz=pCone1 .translateZ-pConel .oldZ;

pConel .velocity=mag(<<pCone1 .vx, pConel .vy, pConel .vz>>);

pConel .sealeY = 1 + pCone1.velocity*2.5;

pConel .oldX=pCone1 .translateX; pConel .oldY=pCone1 .translateY; pConel ,oldZ=pCone1 .translateZ; В дальнейшем вы можете использовать информацию о скорости и более интеллектуальным образом. Например, при движении с большой скоростью объект может изменять свой цвет или прозрачность. Вы также можете деформировать объект и задавать степень деформации в зависимости от скорости объекта. Такие интеллектуальные связи удобнее всего устанавливать с помощью операции Set Driven Key, о которой речь пойдет ниже.

Примечание. Чтобы добиться автоматического удлинения при разгоне и сплющивания при торможении, необходимо иметь информацию об ускорении объекта. Ускорение вы всегда можете вычислить как разницу между скоростью в текущем и предыдущем кадрах, пользуясь только что описанными выше принципами (см. сцену keyframeAcceleration.ma).

Поговорим теперь об ошибках. Когда конус останавливается, положение локатора совпадает с позицией конуса, и в этом случае конус пытается смотреть на локатор, находящийся у него в центре. Это приводит к тому, что конус просто разворачивается вдоль мировой оси X, так как констрейн не может вычислить необходимые вращения.

Чтобы избежать такой ситуации, надо, очевидно, проверить, не равна ли нулю скорость объекта, и если равна, то не надо ли производить обновления позиции локатора, оставляя его в последнем положении.

pConel .vx=pCone1 .translateX-pConel .oldX; pConel .vy=pCone1 .translateY-pConel .oldY; pConel .vz=pCone1 .translateZ-pConel .oldZ; pConel .velocity=mag(<<pCone1 .vx, pConel .vy, pConel .vz>>);

if(pCone1 .velocity!=0) {


⇐ вернуться назад | | далее ⇒