通过对基本语法和结构的认识(http://vl99.com/archive/257.html),可以看出里面那例子,只是简单的画一个正方形的线条。如何帮他加点效果呢?比如填充一下颜色、材质,运动效果,交互效果等。
好,拿上次http://vl99.com/archive/257.html下面的那个简单的结构代码,帮它加上点效果。
一、填充材质
首先,来试一下简单的填色。
1. 增加Event.ENTER_FRAME处理器引用包路径
import org.papervision3d.materials.ColorMaterial;
2. 声明材质
private var material:ColorMaterial;
3. 初始化及应用到原来的plane里面,使用变成红色(括号里面自已定).
material = new ColorMaterial( 0xcc0000 );//初始化材质 material.doubleSided = true;//让这个图形显示背面,默认是关着的,这句可以不加。只是完善而已。。 plane = new Plane(material);//初始化基本图形,把原来的plane = new Plane();改成这个
二、基本3d运动
可以直接继续拿上面填充完的代码用。
1. 增加events引用包路径
import flash.events.Event;
2. 新增一个onEnterFrame函数
private function onEnterFrame( e:Event ):void//新增一个onEnterFrame函数
{
plane.yaw( 2 ); // 以Y轴移动一定角度;
renderer.renderScene( scene, camera, viewport );//渲染,这个东西得放到最后
}
3. 添加onEnterFrame监听事件。加在scene.addChild( plane );这句下面
addEventListener( Event.ENTER_FRAME, onEnterFrame );
三.鼠标交互效果
继续拿上面填充完的代码用。
1. 增加交互的引用包路径
import org.papervision3d.events.InteractiveScene3DEvent;
2. 新增一个onMOVE函数
private function onMOVE( e:InteractiveScene3DEvent ):void
{
plane.pitch(10);
}
3.更改窗口初始化的代码为下面那个,主要的属性值是1 宽 2 高 3 滚动条 4 交互!
viewport = new Viewport3D( 400, 400, false, true );
4. 添加onMOVE监听事件。加在addEventListener( Event.ENTER_FRAME, onEnterFrame );这句下面
material.interactive = true;//事先要开启交互 plane.addEventListener( InteractiveScene3DEvent.OBJECT_MOVE, onMOVE );//添加onMove监听交互事件
好的, 这再把最后的代码贴上来
package
{//引用包
import flash.display.Sprite;
import org.papervision3d.view.Viewport3D;//窗口
import org.papervision3d.cameras.FreeCamera3D;//摄像机
import org.papervision3d.render.BasicRenderEngine;//渲染器
import org.papervision3d.scenes.Scene3D;//场景
import org.papervision3d.objects.primitives.Plane;//Plane基本图形
import org.papervision3d.materials.ColorMaterial;//填充材质
import flash.events.Event; //运动监听
import org.papervision3d.events.InteractiveScene3DEvent; //3D交互效果
//声明主应用程序类
public class Main extends Sprite
{//声明所有的必要变量
private var viewport:Viewport3D; //声明窗口
private var scene:Scene3D;//声明场景
private var camera:FreeCamera3D;//声明摄像机
private var renderer:BasicRenderEngine;//声明渲染器
///////上面就是那四大要素了
private var plane:Plane;// 再随便使用一下Plane基本图形画下图
private var material:ColorMaterial;//声明一下材质
public function Main() //声明主函数
{
initPapervision();//调用initPapervision函数
initObjects();//调用initObjects函数
}
private function initPapervision():void//可以看出是初始化的函数
{
viewport = new Viewport3D( 400, 400, false, true );
addChild( viewport );//两句合起来,初始化窗口并添加进主场景
scene = new Scene3D();//初始化场景
camera = new FreeCamera3D();//初始化摄像机
renderer = new BasicRenderEngine();//初始化渲染器
}
private function initObjects():void//可以看出是初始化用的函数
{
material = new ColorMaterial( 0xcc0000 );//初始化材质
material.interactive = true;//开启交互
material.doubleSided = true;;//开启双面显示
plane = new Plane(material);//初始化基本图形
scene.addChild( plane );//把基本图形添加进3d场景里
addEventListener( Event.ENTER_FRAME, onEnterFrame );//添加onEnterFrame监听事件
plane.addEventListener( InteractiveScene3DEvent.OBJECT_MOVE, onMOVE );//添加onMove监听交互事件
}
private function onEnterFrame( e:Event ):void//添加onEnterFrame函数,用于运动
{
plane.yaw( 2 ); // 以Y轴移动一定角度;
renderer.renderScene( scene, camera, viewport );//渲染
}
private function onMOVE( e:InteractiveScene3DEvent ):void//添加onEnterFrame函数,用于交互
{
plane.pitch(10);
}
}
}