gpt4 book ai didi

flash - AS3 DAE 增强现实 PaperVision 3D

转载 作者:行者123 更新时间:2023-12-04 07:08:55 26 4
gpt4 key购买 nike

我最近一直在玩增强现实(并且也玩得很开心!!)我已经能够创建 PaperVision 基元(立方体、圆柱体、圆锥体等......并使用它们)但是添加 DAE 模型是证明是虚幻的!

var cubeMaterialList:MaterialsList = new MaterialsList( { all: new FlatShadeMaterial(light, 0x0099FF, 0x0066AA) } );

var cube:Cube = new Cube(cubeMaterialList,
30,
30,
30);

cube.z += 15;

mainContainer.addChild(cube);

这一切正常!

我正在使用它来导入/尝试导入 dae!
private var mCollada:Collada;
private var universe:DisplayObject3D;
mCollada = new Collada("sample.dae");
universe = new DisplayObject3D();
universe.addChild(mCollada);
mainContainer.addChild(universe);

我已经使用这种将 DAE 导入到非增强现实 PaperVision 项目中的方法,效果很好!所以只是想知道是否有人在使用 AR 导入 DAE 方面有运气!

最佳答案

Click here to view a video of the necessary imports and working demo on my site.

我注意到您使用的是 Collada 类,而不是 DAE 类,它们的行为与视频 abobe 中显示的有所不同。

同样重要的是要注意,您很可能正确地执行此操作,并且模型或什至可能是纹理存在问题。如果纹理未加载,您应该立即从控制台知道。尝试创建一个 ColorMaterial 并创建一个 MaterialsList 对象,将“all”属性设置为您创建的 ColorMaterial。最后通过实例化或加载方法将列表传递给 Collada 或 DAE Classes 的实例化。还要确保相机没有放大到关闭,可能会将 3D 对象留在其后面。最后玩转比例,并非所有模型都具有相同的比例,并且使用 Collada 类,而不是 DAE,似乎可以将模型炸毁,如上面的视频链接所示。

最近我有很多时间与 FlarToolkit/Papervision3D/Collada 合作伙伴合作,为 Tony Hawk XI 网站做准备。

- 你需要什么

  • 一个 IDE,我使用 FlashDevelop3 RC2,但 Flex Builder 或您选择的 IDE 可以工作。
  • Papervision3D 2.0 Whiteshark,(最新版本)
  • Flex 3.3 SDK
  • 耐心

  • - 寻找和准备模型
  • 对我的 Collada 文件使用 Google 3D Warehouse
  • 接下来将“.skp”草图文件导入谷歌草图。
  • 确保 Sketchup 窗口具有焦点并同时按下 CTRL 和 A。 (全选)
  • 向上编辑,然后向下到下拉列表的底部,通常会显示您选择了多少组。
  • 选择爆炸。
  • 重复直到不能再爆炸。 (如果你像你应该的那样使用低多边形模型,这应该不会花很长时间。)
  • CTRL + A 再次全选。
  • 转到文件 > 导出 > 3D 模型并选择“.dae”//如果您没有 Sketchup 则 .dae 扩展名不可用,请查找解决方法:)(本质上 .dae 包含在“.skp”中
  • 您现在将拥有一个 .dae 文件和一个具有相同名称的文件夹,其中包含与模型相关的纹理。

  • - 导入/解析模型并显示它
    package 
    {
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.media.Camera;
    import flash.media.Video;
    import flash.utils.ByteArray;
    import org.libspark.flartoolkit.core.FLARCode;
    import org.libspark.flartoolkit.core.param.FLARParam;
    import org.libspark.flartoolkit.core.raster.rgb.FLARRgbRaster_BitmapData;
    import org.libspark.flartoolkit.core.transmat.FLARTransMat;
    import org.libspark.flartoolkit.core.transmat.FLARTransMatResult;
    import org.libspark.flartoolkit.detector.FLARSingleMarkerDetector;
    import org.libspark.flartoolkit.pv3d.FLARBaseNode;
    import org.libspark.flartoolkit.pv3d.FLARCamera3D;
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.render.LazyRenderEngine;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.view.Viewport3D;
    import org.papervision3d.objects.parsers.Collada;
    import org.papervision3d.objects.parsers.DAE;
    /**
    * ...
    * @author Brian Hodge
    */
    public class Main extends Sprite
    {
    [Embed(source="../lib/camera_para.dat", mimeType="application/octet-stream")]
    private var CameraParameters:Class;

    [Embed(source="../lib/collada.pat", mimeType="application/octet-stream")]
    private var MarkerPattern:Class;

    private var cameraParameters:FLARParam;
    private var markerPattern:FLARCode;
    private var raster:FLARRgbRaster_BitmapData;
    private var detector:FLARSingleMarkerDetector;

    private var cam:Camera;
    private var vid:Video;
    private var capture:BitmapData;

    private var cam3D:FLARCamera3D;
    private var scene3D:Scene3D;
    private var viewPort:Viewport3D;
    private var mainContainer:FLARBaseNode;
    private var renderer:LazyRenderEngine;

    private var trans:FLARTransMatResult;
    private var prevSet:Boolean = false;
    private var prevZ:Number = 0;

    private var _collada:Collada;
    private var _dae:DAE;

    public function Main():void
    {
    cameraParameters = new FLARParam();
    cameraParameters.loadARParam(new CameraParameters() as ByteArray);

    markerPattern = new FLARCode(16, 16);
    markerPattern.loadARPatt(new MarkerPattern());

    cam = Camera.getCamera();
    cam.setMode(640, 480, 30);

    vid = new Video();
    vid.width = 640;
    vid.height = 480;
    vid.attachCamera(cam);
    addChild(vid);

    capture = new BitmapData(vid.width, vid.height, false, 0x0);
    capture.draw(vid);

    raster = new FLARRgbRaster_BitmapData(capture);
    detector = new FLARSingleMarkerDetector(cameraParameters, markerPattern, 80);

    cam3D = new FLARCamera3D(cameraParameters);

    scene3D = new Scene3D();

    mainContainer = new FLARBaseNode();
    scene3D.addChild(mainContainer);

    viewPort = new Viewport3D(vid.width, vid.height);
    viewPort.scaleX = viewPort.scaleY = 2;
    addChild(viewPort);

    renderer = new LazyRenderEngine(scene3D, cam3D, viewPort);

    _dae = new DAE();
    _dae.load("assets/dae/apc.dae");
    _dae.rotationZ -= 90;
    mainContainer.addChild(_dae);

    /*
    _collada = new Collada("assets/dae/apc.dae");
    _collada.scale = 0.05;
    _collada.rotationZ -= 90;
    mainContainer.addChild(_collada);
    */

    trans = new FLARTransMatResult();

    this.addEventListener(Event.ENTER_FRAME, mainEnter);
    }
    private function mainEnter(e:Event):void
    {
    capture.draw(vid);

    if (detector.detectMarkerLite(raster, 80) && detector.getConfidence() > 0.5)
    {
    detector.getTransformMatrix(trans);

    mainContainer.setTransformMatrix(trans);
    mainContainer.visible = true;
    renderer.render();
    }
    else
    {
    mainContainer.visible = false;
    renderer.render();
    }
    }
    }

    }

    希望所有这些都对您有所帮助,我建议您继续玩它并不断熟悉它。

    关于flash - AS3 DAE 增强现实 PaperVision 3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673059/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com