pv3d学习笔记一

flash3d,现在有很多实用flash技术来实现3d效果的引擎,有些引擎的效果在某些方面甚至可以和专业3d软件做出的效果相媲美。本人出于好奇学习了其中的一款。

papervision3d也就是pv3d,不过可惜的是,该引擎似乎很久没有更新了。

废话不多说,我们来开始学习。

首先,从google代码中下载相关的版本,我这里下载的是最新版本。

http://code.google.com/p/papervision3d/

下载完成后,开始搭建环境,我这里使用的是flexbuilder4.5版本。具体为

新建一个flex库项目。

 

完成后将下载下来的pv3d源码拷贝大项目的对应目录中。

编译完成后,会形成pv3d.swc以后我们可以仅仅引入这个文件作为资源就可以进行开发了。下面让我们首先开始我们第一个helloworld

1.创建一个actionscript项目。

2.在项目上右键属性,选择资源,引入刚刚创建的库项目作为资源。

3.我们就可以在我们的入口文件中编辑第一个flash3d程序了,具体代码如下:

package
{
	/*镜头默认放置在0,0,-1000的位置,不同于2d场景,其中心坐标位于屏幕中间
	object3d注意3d坐标
	plane平面,pv3d中使用2个直角三角形粘起来的。注意所有内容需要放到场景中才能显示。
	
	pv3d令人兴奋的一点是,可以将collada文件通过DAE类加载。即,我们可以通过自己的3d建模工具将模型导出为collada文件即可。
	 * */
	import flash.display.Sprite;
	
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.view.Viewport3D;
	
	public class helloworld3d extends Sprite
	{
		//定义显示窗口
		private var viewport:Viewport3D;
//		定义场景
		private var scene:Scene3D;
		//定义摄像机
		private var camera:Camera3D;
		//定义生成引擎
		private var renderer:BasicRenderEngine;
		
		public function helloworld3d()
		{
			initPaperVision3D();
		}
		//初始化方法
		private function initPaperVision3D():void
		{
			viewport = new Viewport3D();
			
			addChild(viewport);//添加到显示窗口中
			scene = new Scene3D();
			
			scene.addChild(getSphere());
						
			camera = new Camera3D();
			renderer = new BasicRenderEngine();
			//渲染场景
			renderer.renderScene(scene,camera,viewport);
			
		}
				
		//球体练习
		private function getSphere():org.papervision3d.objects.DisplayObject3D
		{
			//参数分别为:1.材质2.半径3.宽度分段4.高度分段5.
			var sp:Sphere = new Sphere(new WireframeMaterial(0xFF0000),200,20,15);
			sp.material.fillColor=0xFF0000;
						
			return sp;
		}
	}
}

运行程序后,我们即可在页面中见到我们的第一个3d球体。效果如下:

下面来说明一下上面程序:

1.对于pv3d来说有4个元素时必不可少的,

    Viewport:我们可以理解为窗口或者视图,相当于我们通过这个视图去看场景里面的物体,它必须加到当前容器中,所以我们的例子才要求必须继承Sprite类

   scene:场景,用于绘制和构建物体的空间,注意所有的物体必须在场景中绘制才能够被看到。

  camera:摄像机,可以理解为摄像机为我们抓取不同角度的图像,显示在窗口中供我们观看。需要说明的是,摄像机的默认位置为0,0,-1000(屏幕向里为负)

  renderer:构建引擎,用于真正构建物体,在使用引擎构建之前,所有的物体还仅仅是一堆的数据,只有通过引擎构建之后才能呈现出来。很多时候我们看不到想要的图像就是由于我们没有进行构建。

2.对于上面对象的在构建时的参数意义,大家可以去查看源码,相信英文好的同学,一眼就能够看出其实际意义。

3.对于构建3d物体来说,我们这里是构建的球形,segments(段),需要特别说明下,一般来说,段值设置的越大图像构建的越精细逼真,相对的资源消耗也会越多。所以在实际开发中还需要根据实际情况取舍。

4.最后对于pv3d的成像原理,本人也仅仅是知道它使用的是画家算法来实现,每个部分都是使用的一个三角形。通过绘制三角形来实现具体的物体构建。至于细节有兴趣的可以自己研究一下,本人也希望大神能够不吝赐教。

 

后面会把项目代码和pv3d包放到资源中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值