Flash与3D编程探秘(五)- 摄像机旋转和移动
2008-11-12 11:51:23 来源:WEB开发网2. 下面这个函数是和上面例子中不同的主要部分。首先我们要得到物体和摄像机的x,y和z距离,然后我们使用反三角函数就可以得出物体所在的角度,同时使用勾股定理得到物体和摄像机的距离(注意y距离为0),同理使用三角函数我们便可以得到在摄像机移动之后物体的x和z。然后再根据物体的x和z对物体进行2D 空间的缩放和移动。
//updateballsizeandposition
functiondisplay(obj)
{
varx_pos=obj.x_3d-camera.x; //calculatethexdistancefromobbjecttothecamera
vary_pos=obj.y_3d-camera.y; //andydistance
varz_pos=obj.z_3d-camera.z; //andzdistance
varangle=Math.atan2(z_pos,x_pos); //caculatetherelativeangle
//nowgettheactualobjectradiusaroundcamera
varradius=Math.sqrt(z_pos*z_pos+x_pos*x_pos);
x_pos=Math.cos(angle+camera.panning)*radius; //getthexpositionafterpanning
z_pos=Math.sin(angle+camera.panning)*radius; //andyposition
if(z_pos>0) //iftheballisinfrontofthecamera
{
if(!obj.visible)
obj.visible=true; //maketheballvisibleanyway
varscale=focal_length/(focal_length+z_pos); //calthescaleoftheball
obj.x=x_pos*scale; //calcualtethexpositioninacameraview
obj.y=y_pos*scale; //andyposition
obj.scaleX=obj.scaleY=scale; //scaletheballtoaproperstate
}
else
{
obj.visible=false;
}
txt_z.text=int(camera.z)+"";
txt_panning.text=Number(camera.panning*(180/Math.PI)).toFixed(1)+"";
}
- ››FLASH不等于运算符!=的使用实例
- ››FLASH不全等运算符!==
- ››FLASH字符串分隔符运算符
- ››FLASH% 模运算符
- ››Flash+、++、+= 加法运算符
- ››Flash, 逗号运算符
- ››flash中的-、--、-=减法运算符
- ››Flash的-Infinity 常数、.点运算符、/ 除法运算符...
- ››Flash两种注释方法/*..*/ 和// 注释行分隔符运算符...
- ››Flash的/=除法赋值运算符、=赋值运算符、== 等于运...
- ››Flash之?: 条件运算符、^ 按位 XOR 运算符、^= 按...
- ››Flash的_framesloaded代码示例
更多精彩
赞助商链接