`

Papervision3d 分层(ViewportLayer)的概念示范

阅读更多
我们在Papervision3d中有些物体需要分层管理,同时解决了显示物体交叉混乱的问题(新的四叉树相机算法能解决这个问题,但是效率有点低)。下面我们看看示例。
这里我们用了Papervision3d中的复合材质。
http://www.newflash3d.com---flash3D先锋队:北京贝武易科技公司】
有疑问请联系我QQ:363596350

复合材质(CompositeMaterial)的代码:
            var cubeMat:WireframeMaterial = new WireframeMaterial(0xFF0000);
            var colorMat:ColorMaterial = new ColorMaterial(0x00FF00);
            var compMat:CompositeMaterial = new CompositeMaterial();
            compMat.addMaterial(cubeMat);
            compMat.addMaterial(colorMat);
            
            var materialsList:MaterialsList = new MaterialsList({ all:compMat });


这里还用到了一个方法:orbitY
(感谢flab3d.com“flash研究所”)
		///-flab3d.com-18/11/08,绕Y轴旋转的类//////////////////////////////
		///第一个参数是摄像机看着的物体,第二个参数是每祯旋转度数;第三个参数摄像机是离物体的距离,第四个是摄像机的高度

		private var angled:Number=0;

		public function orbitY(do3d:DisplayObject3D=null,angelIncrease:Number=1,distance:int=1000,heightY:Number=0):void {
			this.lookAt(do3d);

			var radius:int=distance;
			angled+=angelIncrease;


			var ss:Number = angled*Math.PI/180;
			//var zz:Number = radius*Math.PI/180;


			this.x = do3d.x + radius * Math.sin(ss);
			this.y=do3d.y+heightY;
			//this.y = do3d.x + radius * Math.cos(zz) * Math.sin(ss);
			this.z = do3d.z + radius * Math.cos(ss);
		}
		/////////////////////////////////////////////

这段代码需要加到我们的Camera3D类,给Camera3D类加一个orbitY的方法,轻松的实现相机的旋转360度,是一个很方便的方法。
效果如下:

这里有个问题是,好像外部导入进去DAE格式文件对这个ViewportLayer的支持不是很好,没有起到作用。
代码如下:
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.filters.BlurFilter;
	import flash.filters.GlowFilter;
	
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.special.CompositeMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.parsers.DAE;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.view.layer.ViewportLayer;
	import org.papervision3d.view.layer.util.ViewportLayerSortMode;

	[SWF(backgroundColor="#000000", frameRate="60", width="500", height="400")]

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

		private var cube:Cube;
		private var plane:Plane;
		
		private var layer1:ViewportLayer;
		private var layer2:ViewportLayer;

		public function viewportLayerTest01():void {

			viewport=new Viewport3D(500,400);
			renderer=new BasicRenderEngine  ;
			scene=new Scene3D;
			camera=new Camera3D(60,10,5000);
			
			viewport.containerSprite.sortMode = ViewportLayerSortMode.Z_SORT;

			addChild(viewport);
			
            var planeMat:WireframeMaterial = new WireframeMaterial(0xFF0000);
            var planecolorMat:ColorMaterial = new ColorMaterial(0xFFFF00);
            var planecompMat:CompositeMaterial = new CompositeMaterial();
            planecompMat.addMaterial(planeMat);
            planecompMat.addMaterial(planecolorMat);
			
			plane=new Plane(planecompMat,500,500,1,1);
			plane.pitch(90);
			plane.y=0;
			
            var cubeMat:WireframeMaterial = new WireframeMaterial(0xFF0000);
            var colorMat:ColorMaterial = new ColorMaterial(0x00FF00);
            var compMat:CompositeMaterial = new CompositeMaterial();
            compMat.addMaterial(cubeMat);
            compMat.addMaterial(colorMat);
            
            var materialsList:MaterialsList = new MaterialsList({ all:compMat });
            
			cube=new Cube(materialsList,200,200,200,1,1,1);
			cube.y=100;
/* 			
			var sphere:DAE = new DAE();
			sphere.load("assets/nishuboy.DAE",null);
			sphere.scale=5;

			scene.addChild(sphere);
 */
			scene.addChild(cube);
			
			scene.addChild(plane);
			
			layer1=viewport.getChildLayer(cube);
		    layer2=viewport.getChildLayer(plane);
			
			var filter1:GlowFilter = new GlowFilter(0xccffff,1,52,52,4,1,false,false);
			var filter2:BlurFilter = new BlurFilter(10,10);
			layer1.filters=[filter1];
			layer2.filters=[filter2];

			addEventListener(Event.ENTER_FRAME,process);
		}
		private function process(evt:Event):void {
			camera.orbitY(plane,1,500,100);

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

	}
}

  • 大小: 61.5 KB
分享到:
评论

相关推荐

    Papervision3D 教程打包下载

    这个教程集合提供了深入学习Papervision3D所需的知识,包括PV3D的基本概念、对象模型、渲染技术以及与Flex框架的集成。 1. **Papervision3D基础**:Papervision3D是Flash平台上的3D引擎,它允许开发者在网页和桌面...

    PaperVision3D

    首先,让我们深入理解PaperVision3D的基本概念。PaperVision3D使用ActionScript 3.0(AS3.0)进行编程,这是一种面向对象的脚本语言,相较于AS2.0,其性能显著提升,内存管理更加高效。通过PaperVision3D,开发者...

    Papervision3D.Essentials

    ### Papervision3D.Essentials - 关键知识点解析 #### 一、Papervision3D概述 - **定义**: Papervision3D是一种强大的实时3D引擎,专为Flash设计。它能够将外部创建的3D模型渲染成Flash内容,无需终端用户下载或...

    Papervision3D Essentials 中文版

    第二章将更深入地探讨3D场景的概念和Papervision3D API的更多特性。 总的来说,Papervision3D Essentials中文版是学习如何在Flash中构建3D应用程序的重要资源,它引导读者逐步了解和掌握这个强大的3D引擎,从下载、...

    Papervision3D-demo.rar_DEMO_Papervision3D demo_Papervision3D mxm

    《Papervision3D演示项目详解:七个实例深度剖析》 Papervision3D是一种基于Adobe Flash Platform的开源3D渲染引擎,它允许开发者在网页上创建复杂的3D场景和交互式应用。该技术的出现极大地拓宽了Flash的潜力,使...

    初识Papervision3D

    Papervision3D的核心概念包括场景、摄像机、光源、材质、几何对象和动画。在3D场景中,几何对象是基本元素,如立方体、球体等,它们可以通过不同的材质赋予不同的外观。摄像机决定了观众从哪个角度观察场景,而光源...

    Papervision3D

    #### 二、Papervision3D基础概念解析 在构建任何Papervision3D项目之前,了解其核心组件是非常重要的。根据原文描述,要使Papervision3D正常运行,需要初始化四个关键组件: 1. **视窗(Viewport)**:视窗可以...

    papervision3D

    Papervision3D是基于Adobe Flash和Flex平台的一个强大的三维(3D)图形渲染引擎。这个技术允许开发者在Web浏览器中创建出丰富的、交互式的3D场景,为用户提供了一种全新的网页体验。该框架利用ActionScript 3.0语言...

    papervision3d_868.swc

    《PaperVision3D SDK在Flex环境中的应用与实践》 PaperVision3D(简称PV3D)是一款基于Adobe Flex和ActionScript 3.0的开源3D图形库,它为Web开发者提供了在Flash Player环境中构建三维图形和交互式应用程序的能力...

    《Papervision3D+Essentials》中文翻译

    - 《Papervision3D+Essentials》中文翻译版:详细介绍了PV3D的基本概念和进阶技巧,是初学者入门的最佳教材。 - PV3D官方文档:提供了API参考和示例代码,有助于深入理解库的功能。 - 开源社区:如GitHub上的PV3D...

    Papervision3D.swc

    Papervision3D_2.0.869.swc

    Papervision3D的API

    本篇文章将深入探讨Papervision3D的API,帮助读者理解并掌握这个工具的核心概念和功能。 一、基本概念 1. **Scene**: 场景是3D世界的基本构造单元,包含了所有的相机、光源、网格和材质。通过Scene对象,你可以...

    papervision3d的swc源码和书籍

    书籍《Papervision3D 2.0 Alpha Great While》是学习Papervision3D的重要参考资料,书中详细介绍了Papervision3D的基本概念、核心API以及实际案例。读者可以从中学习到如何设置3D环境、创建和操纵3D对象、实现复杂的...

    Papervision3D Essentials 中文PDF及书中源码

    《Papervision3D Essentials》是一本深入探讨Papervision3D(PV3D)的权威指南,中文版的出现使得更多中国开发者能够掌握这个强大的三维渲染库。Papervision3D是一个用于Adobe Flex和Flash平台的开源项目,它为Web...

    PV3d Papervision3d API文档+学习笔记+全景案例

    《PV3d Papervision3D API文档与全景案例解析》 Papervision3D(PV3D)是一款强大的开源3D图形引擎,专为Adobe Flash平台设计,支持ActionScript 3.0(AS3),是Flash AS3中实现3D效果的重要工具。在本文中,我们将...

    papervision3d和物理引擎Box2DFlash的一个超酷且好玩的DEMO

    《Papervision3D与Box2DFlash结合的精彩DEMO解析》 在IT行业中,3D图形渲染和物理引擎的应用已经变得越来越普遍,尤其是在游戏开发和互动媒体设计领域。Papervision3D是一个基于Adobe Flash平台的开源3D库,它允许...

    papervision3D学习资料

    本学习资料主要涵盖了Papervision3D的基本概念、使用方法以及实例应用,旨在帮助初学者和有经验的开发人员深入理解这一强大的3D引擎。 1. **Papervision3D基础知识** - **ActionScript 3.0**: Papervision3D是建立...

Global site tag (gtag.js) - Google Analytics