我们可以使用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(); } } }
运行的效果为一个平面。测试运行多几次,观察平面的外观,可以知道平面仅仅是其“骨架”显示了不同的颜色。如何让平面多姿多彩呢?
默认情况下,即:
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装扮的是整个面,WireframeMaterial装扮的为三角面的线。
var m:ColorMaterial = new ColorMaterial(0x000000,1);
plane = new Plane(m, 320, 200, 2, 2);//创建一个平面对象,并与plane名字关联
测试运行,平面被贴上了颜色。
除了颜色材质外,我们还可以在平面上贴图片,下面看看实施步骤。
步骤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;