WEB开发网
开发学院图形图像Flash Flash与3D编程探秘(五)- 摄像机旋转和移动 阅读

Flash与3D编程探秘(五)- 摄像机旋转和移动

 2008-11-12 11:51:23 来源:WEB开发网   
核心提示: 2. 下面这个函数是和上面例子中不同的主要部分,首先我们要得到物体和摄像机的x,Flash与3D编程探秘(五)- 摄像机旋转和移动(5),y和z距离,然后我们使用反三角函数就可以得出物体所在的角度,同时使用勾股定理得到物体和摄像机的距离(注意y距离为0),同理使用三角函数我们便可以得到在摄

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)+"";
}

上一页  1 2 3 4 5 6 7  下一页

Tags:Flash 编程 探秘

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接