首先,要有一个类,不管在Flash CS3中还是Flex Builder的ActionScript项目中,都要有一个类做为整个Flash程序的入口。
下面写一个主类,命名为Main,其实什么名都无所谓,但是要记得保持文件名和类名必须一致。另外主类一定要继承自Sprite类。
1. package {
2. import flash.display.Sprite;
3.
4. public class Main extends Sprite
5. {
6. public function Main()
7. {
8.
9. }
10. }
11. }代码解释:Main()函数是Main类的构造函数,就是说当你执行new Main();时,Flash会调用这个函数,原始化Main类的对象(类的实例叫对象)。所以,Main()函数就是整个Flash的入口了,这里面的程序最先被执行,所以可以在这里面放一些原始化PV3D的代码。
下面是一步步原始化PV3D。
首先,PV3D的3D舞台须要一个容器,用来容纳整个3D舞台。这个容器至少是Sprite类型的,因为Sprite是AS3或者说Flash9里,显示对象的最小单位,这也是我们的主类一定要继承自Sprite的原由,因为它须要被显示。
现在定义一个容器变量_container,原始化它并把它加到主类的显示列表里。
package {
import flash.display.Sprite;
public class Main extends Sprite
{
private var _container :Sprite;
public function Main()
{
// 建立 3D舞台的容器
_container = new Sprite();
_container.x = 100;
_container.y = 100;
//将它显示出来
addChild( _container );
}
}
} 有了容器,还须要一个3D舞台。
package {
import flash.display.Sprite;
import org.papervision3d.scenes.MovieScene3D;
public class Main extends Sprite
{
private var _container :Sprite;
private var _scene :MovieScene3D;
public function Main()
{
// 建立 3D舞台的容器
_container = new Sprite();
_container.x = 100;
_container.y = 100;
//将它显示出来
addChild( _container );
// 建立 3D舞台
_scene = new MovieScene3D( _container );
}
}
}然后须要在舞台上放一个摄像头,他代表我们的眼睛,他能看到的就是你看到的。
package {
import flash.display.Sprite;
import org.papervision3d.scenes.MovieScene3D;
import org.papervision3d.cameras.Camera3D;
public class Main extends Sprite
{
private var _container :Sprite;
private var _scene :MovieScene3D;
private var _camera :Camera3D;
public function Main()
{
// 建立 3D舞台的容器
_container = new Sprite();
_container.x = 100;
_container.y = 100;
//将它显示出来
addChild( _container );
// 建立 3D舞台
_scene = new MovieScene3D( _container );
// 建立摄像头
_camera = new Camera3D();
_camera.z = -500;
_camera.zoom = 5;
//把摄像头看到的显示出来
_scene.renderCamera(_camera);
}
}
} 现在还须要有一个3D对象,把它显示出来才算成功 。PV3D的所有3D对象都是继承自displayObject3D,就像Flash里的 Sprite一样它是最小单位。如果学过面向对象编程,你就会知道父类型的变量可以引用子类型的对象。比如MovieClip是Sprite的子类,那下面的代码是成立的:
var temp:Sprite = new MovieClip();
考虑到程序的通用性,显示对象运用 displayObject3D类型,后面原始化时候你可以把它原始化成任意displayObject3D的子类型对象。
光一个3D显示对象还是不够的,它须要有个“皮”,你才能看到它….所以,还须要一个材质贴图(至少须要一个,如果是立方体,就须要六个面的贴图)。PV3D中所有材质贴图的基类是MaterialObject3D。
package {
import flash.display.Sprite;
import org.papervision3d.scenes.MovieScene3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.core.proto.MaterialObject3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.objects.Sphere;
public class Main extends Sprite
{
private var _container :Sprite;
private var _scene :MovieScene3D;
private var _camera :Camera3D;
private var _material:MaterialObject3D;
private var _displayObj:DisplayObject3D;
public function Main()
{
// 建立 3D舞台的容器
_container = new Sprite();
_container.x = 100;
_container.y = 100;
//将它显示出来
addChild( _container );
// 建立 3D舞台
_scene = new MovieScene3D( _container );
// 建立摄像头
_camera = new Camera3D();
_camera.z = -500;
_camera.zoom = 5;
//黑色的线框材质
_material = new WireframeMaterial(0x000000);
//球
_displayObj = new Sphere(_material, 80, 10, 10);
//把显示对象添加到舞台
_scene.addChild(_displayObj);
//把摄像头看到的显示出来
_scene.renderCamera(_camera);
}
}
} 运行起来你应该会看到一个球。
现在要让球动起来,PV3D主要是以帧为单位来控制变化,所以还须要一个要领可以控制到每一帧。AS3中我们只要注册一个 Event.ENTER_FRAME事件的监听程序就可以监听到每一帧开始的时刻。然后,我们可以在我们的监听函数里,做我们须要做的,比如计算,或者让显示对象移动旋转等。
而PV3D要求每次舞台发生变化时都要显式的调用舞台对象的renderCamera,重新制作,否则内容始终是不重绘的。
下面是新的代码,留心 :加了一句调用addEventListener的代码,和一个OnEnterFrame函数。
package {
import flash.display.Sprite;
import org.papervision3d.scenes.MovieScene3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.core.proto.MaterialObject3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.objects.Sphere;
import flash.events.Event;
public class Main extends Sprite
{
private var _container :Sprite;
private var _scene :MovieScene3D;
private var _camera :Camera3D;
private var _material:MaterialObject3D;
private var _displayObj:DisplayObject3D;
public function Main()
{
// 建立 3D舞台的容器
_container = new Sprite();
_container.x = 100;
_container.y = 100;
//将它显示出来
addChild( _container );
// 建立 3D舞台
_scene = new MovieScene3D( _container );
// 建立摄像头
_camera = new Camera3D();
_camera.z = -500;
_camera.zoom = 5;
//黑色的线框材质
_material = new WireframeMaterial(0x000000);
//球
_displayObj = new Sphere(_material, 80, 10, 10);
//把显示对象添加到舞台
_scene.addChild(_displayObj);
//把摄像头看到的显示出来
_scene.renderCamera(_camera);
this.addEventListener(Event.ENTER_FRAME, OnEnterFrame);
}
private function OnEnterFrame(event:Event):void{
//以Y轴为轴旋转
_displayObj.rotationY += 5;
_scene.renderCamera(_camera);
}
}
}现在运行程序就能看到旋转球了。
现在可以开始基本的材质贴图了。其实上面的程序就已用到了线框材质贴图。除了线框材质外,PV3D还支持颜色材质,位图材质等,所有这些材质贴图的类都在org.papervision3d.materials包里。
我们给上面的程序换上一个蓝色的材质贴图看看会是什么样。只要把new WireframeMaterial(0×000000);改成new ColorMaterial(0x0000FF);记得导入 org.papervision3d.materials.ColorMaterial;
再试试位图文件材质,把new ColorMaterial(0x0000FF);改成new BitmapFileMaterial(”texture.jpg”);这里的”texture.jpg”是贴图文件路径,须要根据你的须要配置,记得这个路径是url格式,不是文件系统路径。
效果演示:
读库教程网文章由网络收集后整理发布,文章发布人拥有该内容的所有权力及责任!
如果你喜欢这页,可以按Ctrl+D收藏起来。







