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;