`

Papervision3D with Box2DFlash Hello World(Box2D动力学研究)

阅读更多
Box2D是一套优秀的动力学解算系统,可以与Papervision3D很好的结合。下面我们就用Papervision3D+Box2D来做一个基本的例子:Hello World!
http://www.newflash3d.com---flash3D先锋队:北京贝武易科技公司】
有疑问请联系我QQ:363596350
示例如下:


这个动力学系统跟Wow的思路是一样的,都是植入式的动力学运算,3d的物体只要捆绑着在它的动力学原型就能实现动力学的效果。

下面是源代码,希望对你有用。
package
{
	import Box2D.Collision.Shapes.b2CircleDef;
	import Box2D.Collision.Shapes.b2PolygonDef;
	import Box2D.Collision.b2AABB;
	import Box2D.Common.Math.b2Vec2;
	import Box2D.Dynamics.b2Body;
	import Box2D.Dynamics.b2BodyDef;
	import Box2D.Dynamics.b2World;
 
	import flash.events.Event;
 
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.view.BasicView;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class Box2DFlashWithPapervision3D extends BasicView
	{
		private var WORLD_SCALE:Number = 30;
		private var WIDTH:Number = 640;
		private var HEIGHT:Number = 480;
 
		private var world:b2World;
 
		private var iterations:int = 10;
		private var timeStep:Number = 1.0/30.0;
 
		public function Box2DFlashWithPapervision3D()
		{
			setupPapervision3D();
			createWorld();
			createFloor();
			createShapes();
 
			startRendering();
		}
 
		private function setupPapervision3D():void
		{
			camera.focus = 10;
			camera.zoom = 100;
		}
 
		private function createWorld():void {
			var worldBounds:b2AABB = new b2AABB();
			worldBounds.lowerBound = new b2Vec2( 0, 0 );
			worldBounds.upperBound = new b2Vec2(WIDTH/WORLD_SCALE, HEIGHT/WORLD_SCALE);
 
 			var gravity:b2Vec2 = new b2Vec2(0, 10);
			var sleep:Boolean = true;
 
			world = new b2World(worldBounds, gravity, sleep);
		}
 
		private function createFloor():void
		{
			// Create border of boxes
			var floorShapeDef:b2PolygonDef = new b2PolygonDef();
			var floorBodyDef:b2BodyDef = new b2BodyDef();
			var floor:b2Body;
 
			//bottom shape definition
			floorShapeDef.SetAsBox((WIDTH+40)/WORLD_SCALE/2, 100/WORLD_SCALE);
 
			// Bottom
			floorBodyDef.position = new b2Vec2(WIDTH/WORLD_SCALE/2, (HEIGHT+95)/WORLD_SCALE);
			floor = world.CreateBody(floorBodyDef);
			floor.CreateShape(floorShapeDef);
 
			floor.SetMassFromShapes();
		}
 
		private function createShapes():void
		{
			for (var i:Number = 0; i < 20; i++)
			{
				//radius for physics circle and sphere
				var radius:Number = Math.random() * 50 + 10;
 
				var bodyDef:b2BodyDef = new b2BodyDef();
				//random position toward the top of the stage
				bodyDef.position = new b2Vec2(Math.random() * WIDTH / WORLD_SCALE, Math.random() * 50 /WORLD_SCALE);
 
				var body:b2Body = world.CreateBody(bodyDef);
 
				var shapeDef:b2CircleDef = new b2CircleDef();
				shapeDef.radius = radius/WORLD_SCALE;
				shapeDef.density = 1;
				shapeDef.friction = .7;
				shapeDef.restitution = .7;
				body.CreateShape(shapeDef);
				body.SetMassFromShapes();
 
				var sphere:Sphere = new Sphere(null, radius);
 
				scene.addChild(sphere);
				body.m_userData = sphere;
			}
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			world.Step(timeStep, iterations);
 
			//sets the position of any DisplayObject3D to the body position
			for (var bb:b2Body = world.m_bodyList; bb; bb = bb.m_next)
			{
                if (bb.m_userData is DisplayObject3D)
                {
                        bb.m_userData.x = bb.GetPosition().x * WORLD_SCALE - WIDTH * .5;
                        bb.m_userData.y = -bb.GetPosition().y * WORLD_SCALE + HEIGHT * .5;
                        bb.m_userData.rotationZ = -bb.GetAngle() * (180/Math.PI);
                }
			}
			renderer.renderScene(scene, camera, viewport);
		}
	}
}
  • 大小: 111 KB
分享到:
评论

相关推荐

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

    通过研究源码,学习者可以深入理解Papervision3D和Box2DFlash的集成方法,以及如何在实际项目中应用这些技术。对于想要提升Flash平台上3D和物理效果的开发者而言,这是一个极好的学习案例。 总的来说,Papervision...

    papervision3D与Box2D结合应用实例

    《Papervision3D与Box2D结合应用实例解析》 在三维Web开发领域,Papervision3D和Box2D是两个备受瞩目的库。Papervision3D是一个强大的ActionScript 3.0框架,用于构建富有交互性的3D场景,而Box2D则是一个物理引擎...

    Papervision3D-demo.rar_DEMO_Papervision3D demo_Papervision3D mxm

    通过研究这些源码,开发者不仅可以掌握Papervision3D的基本用法,还能了解到如何将3D元素与2D界面融合,创建出富有层次感的Web应用。此外,对于想要深入了解3D图形编程的人来说,这些实例也是深入研究Papervision3D...

    Papervision3D 教程打包下载

    2. **3D对象和场景**:在Papervision3D中,3D对象是由多个基本形状(如立方体、球体、平面等)构建的,这些形状可以通过组合和变换形成复杂的几何结构。场景(Scene)是所有3D对象的容器,可以包含多个层次(Layers...

    Papervision3D.Essentials

    - **案例研究**: 通过具体案例分析Papervision3D在实际项目中的应用技巧和注意事项。 综上所述,《Papervision3D.Essentials》不仅是一本入门指南,更是一部详尽的技术手册,旨在帮助读者克服在使用Papervision3D...

    PaperVision3D

    尽管如此,PaperVision3D仍然是Flash 3D历史上的一个重要组成部分,对于想要研究早期Web 3D技术的开发者来说,它仍具有很高的学习价值。 总之,PaperVision3D是Flash平台上3D编程的重要工具,它以AS3.0为基础,通过...

    papervision3d_868.swc

    2. 3D对象:PV3D的核心包括3D对象(如Box、Sphere、Plane等)和摄像机。开发者可以创建这些对象,为其添加纹理,调整位置、旋转和缩放,从而构建复杂的3D场景。 3. 光照与材质:PV3D提供了多种光照模型(如点光源、...

    Papervision3D

    Papervision3D是一个基于ActionScript 3.0的开源框架,专为在Adobe Flash环境中构建三维(3D)图形和应用而设计。这个框架的出现极大地扩展了Flash平台的功能,使得开发者能够利用Flash Player在网页上创建复杂的3D...

    初识Papervision3D

    《初识Papervision3D》 在深入探讨Papervision3D之前,我们首先需要理解3D技术在Web开发中的应用。随着互联网技术的快速发展,网页体验已不再局限于二维平面,用户对交互性和视觉效果的需求日益增长。Papervision3D...

    Papervision3D的API

    《Papervision3D API详解》 Papervision3D(PV3D)是Flash平台上的一款强大的3D图形库,它允许开发者在网页上创建丰富的、交互式的三维图形和应用程序。本篇文章将深入探讨Papervision3D的API,帮助读者理解并掌握...

    《Papervision3D+Essentials》中文翻译

    - **物理引擎(Physics Engine)**:如Papervision3D中的Box2D集成,实现真实感的物理行为。 - **粒子系统(Particle System)**:创建烟雾、火焰、雨滴等动态效果。 - **交互性(Interactivity)**:处理用户...

    papervision3D

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

    Papervision3D Essentials source code2

    《Papervision3D Essentials source code2》是一份重要的资源,包含了Papervision3D库的应用实例代码,这个库是Flash平台上一个著名的3D图形处理框架。Papervision3D允许开发者在Adobe Flash Player环境中创建复杂的...

    papervision3D学习资料

    2. **Papervision3D核心组件** - **Display Objects**: 这些是构成3D场景的基本元素,如几何体(Box, Sphere, Plane等)、纹理、光源等。 - **Material and Textures**: 材质(Material)定义了物体表面的视觉特性...

    Papervision3D.swc

    Papervision3D_2.0.869.swc

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

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

Global site tag (gtag.js) - Google Analytics