7 Plane的装扮

Plane的装扮

我们可以使用PV3D提供的Plane类来显示平面:

代码清单1

package

{

       import flash.display.Sprite;
       import flash.events.Event;
       import org.papervision3d.objects.primitives.Plane;
       import org.papervision3d.view.BasicView;
       /**
        * ...
        * @author hellopv3d
        */
       public class Main extends BasicView
       {
              private var plane:Plane;//定义一个平面变量
              public function Main():void
              {
                     if(stage) init();
                     else addEventListener(Event.ADDED_TO_STAGE, init);
              }

              private function init(e:Event = null):void
              {
                     removeEventListener(Event.ADDED_TO_STAGE,init);
                     //entry point
                    //创建一个平面对象,并与plane名字关联
                     plane = new Plane(null, 320, 200, 2, 2);

                     //将创建的平面对象加载进3D场景
                     scene.addChild(plane);

                     //渲染场景,startRendering继承自BasicView
                     startRendering();
              }
       }   
}


运行的效果为一个平面。测试运行多几次,观察平面的外观,可以知道平面仅仅是其“骨架”显示了不同的颜色。如何让平面多姿多彩呢?

WireframeMaterial

默认情况下,即:

new Plane(null, 320,200, 2, 2);

null表示创建的Plane对象外观为WireframeMaterial(线框材质),它仅仅使用随机的颜色来装扮三角面的线条。

我们也可以自己指定颜色来装扮线条:

//创建线框材质,颜色为黑色,透明度为1

var m:WireframeMaterial = new WireframeMaterial(0x000000,1);

plane = new Plane(m, 320, 200, 2, 2);//创建一个平面对象,并与plane名字关联

这样,每次测试运行的时候,颜色都为黑色。


ColorMaterial

ColorMaterial(颜色材质),它和线框材质类似。只不过ColorMaterial装扮的是整个面,WireframeMaterial装扮的为三角面的线。

var m:ColorMaterial = new ColorMaterial(0x000000,1);

plane = new Plane(m, 320, 200, 2, 2);//创建一个平面对象,并与plane名字关联

测试运行,平面被贴上了颜色。


BitmaoFileMaterial(位图文件材质)

除了颜色材质外,我们还可以在平面上贴图片,下面看看实施步骤。

步骤1:打开FlashDevelop软件,新建一个AS3项目(AS3 Project),命名为PlaneExample,并导入PV3D。

步骤2:在项目中创建一个文件夹,命名为assets,并放入一张图片,如下图所示。


步骤3:打开Main.as文件,输入以下代码。

package
{
       import flash.display.Sprite;
       import flash.events.Event;
       import org.papervision3d.materials.BitmapFileMaterial;
       import org.papervision3d.materials.ColorMaterial;
       import org.papervision3d.materials.WireframeMaterial;
       import org.papervision3d.objects.primitives.Plane;
       import org.papervision3d.view.BasicView;

       /**
        * ...
        * @author hellopv3d
        */

       public class Main extends BasicView
       {
              private var plane:Plane;//定义一个平面变量
             
              public function Main():void
              {
                     if(stage) init();
                     else addEventListener(Event.ADDED_TO_STAGE, init);
              }
            
              private function init(e:Event = null):void
              {
                     removeEventListener(Event.ADDED_TO_STAGE,init);
                     //entry point

                     var m:BitmapFileMaterial = new BitmapFileMaterial("../assets/2.jpg");
                     //创建一个平面对象,并与plane名字关联
                    plane = new Plane(m, 1200, 882, 10, 10);

                     //将创建的平面对象加载进3D场景
                     scene.addChild(plane);

                     //渲染场景
                     startRendering();//继承自BasicView
              }

              //重写刷屏方法
              override protected function onRenderTick(e:Event = null):void {
                     //调用父类的刷屏方法,因为哪里有渲染器渲染场景的功能
                    super.onRenderTick();
                     //下面输入你的代码
                     plane.rotationY+= 2;
              }
       }
}


步骤4:测试运行,能看到下图效果。


当平面转到背面的时候,没有任何东西显示。那是因为默认情况下材质只贴正面,如果要想显示背面,只需在创建对象之后设置材质双面效果即可。如上面的例子,在创建Plane对象后加入:

plane = new Plane(m, 1200, 882, 10, 10);//创建一个平面对象,并与plane名字关联

//让对象背面贴上材质

plane.material.doubleSided =true;


你可能感兴趣的:(function,测试,null,Class,import)