PV3D学习记录三(常用基本效果)

2009.02.15 作者: 小V - 0 评论
文章分类: Flash

  通过对基本语法和结构的认识(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);
}

}
}

相关文章