Papervision3D基本原理

Papervision3D

PV3D是一个开源的遵循MIT协议的使用AS3代码写成的3D引擎。这篇文章旨在教会各位如何使用PV3D完成一个HELLOWORD式的3D程序,同时也是这篇教程的最近更新。PV3D2.0 Alpha(也称GW)对于初学者来说使用PV3D最大的障碍在于如何安装PV3D,由于对版本控制软件不熟是造成无法完成PV3D安装的主要原因,第一部分的三节阐述了这个问题,但是不是这篇文章的主要内容,如果你对版本控制软件不熟悉的话,那么你可以看看这部分。

【笔者注:】安装PV3D完全没有必要使用版本控制软件,PV3D说白了就是一个FLEX的库,如果你知道如何在FLEX中使用和导入库,那么你完全没有必要使用版本控制软件,笔者的做法是到GOOGLE CODE网站去下载一个ZIP包,软后解压缩到一个文件夹,将该文件夹包含在我的项目的库目录中就可以了,至于说更新,那么重新下载一个就搞定了。

再者版本控制软件的使用教程,网上多如牛毛,我在这里也就不再累述了。第一节的三个部分都不做翻译,在译文中直接略去,望大家谅解

省略PV3D安装部分。

Papervision3D at the following link then skip to the “Foundation of Papervision3D” section:

·   Revision 435: /trunk/branches/GreatWhite/src

If you don’t know what to do with that link, then continue on reading the links in the first three sections.

Download

First, you need to download Papervision3D using subversion. Follow the instructions at either of these sites:

·   How Can I Download Papervision3D?

·   Downloading Papervision3D Alpha Great White

Classpath类路径

:为PV3D设置一个源代码文件夹

·   如果使用的是Flash:

·   关于如何设置和修改源文件路径

·   如果使用的是FLEX:

·   准备一个PV3D的项目

Document Class文件类

Create a document class to hold the required ActionScript:创建一个源文件

·    如果使用的是Flash:

·   使用AS3.0创建一个新的文档类

·   Using Flex: 如果使用的是FLEX:

·   创建一个新的AS工程

·   使用FLASHDEVELOP 集成环境

·   创建一个PV3D项目

Foundation of Papervision3D PV3D基础

.我尽量使得代码看起来简单以适应那些新上手AS3.0的用户,但是我还是要假定你们知道类的基础,如何写方法,如何实例化对象等等,如果还不懂得这些的话,那么你可以参看OREILY的AS3.0编程基础一书,对你非常有帮助,当我实例化对象的时候,我同时还假定了你自己会去导入那些我遗漏的包。

每个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视窗)

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

转载于:https://www.cnblogs.com/mfryf/archive/2012/02/12/2348110.html

Flash 显示全景图相关推荐

  1. 全景图的获取以及HTML页面显示全景图

    目录 前言 1. 使用全景相机拍摄 2.手机app拍摄 3.使用爬虫爬取 二.全景图显示 总结 前言 随着前端技术的不断发展,图像的展示越来越重要,本文就介绍了全景图获取与显示的基础内容. 一.全景图 ...

  2. word文档转换成swf格式文件在网页中用flash显示

    word文档转换成swf格式文件在网页中用flash显示 在OA系统中我们常常需要将上传的word文档在网页中阅览,一般上传后的文档用html的形式查看是会导致排版混乱的,这次我介绍在ASP.NET中 ...

  3. asp.net网页上嵌入Flash显示

    网页上显示Flash,功能实现: 文件格式:.wmv;大小:19,530KB;长度:00:27:39:还包含JavaScript与用户控件等文件. 下载地址:http://download.cnblo ...

  4. js调用百度API显示全景图

    <button class="btn light-btn" οnclick="liveAction()">实景</button>< ...

  5. STEMWIN开发记录指南—-从外部flash显示图片

    最近想使用emwin用于stm32的GUI界面开发.现在记录一些遇到的问题,以及一些解决.未解决的方法. 不定期更新汇总. 目前开发平台正点原子的STM32F103ZET6,野火的STM32F429 ...

  6. java flash截图_求大神们帮助, 如何在java中实现文字数据转换成图片或flash显示

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 protected void doGet(HttpServletRequest request, HttpServletResponse response ...

  7. MVC使用Flash来显示图片

    Insus.NET实现一些网站模版,如用户能动态变更网站的头,中间或是脚的部位,就是不太确定用户上传的是图片,还是Flash.因此想到一个较好的解决方法,就是使用Flash的组件去显示来源的图片或是. ...

  8. 解决UBUNTU FLASH下显示中文为口的办法

    今天把FLASH的包装上去了可以土豆的视频了啊.但是好多的地方还是显示是口口字的啊于是今天的任务就是让FLASh显示中文的啊 于是上google 一下找到了不少的办法但是都不会用 后来看一下书 用vi ...

  9. 地图实景php,全景图展现 - 百度地图开发文档 - php中文网手册

    概述 百度全景地图提供沿着全景覆盖城市指定道路.指定位置点360度的全景视图,相比二维地图全景图更加真实.直观. 全景地图API目前覆盖的城市与百度地图(map.baidu.com)完全相同,且保持跟 ...

  10. [转]优化Flash性能

    原文:http://www.adobe.com/devnet/flash/articles/optimizing-flash-performance.html 翻译:http://bbs.9ria.c ...

最新文章

  1. 算法提高课-图论-差分约束- AcWing 1169. 糖果:spfa求单源最短路、差分约束
  2. ld3320语音识别模块工作原理_风冷模块热泵机组的工作原理与施工安装教程
  3. MySQL语法解析和预处理(Parser Preprocessor)
  4. PHP二维码在线制作生成系统源码 无需数据库 带logo图标
  5. 嵌入式Linux系统编程学习之十七计时器与信号
  6. ASP.NET AJAX1.0尝鲜试用:Web Service调用
  7. java.lang.instrument 中的premain 实现类的个性化加载(附源代码)
  8. Java过滤emoji表情,找出emoji的unicode范围。
  9. 分别采用线性LDA、k-means和SVM算法对鸢尾花数据集和月亮数据集进行二分类可视化分析
  10. megacli通过盘符定位物理盘_Megaraid 磁盘定位
  11. 雷达相关书籍学习顺序推荐
  12. 面对疫情,大学生如何保持良好的心理状态
  13. 桶装水同城预订下单送水小程序开发制作(水站桶装水配送系统)
  14. 【观察】四川产业转型“加速跑”,鲲鹏生态助推“新升级”
  15. 不会JS逆向还说自己是爬虫人?从负(负基础)开是逆向JS有道翻译
  16. Comparator.comparing的使用
  17. antd DatePicker 组件 月份和星期显示英文
  18. 购买商品复选框全选 单选
  19. 2014年1~3月中国移动游戏市场状况
  20. Java入门之窗口关闭,巨巨巨详细!!!

热门文章

  1. 对携程处理结果表示满意
  2. 一个CPU核可以设计为两个以上的线程
  3. DeepStream不支持多 RTSP源(多个摄像头)
  4. A 1049 Counting Ones (30分)
  5. ODBC数据源中枚举数据源名称以及可简单判断数据库类型
  6. linux git 免密、设置用户用密码
  7. C++ lock 加锁,解锁
  8. C++ OpenCV 学习笔记【0】- 未整理,草稿记录用
  9. C# OpenFileDialog 打开文件对话框 打开多文件对话框; 并获取其路径,文件名,扩展名/后缀名
  10. xcode连接iphone调试_电脑操作手机?iPhone,安卓通吃?手机还能这么玩!