Flash与3D编程探秘(五)- 摄像机旋转和移动
2008-11-12 11:51:23 来源:WEB开发网//nowcreatelotsofballsaroundyourcamera
for(vari=0;i<MAX_OBJ;i++)
{
varball=newSphere();
ball.angle=Math.random()*(0-PI*2)+PI*2; //thisistherotateangleonthexzplane
ball.dist_center=140+(MAX_OBJ-i)*DISTANCE; //thedistancetoyourcamera
ball.x_3d=Math.cos(ball.angle)*ball.dist_center; //thenweusetrigtogetx
ball.z_3d=Math.sin(ball.angle)*ball.dist_center; //andz
ball.y_3d=Math.random()*(-240-240)+240; //nowputtheballatrandomy
scene.addChild(ball); //addtheballtothecollection
}
4. 对于每一个物体,我们在摄像机转动角度时刷新它的大小和位置。于是我们下一步写一个函数来达到目的,首先我们要确定小P相对于我们的摄像机的旋转角度。然 后我们根据这个角度和他们之间的垂直距离,算出它到摄像机的x,z和y的距离。最后,还是运用我们之前学过的算法,缩放和移动物体。
//updateballsizeandposition
functionupdate(obj)
{
//gettheanglerelativetoyourcamerapanningangle
varangle=obj.angle-camera.panning;
varx_pos=Math.cos(angle)*obj.dist_center-camera.x; //usetrigcalculatethex
varz_pos=Math.sin(angle)*obj.dist_center-camera.z; //andz
vary_pos=obj.y_3d-camera.y; //calculatetherelativey
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;
}
}
- ››FLASH不等于运算符!=的使用实例
- ››FLASH不全等运算符!==
- ››FLASH字符串分隔符运算符
- ››FLASH% 模运算符
- ››Flash+、++、+= 加法运算符
- ››Flash, 逗号运算符
- ››flash中的-、--、-=减法运算符
- ››Flash的-Infinity 常数、.点运算符、/ 除法运算符...
- ››Flash两种注释方法/*..*/ 和// 注释行分隔符运算符...
- ››Flash的/=除法赋值运算符、=赋值运算符、== 等于运...
- ››Flash之?: 条件运算符、^ 按位 XOR 运算符、^= 按...
- ››Flash的_framesloaded代码示例
更多精彩
赞助商链接