WEB开发网
开发学院图形图像Flash Flash与3D编程探秘(七)- 3D物体框架 阅读

Flash与3D编程探秘(七)- 3D物体框架

 2008-11-12 11:51:06 来源:WEB开发网   
核心提示: //initballsandputthemonthescreenfor(vari=0;i<points.length;i++){varball=newSphere();ball.x=points[i].x;ball.y=points[i].y;ball.z=0;scene.addCh

//initballsandputthemonthescreen
for(vari=0;i<points.length;i++)
{
  varball=newSphere();
  ball.x=points[i].x;
  ball.y=points[i].y;
  ball.z=0;
  scene.addChild(ball);
}

6. 这个函数你在摄像机空间旋转一篇文章中应该见过,函数的功能是把3D空间的点,映射到2D平面xy上。函数执行的步骤是这样的:

a) 提前计算出x,y和z旋转角度的正余弦值。

b) 使用for loop遍历物体所有的顶点。

c) 使用计算出的正余弦和三角函数对三个轴的旋转分别进行计算,得出旋转后顶点的x,y和z。

d) 然后计算出物体在2D平面上映射后的x和y值。

e) 并且把这些2D点添加到一个新的数组里。

f) 最后返回这个数组。

functionproject_pts(points)
{
  varprojected=[];
  //declaresomevariableforsavingfunctioncall
  varsin_x=Math.sin(axis_rotation.x);
  varcos_x=Math.cos(axis_rotation.x);
  varsin_y=Math.sin(axis_rotation.y);
  varcos_y=Math.cos(axis_rotation.y);
  varsin_z=Math.sin(axis_rotation.z);
  varcos_z=Math.cos(axis_rotation.z);
  
  varx,y,z,        //3dx,y,z
    xy,xz,      //rotateaboutxaxis
    yx,yz,      //rotateaboutyaxis
    zx,zy,      //rotateaboutzaxis
    scale;      //2dscaletransform
  
  for(vari=0;i<points.length;i++)
  {
    x=points[i].x;
    y=points[i].y;
    z=points[i].z;
    
    //hereisthetheroy:
    //supposeaisthecurrentangle,basedongivencurrent_x,current_yonaplane
    //(canbex,yplane,ory,zplaneorz,xplane),rotateangleb
    //thenthenewxwouldberadius*cos(a+b)andywouldbe radius*sin(a+b)
    //radius*cos(a+b)=radius*cos(a)*cos(b)-radius*sin(a)*sin(b)
    //radius*sin(a+b)=radius*sin(a)*cos(b)+radius*cos(a)*sin(b)
  
    //rotateaboutxaxis
    xy=cos_x*y-sin_x*z;
    xz=sin_x*y+cos_x*z;
    //rotateaboutyaxis
    yz=cos_y*xz-sin_y*x;
    yx=sin_y*xz+cos_y*x;
    //rotateaboutzaxis
    zx=cos_z*yx-sin_z*xy;
    zy=sin_z*yx+cos_z*xy;
    //scaleit
    scale=focal_length/(focal_length+yz-camera.z);
    x=zx*scale-camera.x;        //getxpositionintheviewofcamera
    y=zy*scale-camera.y;        //getxpositionintheviewofcamera
    
    projected[i]=vertex3d(x,y,yz,scale);
  }
  returnprojected;
}

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

Tags:Flash 编程 探秘

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