Ориентация рекламного щита к камере (точка) без нормалей - PullRequest
1 голос
/ 24 февраля 2010

Итак, у меня есть круг плоскостей, которые построены как:

plane.x = Math.cos(angle) * radius;
plane.z = Math.sin(angle) * radius;
plane.rotationY = (-360 / numItems) * i - 90;

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

затем, чтобы обновить их вращение вокруг круга, у меня есть:

var rotateTo:Number = (-360 / numItems) * currentItem + 90;
TweenLite.to(planesHolder, 1, { rotationY:rotateTo, ease:Quint.easeInOut } );

как видите, самолеты кружатся, и каждый из них ориентирован на 90 градусов от круга. Я использую это как справку - в значительной степени это: http://papervision2.com/a-simple-papervision-carousel/

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

Почему-то я думаю, что не могу изменить этот пример по ссылке, чтобы сделать это.

edit: OK. Я ответил на свой вопрос после того, как написал его. Помогает читать ваши собственные мысли написано. Так как я ориентирую плоскости по отдельности и поворачиваю их все как группу, то, что я сделал после анимации группы в коде выше, было перебрать каждую плоскость и сориентировал ее в Y-ориентацию передней плоскости так:

for (var i:int = 0; i < planes.length; i++) {
    TweenLite.to(planes[i], 1, { rotationY:(-360 / numItems * rotoItem - 90), ease:Quint.easeInOut } );
} 

rotoItem - тот, что находится впереди. Дело закрыто.

1 Ответ

0 голосов
/ 15 июля 2010

ОК. Я ответил на свой вопрос после того, как написал. Помогает читать ваши собственные мысли написано. Так как я ориентирую плоскости по отдельности и поворачиваю их все как группу, то, что я сделал после анимации группы в коде выше, было перебрать каждую плоскость и сориентировал ее в Y-ориентацию передней плоскости так:

for (var i:int = 0; i < planes.length; i++) {
    TweenLite.to(planes[i], 1, { rotationY:(-360 / numItems * rotoItem - 90), ease:Quint.easeInOut } );
} 

rotoItem - тот, что находится спереди. Дело закрыто.

...