AS3Dmod之进阶篇---Twist


虽然研究完Twist还是对其一知半解,但知道怎么用,还是另我很兴奋,如果能够灵活应用的话,这玩意就太多用处了。
上面的例子单靠blend是实现不了的,看了zupko的文章http://blog.zupko.info/?p=140 ,再查了3dmodAPI果然。
还有这么灵活的东西。但是zupko的twist是自己写的,不是3dmod里面的,不过思路是一样。
Twist有三个参数可以访问到。angle,vector,center;这节知识点也就在这3个参数的应用。
大家先来观察下文档类代码和上节介绍blend不同的地方我用黑体标注。
 

  1. package
  2. {
  3. import com.as3dmod.ModifierStack;
  4. import com.as3dmod.modifiers.Twist;
  5. import com.as3dmod.plugins.pv3d.LibraryPv3d;
  6. import com.as3dmod.util.Phase;
  7.  import com.as3dmod.core.Vector3; //和Numeber3D差不多,我理解的是3维向量,参数(x,y,z)
  8. import org.papervision3d.cameras.CameraType;
  9. import org.papervision3d.materials.MovieMaterial;
  10. import org.papervision3d.objects.primitives.Plane;
  11. import org.papervision3d.view.BasicView;
  12. import org.papervision3d.view.layer.ViewportLayer;
  13.  
  14. import flash.events.Event;
  15. import flash.filters.DropShadowFilter;
  16.  
  17. public class MainWaft3DPlane extends BasicView
  18. {
     private var axis:Vector3 = new Vector3(0, 1, 0);
     private var center:Vector3 = new Vector3(0,800,0) ;
    //这两个实在不知道该怎么解释,这样想或许好理解点。center就是Y方向800的一个力源axis是定义了Y的一个向量,那么就是绕Y轴做扭曲
    //其实我也搞不清楚 多调整几次参数就知道他怎么用了。
  19. private var plane:Plane;
  20. private var mstack:ModifierStack;
  21. private var twist:Twist;
  22. private var phase:Phase;
  23.  
  24. public function MainWaft3DPlane()
  25. {
  26.   super(550, 400, true, false, CameraType.FREE);
  27.  
  28.   var mat:MovieMaterial=new MovieMaterial(new Mc(),false,true);
  29.   mat.doubleSided=true;
  30.   plane=new Plane(mat,285,400,4,4);
  31.   scene.addChild(plane);
  32.     camera.moveForward(450);
  33.   viewport.getChildLayer(plane).filters=[new DropShadowFilter(4.0,45,0x333333)];
  34.  
  35.   mstack = new ModifierStack(new LibraryPv3d(), plane);
  36. twist = new Twist((90/180) * Math.PI);
  37.   //因为摄像头被移到了前面 所以角度调到90度才是画面出现的侧边扭曲
  38. mstack.addModifier(twist );   
  39.   startRendering();
  40.   phase = new Phase();
  41. }
  42. protected override function onRenderTick(event:Event = null):void
  43. {
  44.   phase.value+=.05;
  45.    twist.vector=axis;
      twist.center=center;
       twist.angle=phase.phasedValue * 0.5;
    //一个浮动值
  46.   mstack.apply();
  47.   super.onRenderTick(event);
  48. }
  49. }
  50. }
     

Tags:as3dmod  PV3D  

0 Comment so far



Leave a reply