打印

[编程] Papervision3d

Papervision3d又一个AS2的3D开源引擎(现在处于beta阶段).和Sandy相比,更加简洁,使用起来也很简单.速度也很快,如果改成AS3的话,应该会非常快.
具体见:
http://www.papervision3d.org
http://blog.papervision3d.org
如果打不开网站,请点击下面的网址:
代理地址
例子:
复制内容到剪贴板
代码:
/**
*使用MTASC编译,命令如下
* @mtasc -swf helloPlaneWorld.swf -main -cp src -header 600:500:40 HelloPlaneWorld.as -version 8
*/
import flash.display.BitmapData;
import org.papervision3d.*;
import org.papervision3d.objects.Plane;
class HelloPlaneWorld {
    // _______________________________________________________________________
    //                                                                  vars3D
    private static var canvas    :MovieClip;//最终显示的地方.
    private static var scene     :Papervision3D;
    private static var camera    :Camera3D;
    private static var app : HelloPlaneWorld;
    private function HelloPlaneWorld(){
        init3D();
    // _______________________________________________________________________
    //                                             循环
        _root.onEnterFrame =function()
         {
             var camera:Camera3D=HelloPlaneWorld.camera;
             var scene:Papervision3D=HelloPlaneWorld.scene;
             var canvas:MovieClip=HelloPlaneWorld.canvas;
            camera.x = -canvas._xmouse;
            camera.y = -canvas._ymouse;
             // Render
            scene.renderCamera( camera );
        }
    }
    // _______________________________________________________________________
    //                                                                  初始化
    private function init3D()
    {
        // Create canvas movieclip and center it
        canvas = _root.createEmptyMovieClip( "canvas", _root.getNextHighestDepth() );
        canvas._x = 320;
        canvas._y = 240;
        // Create scene
        scene = new Papervision3D( canvas );
        // Create camera
        camera = new Camera3D();
        // Create material
        var texture  :BitmapData =new BitmapData(400,400,false,0x00ff00);
        var material :Material3D = new Material3D( texture );
        material.oneSide = false; // Make it double sided
        // Create Planes x50
        var radius:Number = 2500;
        for( var i:Number = 0; i < 50; i++ )
        {
            var plane :Plane = new Plane( material );
            // Randomize position
            plane.x = Math.random() * radius - radius/2;
            plane.y = Math.random() * radius - radius/2;
            plane.z = Math.random() * radius - radius/2;
            // Randomize rotation
            plane.rotationX = Math.random() * 360;
            plane.rotationY = Math.random() * 360;
            plane.rotationZ = Math.random() * 360;
            // Include in scene
            scene.push( plane );
        }
    }                                                               
    static function main() {
        app = new HelloPlaneWorld();
    }
}
[ 本帖最后由 haxe 于 2006-12-3 00:27 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
本帖最近评分记录
  • KingdaSun 威望 +1 好的资源推荐 2006-12-3 11:24
非常不错,要是可以旋转360度就更加完美了啊!
当然可以了.
那个只是一个很简单的例子.

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
我用了两个小时把它改成AS3,速度的确快了很多,CPU消耗明显减少了.
源文件在最下面.
还有两个类没改(Collada,XML2Object),那个是处理XML,改起来很简单,我不想改了
我觉得它这里面有个问题,它使用的Object太多,不太好.Object处理起来比较慢(至少AS3里是这样).
比如:
它里面用到UV坐标时,经常这样写:
复制内容到剪贴板
代码:
{ x: textureW * (a[u] - minX) / sizeX, y: textureH * (a[v] - minY) / sizeY }
我觉得不如这样:
复制内容到剪贴板
代码:
new Point(textureW * (a[u] - minX) / sizeX,textureH * (a[v] - minY) / sizeY);
或者干脆写一个类UVCoord
给一个AS3的例子:
基本和AS2的一样,只有一些语法差异.
复制内容到剪贴板
代码:
package {
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.*;
import org.papervision3d.objects.*;
[SWF (backgroundColor = '0', frameRate = '60', width = '600', height = '600')]
public class HelloAseWorld extends Sprite {
    // _______________________________________________________________________
    //                                                                  vars3D
    private  var canvas    :Sprite;
    private  var scene     :Papervision3D;
    private  var camera    :Camera3D;
    private  var sphere     :Ase;
    [Embed(source='wish.jpg')] public var Image:Class ;
    public function HelloAseWorld(){
        init3D();
        this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
    }
    private function onEnterFrame(event:Event):void
    {
        sphere.scaleX=sphere.scaleY=sphere.scaleZ=150;
        sphere.rotationX  = -canvas.mouseX*5;
        sphere.rotationY  = -canvas.mouseY*5;
        // Render
        scene.renderCamera( camera );
    }
    // _______________________________________________________________________
    //                                                                  Init3D
    private function init3D():void
    {
        // Create canvas movieclip and center it
        canvas = new Sprite();
        addChild(canvas);
        canvas.x = 320;
        canvas.y = 240;
        // Create scene
        scene = new Papervision3D( canvas );
        // Create camera
        camera = new Camera3D();
        // Create material
        var texture  :BitmapData =new Image().bitmapData;
        var material :Material3D = new Material3D( texture );
        material.oneSide = false; // Make it double sided
        // Load sphere
        sphere = new Ase( material, "world.ase" );
        sphere.rotationX = 45;
        // Include in scene
        scene.push( sphere );
    }
   }
}
[ 本帖最后由 haxe 于 2006-12-3 10:28 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

Good。

像这些引擎不论是现在,还是将来的Apollo时代都会有用武之地的。
建议Haxe收集完之后,写一个评论,比较一下这些引擎的不同之处
黑羽翔天◎足下八邦
欢迎来我的博客 :)
www.kingda.org  (AS3教程)

TOP

做了一点点的改进.添加了一个类UVCoord,方便控制UV坐标.
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

昨天把我写的AS3版发到Papervision3d的邮件列表上,作者看了以后,又添加了一些东西.
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

还没看,不过能不能自己来开发一套类库
www.zhaohongri.com

TOP

引用:
原帖由 haxe 于 2006-12-3 00:35 发表
看这个:
http://www.noventaynueve.com/lab/rhino/
这头牛差点搞死我浏览器````

TOP

楼主我想问下,原文件里面的ASE格式的文件是什么啊?不懂了,第一次看到ASE格式的,网上也没查到详细说明,楼主能给解释下吗?
个人主页http://www.jskx.net

TOP

3D现在还不够成熟,能做的东西很有限,主要原因是没有硬件上的支持,光靠cpu跑,不太现实,只能做demo
www.zhaohongri.com

TOP

引用:
原文件里面的ASE格式的文件是什么啊?
ASE文件是由3ds max导出的,是文本文件,用记事本可以打开.

To:stoicanon
就是要看看在目前的情况,Flash中到底能实现怎样的3D效果.
要说目前最好的Flash 3D引擎还是SWFZ.
它最多能够同时渲染10000个多边形,支持灯光效果,双层贴图,透明贴图等.
导入的文件格式有:*.X,*.MD2,*.OBJ,*.BSP,*.3DS,*.zip.
还有许多特点:
看这里:http://www.custommedia.co.nz/swfz-engine/dev/

TOP

我有时间把我收集的3D引擎整理一下,给大家共享
www.zhaohongri.com

TOP

楼主既然很有研究对PV3D,能否帮我解答一个问题呢?我打开PV3D自带的范例为什么总是提示无法加载类或接口呢,类的路径我配置的绝对正确,就在org根目录下,可还得将import后面加载的路径再跟个.*才能减少出错提示,但还是提示有很多文件不能加载,这是为什么呢?

TOP

首先确定你的PV3D版本是否正确.如果没问题的话,那你能否把源文件传上来?

TOP

我用的是flash加入的PV3D类(as2),听说是用flex,难道用flash不行吗?

TOP

未来flash 3d应用的肯定会越来越多!
在Web程序的开发中度过每一天......
我Blog:
一只小海豹!

TOP

恩,研究中。。。。
我爱慢慢吃葡萄!

TOP

Papervision3D 1.5 (AS3) 放出
具体可见:http://www.webstudio.com.cn/blog/?p=587
英文看不懂,谁能翻译一下
走近针灸 感受神奇

TOP

我也遇到 15 楼的问题呀,怎么解决啊?郁闷

TOP