我用了两个小时把它改成
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 编辑 ]