Flash AS3.0教程:Papervision3D应用2——PV3D基本原理

2016-01-29 12:11 14 1 收藏

Flash AS3.0教程:Papervision3D应用2——PV3D基本原理,ision3D(简称PV3D)是一个开源的3D引擎,用它可以比较容易制作出理想的3D效果,目的在于实现更加炫丽美观、功能强大的Flash 3D Web应用程序。本例为Papervision3D入门系列教程,在本课中我们将学习Papervision3D的基本 ...

【 tulaoshi.com - Flash 】

本文由中国 sanbos 编译,转载请保留此信息! 

在学习中遇到问题请到 论坛Flash研讨 发贴交流!


  本系列Flash教程由中国Flash互助课堂专为Flash新手制作,更多教程和练习请点击这里,在这里有系列的教程、练习,并有老师对练习进行点评与指导,欢迎朋友们的光临!


  Papervision3D(简称PV3D)是一个开源的3D引擎,用它可以比较容易制作出理想的3D效果,目的在于实现更加炫丽美观、功能强大的Flash 3D Web应用程序。本例为Papervision3D入门系列教程,在本课中我们将学习Papervision3D的基本原理~~


更多AS 3.0代码教程:
http://www.jcwcn.com/portal-topic-topicid-2.html

  在网上搜了半天,要找到祥细一点的PV3D教程还真不容易,总算找到一篇由John Lindquist 写的Papervision3D: Part 1- Foundation and 3D Object Basics好象还行,我想即然是Part 1那么就应该还有Part 2,3,4,5,我就找啊找,找啊找,结果我终于,没找到.找到了一篇还是这个家伙写的PV3D教程,内容好好象也与Part 1接到的,但在题目中我没看到Part 2字样.好吧,现在我将已翻译出来的部分与大家分享.

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)papervision3D入门教程2:基本原理


每个Papervision3D程序都要依赖于4个类,Viewport3D, Scene3D, Camera3D ,和BasicRenderEngine.

先看一下,下面就是经典的papervision3D程序格式:

package{
import flash.display.Sprite;
import org.papervision3d.cameras.Camera3D;
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:Camera3D;
private var renderer:BasicRenderEngine;

public function Main(){
initPapervision3D();
}

private function initPapervision3D():void{
viewport = new Viewport3D();
addChild(viewport);

scene = new Scene3D();
camera = new Camera3D();
renderer = new BasicRenderEngine();

renderer.renderScene(scene, camera, viewport);
}
}
}


Viewport3D:(3D视窗)

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

Viewport3D就象是papervision3D世界中的一个窗口.窗口允许你看到外面,但他们没提供其它函数.你可以定位一个窗口在墙上,改变它的宽度和高度,同样的道理也存在于Viewport3D上,你可以改变Viewport3D的x,y,width,height.,它的功能就是在它里面放一个3D场景.要使用Viewport3D,创建它并将它放在舞台上.
private var viewport:Viewport3D = new Viewport3D();
addChild(viewport);
查看下面的Viewport3D的省缺参数,你可以根据自已的喜好来调节.
Viewport3D(viewportWidth:Number = 640, viewportHeight:Number = 480,
autoScaleToStage:Boolean = false, interactive:Boolean = false,
autoClipping:Boolean = true, autoCulling:Boolean = true)


Scene3D:(3D场景)

继续使用窗口的比喻,一个Scene3D将包含你通过窗口看到的所有东西.地面,天空及之间的所有东西.然而,这个Scene3D仍然是一个空的3D空间,你不得不添加地面,天空,树等到你的Scene3D.下面创建了一个Scene3D.
private var scene:Scene3D = new Scene3D();


Camera3D(3D照相机)

一个窗口和窗外的世界是漂亮的, 但如果没有一个人来兴赏它们的漂亮则毫无意义.你很幸运,Papervision3D开发者创建了照相机,捕获这一切的动作.一个Camera3D允许你根据你想捕获的动作设置其x,y,z属性.想象一下第一人称的枪和飞行模似器.(一个三维游戏,译者注).你移动你的角色围绕周围的空间调整当前的位置. 同样的主意也可用于Camera3D,你可以在整个场景移动相机调节当前位置.

Papervision3D提供三个照相机来实现不同的功能.

Camera3D:需要一个看着的目标,无论在任何位置都看着这个目标.

FreeCamera3D:在3D空间的每一个角度和方向自由移动.包含的方法如:yaw(), pitch(), and roll()来调节相机的视角,而moveForward(), moveBackward(); moveLeft(), moveRight(), moveUp(), and moveDown() 基于视觉调整相机的位置.例如,你将相机放到一个站立的人面前,然后调用moveBackward(),你将移动并远离人的脸.另一方面,如果你将相机定位到人的头上,调用 pitch()向下倾斜看到人的头发,然后调用moveBackward()方法,你将远离人的头发到天空中去.
FrustumCamera3D:象FreeCamera3D一样的移动,但只能是视窗中提供的对象,你可以调节远距离和近距离.

BasicRenderEngine
在papervision3D世界中你是神.你可以随心所欲地开始和停止引擎.BasicRenderEngine通过你选择的Viewport3D中Camera3D的位置的Scene3D.
private var renderer:BasicRenderEngine = new BasicRenderEngine();
//通常在场景的 Event.ENTER_FRAME 事件中
renderer.renderScene( scene, camera,
viewport );
即使你有多个场景,视窗或照相机,你也只需用一个BasicRenderEngine来渲染3D效果:
//A snippet of multiple scenes, cameras, and viewport handled by one
renderer renderer.renderScene( scene, camera, viewport );
renderer.renderScene( scene2, camera2, viewport2 );

补充一下:

我下载了一个例子,运行时,发现下载的代码中没有FreeCamera3D相机,估计大家下载的代码中都没有,又找不到单独的 FreeCamera3D.as下载,还好我查到了它的原代码,于是我自已做了一个.放上来,大家将它解压到:as3/trunk/src/org /papervision3d/camera文件夹中就可以用了.目录的位置请参看教程1.

FreeCamera3D相机下载:点击下载

对本文感兴趣的朋友请到这里与作者交流:http://bbs.jcwcn.com/viewthread.php?tid=249034

来源:https://www.tulaoshi.com/n/20160129/1485015.html

延伸阅读
标签: FLASH flash教程
poluoluo核心提示:在本AS3.0教程中我们将学习到间隔循环的三种表现方式,希望对朋友们有所帮助. 在本AS3.0教程中我们将学习到间隔循环的三种表现方式,希望对朋友们有所帮助~~ 如果想使动画不依赖于帧频,可使用3种方法: 1、setlnterval()函数 setlnterval()函数作用是每隔一定的时间,就调用函数 setlnterval()函数的形式为: se...
AS3.0 含有多个类的AS3类文件 标准的AS3类文件是以".as"为结尾的纯文本文件。一个类文件可以包含一个或多个类定义,甚至可以直接写入一次性执行的语句。AS3中,在package花括号外,可以定义一个或多个Class,不可与文件同名。这些花括号外的类,称为当前类文件的包外类。只有当前类文件中的成员可以访问。 包外类的产生,每个.as...
标签: 电脑入门
安装操作系统和软件之前,首先需要对硬盘进行分区和格式化,然后才能使用硬盘保存各种信息。对电脑老鸟而言,对这种硬盘分区格式是最熟悉不过了,我们大都是通过这种分区格式认识和踏入电脑门槛的。但是很多小菜鸟对于分区,只是一个陌生的名词,今天就给大家介绍磁盘分区时注意的问题. 我们所使用的电脑中的磁盘一般都分好的,或者有时候重装系...
标签: Java JAVA基础
安装之後,接下来我们要讨论JSP的语法.如果要偷懒,你可以下载语法卡 而如果你不熟悉 Java的程式设计,你可能会想要参考Sun的使用手册;然而,网站建立者不应该做太多的Java发展.除了几个函式呼叫之外,出现在你JSP网页上的Java程式码应该将它减到最少; 记住这点之後,现在让我们先来看看JSP的编译器指引与指令元件,之後我们将解释JavaBeans与...
标签: 摄影
随着电影《阿凡达》的火爆,3D电影和3D照片已经开始逐渐进入了大家的生活。当然,可能大多数朋友都停留在看3D的阶段,有少部分的朋友可能会对拍摄3D照片也产生的浓厚的兴趣,本文就先从原理开始,一步一步地跟各位简单介绍一下3D自己 DIY进行3D拍摄的方方面面。 蓝光《阿凡达》的金属限量珍藏版本 3D感受是怎样在我们大脑里产生的? 人眼...

经验教程

510

收藏

25
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部