‘Papervision3D’ 标签下的文章:

PV3D学习记录四(COLLADA模型的应用)

2009/03/05 | 作者:小V | 评论 (4)| 分类: Flash

首先利用记录一、二学到的基本结构新建一个as文件,并声明好引用包、四要素等。

接着是了解一下pv3d里模型的应用类。
1.Collada类:简便,但不支持骨骼等动画信息,适合导入静止的场景模型。

import org.papervision3d.objects.parsers.Collada; //引用的Collada包

private var carcollada:Collada;//声明Collada为carcollada

var carcollada=new Collada("模型.XML或dae");//导入外部模型文件
carcollada.addEventListener(FileLoadEvent.LOAD_COMPLETE, 完成后该怎么办的方法);

2.Dae类:声明多几步,读取慢一点,支持骨骼动画等,而且还在不断添加新的功能。

import org.papervision3d.objects.parsers.DAE;//引用的DAE包

private var cardae:DAE=new DAE(true);//声明DAE为cardae

cardae.load("模型.XML或dae");//导入外部模型文件

没接触过3d的话,可能会说那个外部模型哪里来的,模型要进3D软件里导出来如用:3DMAX, Maya等一些软件里。
安装好3DMAX(ColladaMax)或Maya(colladaMaya)还需要安装相应的插件,不然原本是不直接Collada这种dae文件的。
http://www.feelingsoftware.com/content/view/16/30/
插件嘛,到他们官方里下载,要注册。。。
安装也容易,直接安装完后,在3D软件里的选项找到插件并启动,就可以在导出的时候看到*.DAE了。(DAE其实就是一个xml文件,如果你问为什么有人用xml有人用dae其实是一样的。。。)

完整简单的dae应用

package {
import flash.display.Sprite;
import flash.events.Event;

import org.papervision3d.cameras.FreeCamera3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;

import org.papervision3d.events.FileLoadEvent;

import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.objects.parsers.Collada;

public class test01 extends Sprite {
private var viewport:Viewport3D;
private var renderer:BasicRenderEngine;
private var scene:Scene3D;
private var camera:FreeCamera3D;

private var plane:Plane;
private var car:Collada;

public function test01():void {

viewport=new Viewport3D(400,400);
renderer=new BasicRenderEngine  ;
scene=new Scene3D;
camera=new FreeCamera3D(2,200);
camera.y=1000;
camera.moveBackward(2000);

addChild(viewport);

plane=new Plane(new BitmapFileMaterial("map.jpg"),10000,10000,8,8);
plane.pitch(90);
scene.addChild(plane);

car=new Collada("car.XML",new MaterialsList({all:new BitmapFileMaterial("map_car.jpg")}));
car.addEventListener(FileLoadEvent.LOAD_COMPLETE,onloaded);

addEventListener(Event.ENTER_FRAME,process);
}
private function onloaded(evt:FileLoadEvent):void {
car.moveLeft(2000);
car.moveUp(50);
scene.addChild(car);
}
private function process(evt:Event):void {
if (car) {
car.rotationY+=4;
car.moveForward(120);
camera.lookAt(car);
}
renderer.renderScene(scene,camera,viewport);
}

}
}

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);
}

}
}

PV3D学习记录二(基本语法和结构)

2009/02/13 | 作者:小V | 评论 (0)| 分类: Flash

1.先学习一下原理。

原理解释:要使papervision3D成像,必须至少初始化下面4个东西。

窗口:用户观看的窗口,简单的可以想成就是flash里面的画布大小。窗口也可以理解成渲染的尺寸,否则画面就无限大了

场景:场景是指整个三维的场景。

摄像机:来拍画面.

渲染器:如果没有这个东西,所有以上的东西都只是数据,渲染器就是把所有数据变成图像的东西。

源于:http://flab3d.com/tutorials_01_pv3dbasic.php 的原理介绍。

2.基本语法

如果,你也未接触过as3.0,可以先熟悉一下格式,或是再找本好的书学习一下。(我是比较早以前接触的as2.0,更新3.0的时候没时间去学,所以先了解一下这个,有机会要认真看看as3.0的书)

package
{   //引用包 import后面加所需要包的路径,如:
import flash.display.Sprite;
/////////////////////////////////////////////
//声明主应用程序类继承自哪里如:Sprite,在flash里用作文档类,就是这个文件的名字,如:
public class Main extends Sprite
{//主要声明所有的必要变量,如:
private var viewport:Viewport3D;//初始化窗口
/////////////////
//声明主函数,如:
public function Main()
{//具体要执行的内容,如:
init();//调用下面init这个函数
}
//声明一些函数,如:
private function init():void
{//具体要执行的内容,如:
initObjects();
}
}
}

3. pv3d的基本结构

了解完基本语法之后,开始实践,先来分析个简单的代码:

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基本图形

//声明主应用程序类
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基本图形画下图

public function Main() //声明主函数
{
initPapervision();//调用下面init这个函数
initObjects();//调用下面init这个函数
}
private function initPapervision():void//可以看出是初始化的函数
{
viewport = new Viewport3D(400,400);
addChild( viewport );//两句合起来,初始化窗口并添加进主场景
scene = new Scene3D();//初始化场景
camera = new FreeCamera3D();//初始化摄像机
renderer = new BasicRenderEngine();//初始化渲染器
}
private function initObjects():void//可以看出是初始化的函数
{
plane = new Plane();//初始化基本图形
scene.addChild( plane );//把基本图形添加进3d场景里
renderer.renderScene( scene, camera, viewport );//开始渲染
}
}
}

完后就能看到一个正方形中间一条斜线,不能动的哦。因为没有加载onenterframe。先学会基本结构比较重要。保存住,下次再给它加上点基本效果。

先仔细看看代码,如果去掉四要素的基本代码,结果就只剰几句plane的引用和声明加载。

PV3D学习记录一(入门知识和环境配置)

2009/02/02 | 作者:小V | 评论 (0)| 分类: Flash

Papervision3D 一个基于ActionScript的开源项目,不用说一看名字就知道是3D辅助类。 挺久没碰flash,之前玩的时候还as2.0,在完全不知情的情况3.0都出来了。想起以前为做好个flash,找不到好素材就会坐着电脑苦画好久,可惜3D max我又玩不透,那时总是每天幻想着能能做3D的多好,就不用这么累了。 其实以前就有as2.0的3d类,只是我根本没去找过,算了现在学还来得及。

第一步当然是下载,google一下,http://code.google.com/p/papervision3d/ 官方好像推荐用svn下载

1. 先下载个TortoiseSVN ,到这里下http://tortoisesvn.net/downloads

pv3d_svn

pv3d_svn

2.装完后,在文件夹或桌面上点一下右键就会有个“SVN Checkout", 打开后把这个网址“http://papervision3d.googlecode.com/svn/”写在Url上(pv3D的svn服务器路径)下面还有一个下载目录,自已定好如:“D:PV3D" ,接着点一下OK,慢慢的等。(svn/是指服务器上的所有文件全部下载,如果怕慢,你也可以"http://papervision3d.googlecode.com/svn/trunk/branches/cs4/src"只下载这个里面的三个文件夹"com"、"fl"、"org" 三个文件夹。)

3. 如果用flex--打开flex,文件菜单,新建一个as项目-“Actionscript projects”。写一下项目名就行了如“Main”。之后,把刚才下载的东西里找到"trunkbranchescs4src"里的三个文件夹"com"、"fl"、"org" ,直接拉到flex项目的目录来。(刚开始的时候,不知道,找到一个1.7的,还以为用的代码怎么不行,问群里的说还用1.7太旧了)

如果是用flash cs3/4的话,就打开菜单里的“编辑”-“首选项”-"as语言"-"as3.0"-“源路径”在新建一条指向“*:下载地址trunkbranchescs4src”的路径就好了。

4. 装完,当然哪有心情去看代码,马上来个找个能动的代码测试一下。

flex  -- 打开Main.as(叫什么名字,主要和项目名或是定义项目第二步的应用程序名有关),加进下面那代码,再ctrl+f11运行一下。就看到结果了。

flash -- 把下面的代码复制保存为"Main.as",再新建一个“Main.fla”,打开Main.fla在属性面板里的编辑类定义里写入"Main"(当然这两个文件(fla和as)要放在同一目录下)ctrl+enter测试一下。

代码如下(我的项目和应用程序名叫Main,自觉改好)

package
{
 import flash.display.Sprite;
 import flash.events.Event;
 import org.papervision3d.cameras.FreeCamera3D;
 import org.papervision3d.materials.ColorMaterial;
 import org.papervision3d.objects.primitives.Plane;
 import org.papervision3d.render.BasicRenderEngine;
 import org.papervision3d.scenes.Scene3D;
 import org.papervision3d.view.Viewport3D;

 public class Main extends Sprite
 {
  private var viewport:Viewport3D;
  private var scene:Scene3D;
  private var camera:FreeCamera3D;
  private var renderer:BasicRenderEngine;
  private var material:ColorMaterial;
  private var plane:Plane;

  public function Main()
  {
   init();
  }

  private function init():void
  {
   initPapervision();
   initMaterials();
   initObjects();
   initListeners();
  }

  private function initPapervision():void
  {
   viewport = new Viewport3D();
   addChild( viewport );
   scene = new Scene3D();
   camera = new FreeCamera3D();
   renderer = new BasicRenderEngine();
  }
  private function initMaterials():void
  {
   material = new ColorMaterial( 0xcc0000 );
  }
  private function initObjects():void
  {
   plane = new Plane( material );
   scene.addChild( plane );
  }
  private function initListeners():void
  {
   addEventListener( Event.ENTER_FRAME, onEnterFrame );
  }
  private function onEnterFrame( e:Event ):void
  {
   plane.yaw( 2 ); // or try plane.rotationY += 2;
   renderer.renderScene( scene, camera, viewport );
  }
  }
  }

总结:主要是学习入门知识,对环境进行配置学会使用别人的类文件。