开发者

Billboard orientation toward camera (point) without normals

开发者 https://www.devze.com 2022-12-21 16:32 出处:网络
So I have a circle of planes which get constructed as: plane.x = Math.cos(angle) * radius; plane.z = Math.sin(angle) * radius;

So I have a circle of planes which get constructed as:

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

which calculates how many angular slices there are for total number of planes (rotationY) and places each plane into it's place on a circle of radius.

then to update their rotation around the circle I have:

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

as you can see planes are circling and each is oriented 90 degrees out from the circle. I'm using this as a reference - it's pretty much that: http://papervision2.com/a-simple-papervision-carousel/

Now, what I'd like to find out is how could I calculate degree of orientation for each individual plane to always face camera without normal, if it's possible at all. I've tried plane.LookAt(camera), but that doesn't work. Basically every plane should have orientation as the one facing camera in the middle.

Somehow I think I can't modify that example from link to do that.

edit: OK I answered my own question after I wrote it. Helps to read your own thoughts written. So as I'm orienting planes individually and rotating them all as a group, what I did after tween of the group in code above, was to loop through each plane and orient it to the Y orientation of the forward plane as so:

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

rotoItem is the one at the front. Case closed.


OK I answered my own question after I wrote it. Helps to read your own thoughts written. So as I'm orienting planes individually and rotating them all as a group, what I did after tween of the group in code above, was to loop through each plane and orient it to the Y orientation of the forward plane as so:

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

rotoItem is the one at the front. Case closed.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号