要使用PV3D,其中有四个元素少不了,Scene3D, Viewport3D, Camera3D , BasicRenderEngine,以下是官方文档的介绍和本人拙劣的翻译。
Scene3D:
Package org.papervision3d.scenes
Class public class Scene3D
Inheritance Scene3D SceneObject3D DisplayObjectContainer3D flash.events.EventDispatcher
The Scene3D class lets you create a scene where all objects are rendered in the same container.
A scene is the place where objects are placed, it contains the 3D environment.
一个Scene3D实例是这个3D场景中所有物体的容器,它包括了整个3D场景,Scene3D这个类让所有创建在其中的3D物体得到渲染。
简单的说,Scene3D就是包含所有3D场景中物体的容器,物体要显示,该物体或它的父类首先要加入到Scene3D的实例中。注意,虽然要显示的物体都要加入到Scene3D的实例中,但它并不是一个显示对象,也就是说它并不直接显示物体.而真正显示物体的是Viewport3D,接着看下一个:
Viewport3D:
Package org.papervision3d.view
Class public class Viewport3D
Inheritance Viewport3D flash.display.Sprite
Implements IViewport3D
Subclasses BitmapViewport3D
Viewport3D,viewport是视口的意思,我们可以理解为显示物体的一个窗口或矩形显示区域,它继承自Sprite,所以说它可以直接被加入到显示列表中,我们PV3D中所看到的物体就是通过Viewport3D呈现的。同时它还实现了IViewport3D接口。
构造函数
Viewport3D (viewportWidth:Number = 640, viewportHeight:Number = 480, autoScaleToStage:Boolean = false, interactive:Boolean = false, autoClipping:Boolean = true, autoCulling:Boolean = true)
viewportWidth:Number (default = 640) — Width of the viewport
视口宽度
viewportHeight:Number (default = 480) — Height of the viewport
视口高度
autoScaleToStage:Boolean (default = false) — Determines whether the viewport should resize when the stage resizes
是否随舞台大小改变而调整视口大小
interactive:Boolean (default = false) — Determines whether the viewport should listen for Mouse events by creating an InteractiveSceneManager
是否接受交互,需要接受交互事件时需将其设为true
autoClipping:Boolean (default = true) — Determines whether DisplayObject3Ds outside the rectangle of the viewport should be rendered
是否不渲染视口外的物体,true不渲染,false渲染,没特殊要求默认设为true,提高效率
autoCulling:Boolean (default = true) — Detemines whether only the objects in front of the camera should be rendered. In other words, if a triangle is hidden by another triangle from the camera, it will not be rendered.
被遮挡的物体是否不渲染,true不渲染,false渲染,没特殊要求默认设为true,提高效率
再然后是Camera3D:
Camera3D:
Package org.papervision3d.cameras
Class public class Camera3D
Inheritance Camera3D CameraObject3D DisplayObject3D DisplayObjectContainer3D flash.events.EventDispatcher
Subclasses DebugCamera3D, SpringCamera3D
Camera3D is the basic camera used by Papervision3D
Camera3D是PV3D中基本的摄像机。
我们可以把它理解为一个3D空间中的摄像机的镜头,我们在Viewport3D中所看到的东西就是这个镜头中所拍到的,当然我们就可以通过改变这个镜头的位置,角度,焦距等属性,来显示不同的场景或做镜头移动的动画。
构造函数
Camera3D(fov:Number = 60, near:Number = 10, far:Number = 5000, useCulling:Boolean = false, useProjection:Boolean = false)
fov:Number (default = 60) — This value is the vertical Field Of View (FOV) in degrees.
镜头视角的垂直角度
最后来看BasicRenderEngine:
BasicRenderEngine:
Package org.papervision3d.render
Class public class BasicRenderEngine
Inheritance BasicRenderEngine AbstractRenderEngine flash.events.EventDispatcher
Implements IRenderEngine
Subclasses LazyRenderEngine, QuadrantRenderEngine
BasicRenderEngine links Viewport3Ds, Scene3D, and Camera3Ds together by gathering in all of their data, rendering the data, then calling the necessary functions to update from the rendered data
BasicRenderEngine翻译为基础渲染引擎,它有将Viewport3Ds, Scene3D 和 Camera3Ds整合在一起协同工作的功能,形象的说,就是它通过镜头的位置角度等属性,读取Scene3D中需要渲染的物体的信息,通过计算(即渲染)后得到得数据提交给Viewport3D呈现出来。
这里我们先学习它的一个最常用的方法
renderScene(scene:SceneObject3D, camera:CameraObject3D, viewPort:Viewport3D):RenderStatistics
scene:SceneObject3D — The CameraObject3D looking at the scene
需要渲染的场景
camera:CameraObject3D — The Scene3D holding the DisplayObject3D’s you want rendered
镜头
viewPort:Viewport3D — The Viewport3D that will display your scene
呈现渲染结果的视口(显示区域)
RenderStatistics — RenderStatistics The RenderStatistics objectholds all the data from the last render
渲染返回结果
注意下Viewport3D和BasicRenderEngine的destroy()方法,内存没被回收的根源也许就在这里
介绍完了这些,我们先来看一段代码
首先我们在setupPV3D()中初始化了四个基本元素,接着在setupShere()中向scene添加了一个球体,最后用addEventListener(Event.ENTER_FRAME, onRenderLoop)添加一个逐帧的监听,在侦听器中每帧将球体的rotationY增加2以达到旋转的效果并且每帧进行渲染_renderer.renderScene(_scene, _camera, _viewport)。
package cn.antscript.HelloWorld
{
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
[SWF(width = "640", height = "480", backgroundColor = "#000000", frameRate = "30")]
public class Main extends Sprite
{
private var _scene:Scene3D;
private var _viewport:Viewport3D;
private var _camera:Camera3D;
private var _renderer:BasicRenderEngine;
private var _sphere:Sphere;
public function Main():void
{
init();
}
private function init(e:Event = null):void
{
setupPV3D();
setupShere();
addEventListener(Event.ENTER_FRAME, onRenderLoop);
}
//setup PV3D method
private function setupPV3D():void
{
_scene = new Scene3D();
_viewport = new Viewport3D();
addChild(_viewport);
_camera = new Camera3D();
_renderer = new BasicRenderEngine();
}
//setup shere
private function setupShere():void
{
_sphere = new Sphere(new WireframeMaterial());
_scene.addChild(_sphere);
}
//renderer every frame
private function onRenderLoop(e:Event):void
{
_sphere.rotationY += 2;
_renderer.renderScene(_scene, _camera, _viewport);
}
}
}
效果
看完了上面的代码,试着动手创造一个自己的3D世界吧,再看一下文档(官方在线的点这里),试着修改下各种参数试试效果,举一反三,有助于你更牢固的掌握相关知识。
分享到:
相关推荐
"papervision3d.rar"可能包含的是PV3D的基础教程、示例项目以及更全面的API文档。通过这些资源,开发者可以系统地学习PV3D的架构和工作原理,理解如何构建复杂的3D场景和交互。 全景案例,如"Ball360.zip",是PV3D...
这个教程集合提供了深入学习Papervision3D所需的知识,包括PV3D的基本概念、对象模型、渲染技术以及与Flex框架的集成。 1. **Papervision3D基础**:Papervision3D是Flash平台上的3D引擎,它允许开发者在网页和桌面...
《Papervision3D+Essentials》是一本专注于Papervision3D技术的权威指南,对于深入了解和掌握这个强大的3D图形库至关重要。Papervision3D(简称PV3D)是Flash平台上最早的3D渲染引擎之一,它为开发者提供了在Web...
3. PV3D库:`papervision3d_868.swc`是PV3D的一个版本,其中包含了所有必要的3D组件和类。这个库文件可以直接在Flex项目中引用,为3D应用开发提供基础。 三、PV3D基本结构 1. Stage3D:PV3D利用Flash Player 11...
此标题表明了文档是关于Papervision 3D的一个版本介绍,即2.0 Alpha Great While版本。Papervision 3D是一款基于ActionScript 3.0的开源3D框架,它允许开发者在Adobe Flash平台上创建复杂的3D图形和动画。 #### ...
1. **PV3D基础**:首先,你需要了解PV3D的基本架构,包括渲染器、摄像机、场景、对象和材质等基本元素。PV3D使用ActionScript 3作为编程语言,因此熟悉AS3语法是必要的。 2. **3D坐标系统**:PV3D使用右手坐标系统...
1. **Papervision3D基础知识** - **渲染引擎**:Papervision3D是一个强大的3D渲染引擎,它利用ActionScript 3.0进行编程,为Flash Player提供了实时3D渲染能力。 - **核心组件**:包括Camera、Scene、Scene3D、...
### Papervision3D.Essentials - 关键知识点解析 #### 一、Papervision3D概述 - **定义**: Papervision3D是一种强大的实时3D引擎,专为Flash设计。它能够将外部创建的3D模型渲染成Flash内容,无需终端用户下载或...
原文推荐了一个名为“pv3d傻瓜包”的资源包,这个包包含了Papervision3D的核心库文件和其他辅助工具。 2. **创建项目**:在Flash CS3或CS4中新建一个FLA文件,并将其命名为`test01.fla`。设置文件属性如下:帧频30...
关于文件名列表中的"PaperVision3D",这可能是一个包含完整示例代码、文档或者教程的资源包。通常,这样的资源会帮助开发者快速上手,了解如何初始化场景、加载模型、设置动画以及处理用户交互等。开发者可以通过...
### PaperVision3D基础知识与建模技术解析 #### 基础概念介绍 PaperVision3D(PV3D)是一款强大的3D图形引擎,专为Adobe Flash平台设计,旨在简化三维场景的创建与渲染。PV3D的核心在于其对3D场景、相机、渲染引擎...
《Papervision3D精髓》一书是针对初学者及有一定基础的开发者设计的,旨在教授如何使用Papervision3D(PV3D)创建具有惊人效果和强大动画功能的交互式3D应用程序。PV3D是一种开源的3D引擎,用于Adobe Flash平台,它...
Papervision3D(PV3D)是Flash平台上的一款强大的3D图形库,它允许开发者在网页上创建丰富的、交互式的三维图形和应用程序。本篇文章将深入探讨Papervision3D的API,帮助读者理解并掌握这个工具的核心概念和功能。 ...
描述中的“FLASH,FLEX最新PV3D帮助文档”意味着这个压缩包包含的是Papervision3D的最新版官方文档。这份文档可能是开发者学习和理解Papervision3D的关键资源,提供了详细的API参考、教程和示例代码,帮助开发者快速...
Papervision3D(简称PV3D)是一个强大的开源库,它为Adobe Flash平台提供了先进的3D图形渲染能力。在Flash3D的世界里,Papervision3D_1_5是一个里程碑式的版本,它使得Flash不再仅仅是一个2D动画工具,而是能够处理...
1. **Papervision3D基础知识** - **ActionScript 3.0**: Papervision3D是建立在ActionScript 3.0语言基础上的,它是Flash Player和Air平台的主要编程语言。熟悉AS3的基本语法和面向对象编程是学习Papervision3D的...
《Papervision3D Essentials》是一本深入探讨Papervision3D(PV3D)的权威指南,中文版的出现使得更多中国开发者能够掌握这个强大的三维渲染库。Papervision3D是一个用于Adobe Flex和Flash平台的开源项目,它为Web...