Flash与3D编程探秘(六)- 全方位旋转摄像机
2008-11-12 11:51:10 来源:WEB开发网6. 下面的函数就是刷新小P位置和大小的函数,这也是这篇文章主要讲述的内容,所以,请集中。OK,首先我们要得出小P(其中一个小P)到摄像机的x,y和z 距离。对于横向旋转角度panning,我们使用本文前面讲述的方程,把相应的x距离和z距离带入,然后我们得出新的x距离和z距离。使用相同的方法得出 纵向旋转角度pitching后的y和z距离,对摄像机倾斜角度tilt我们在次使用上述方程。这样我们就得到围绕三个轴旋转后新的x,y和z距离,继而 便可以使用老办法算出物体的缩放和移动。最后别忘记加一个z_near变量,存储小P到摄像机的距离,以便于我们对所有小P进行z排序。
//updateballsizeandposition
//hereiswhatwereallycareabout,soconcentrate
functiondisplay(obj)
{
varx_distance=obj.x_3d-camera.x; //firstwedeterminexdistanceballtocamera
vary_distance=obj.y_3d-camera.y; //y
varz_distance=obj.z_3d-camera.z; //zdistance
vartempx,tempy,tempz; //sometemporaryvariables
//twomoretrigyouneedtoknowabout,supposeaisthepreviousangle
//cos(a+b)=cos(a)*cos(b)-sin(a)*sin(b)
//sin(a+b)=sin(a)*cos(b)+cos(a)*sin(b)
//thuswehavethefollowing
varangle=camera.panning;
tempx=Math.cos(angle)*x_distance-Math.sin(angle)*z_distance;
tempz=Math.sin(angle)*x_distance+Math.cos(angle)*z_distance;
x_distance=tempx;
z_distance=tempz;
angle=camera.pitching; //thesamethingwehaveforpitchangle
tempy=Math.cos(angle)*y_distance-Math.sin(angle)*z_distance;
tempz=Math.sin(angle)*y_distance+Math.cos(angle)*z_distance;
y_distance=tempy;
z_distance=tempz;
angle=camera.tilt; //andtiltangle
tempx=Math.cos(angle)*x_distance-Math.sin(angle)*y_distance;
tempy=Math.sin(angle)*x_distance+Math.cos(angle)*y_distance;
x_distance=tempx;
y_distance=tempy;
if(z_distance>0) //iftheballisinfrontofthecamera
{
if(!obj.visible)
obj.visible=true; //maketheballvisibleanyway
varscale=focal_length/(focal_length+z_distance); //calthescaleoftheball
obj.x=x_distance*scale; //calcualtethexpositioninacameraview
obj.y=y_distance*scale; //andyposition
obj.scaleX=obj.scaleY=scale; //scaletheballtoaproperstate
}
else
{
obj.visible=false;
}
obj.z_near=z_distance; //keeptrackofzdistancetoourcamera
}
- ››FLASH不等于运算符!=的使用实例
- ››FLASH不全等运算符!==
- ››FLASH字符串分隔符运算符
- ››FLASH% 模运算符
- ››Flash+、++、+= 加法运算符
- ››Flash, 逗号运算符
- ››flash中的-、--、-=减法运算符
- ››Flash的-Infinity 常数、.点运算符、/ 除法运算符...
- ››Flash两种注释方法/*..*/ 和// 注释行分隔符运算符...
- ››Flash的/=除法赋值运算符、=赋值运算符、== 等于运...
- ››Flash之?: 条件运算符、^ 按位 XOR 运算符、^= 按...
- ››Flash的_framesloaded代码示例
更多精彩
赞助商链接