سؤال

لقد كنت ألعب بالواقع المعزز مؤخرًا (ولقد استمتعت كثيرًا به أيضًا!!) لقد تمكنت من إنشاء عناصر أولية من 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);

كل هذا يعمل بشكل جيد!

أنا أستخدم هذا لاستيراد/محاولة استيراد داي!

private var mCollada:Collada;
private var universe:DisplayObject3D;
mCollada = new Collada("sample.dae");
universe = new DisplayObject3D();
universe.addChild(mCollada);
        mainContainer.addChild(universe);

لقد استخدمت هذه الطريقة لاستيراد DAEs إلى مشاريع PaperVision غير المعتمدة على الواقع المعزز وهي ناجحة!لذلك فقط أتساءل عما إذا كان أي شخص قد حالفه الحظ في استيراد DAEs باستخدام الواقع المعزز!

هل كانت مفيدة؟

المحلول

انقر هنا لمشاهدة فيديو للواردات الضرورية وعرض العمل على موقعي.

لقد لاحظت أنك تستخدم فئة Collada، بدلاً من فئة DAE، وكلاهما يعمل بشكل مختلف قليلاً كما هو معروض في الفيديو أعلاه.

من المهم أيضًا ملاحظة أنك قد تقوم بذلك بشكل صحيح وأن هناك مشكلة في النموذج أو ربما حتى في النسيج.إذا لم يتم تحميل النسيج، فيجب أن تعرف ذلك فورًا من وحدة التحكم.حاول إنشاء ColorMaterial وإنشاء كائن MaterialsList مع تعيين الخاصية "all" على ColorMaterial الذي قمت بإنشائه.أخيرًا، قم بتمرير القائمة إلى إنشاء مثيل لفئات Collada أو DAE من خلال طريقة الإنشاء أو التحميل.تأكد أيضًا من عدم تكبير الكاميرا للإغلاق، مما قد يؤدي إلى ترك الكائن ثلاثي الأبعاد خلفها.أخيرًا، العب بالمقياس، لا تأتي جميع النماذج بنفس المقياس، ويبدو أن استخدام فئة Collada، على عكس DAE، يفجر النموذج بشكل كبير كما هو موضح في رابط الفيديو أعلاه.

لقد أتيحت لي الكثير من الوقت للعب مع شراكة FlarToolkit / Papervision3D / Collada مؤخرًا في الاستعدادات لموقع Tony Hawk XI الإلكتروني.

-ماذا تحتاج

  • بالنسبة إلى IDE، أستخدم FlashDevelop3 RC2، لكن Flex Builder أو IDE الذي تختاره سيعمل.
  • Papervision3D 2.0 Whiteshark، (أحدث إصدار)
  • فليكس 3.3 SDK
  • الصبر

-البحث عن النموذج وإعداده

  • يستخدم مستودع جوجل ثلاثي الأبعاد لملفات Collada الخاصة بي.
  • بعد ذلك، قم بنقل ملف الرسم ".skp" إلى Google Sketchup.
  • تأكد من التركيز على نافذة الرسم واضغط على CTRL وA في نفس الوقت.(اختر الكل)
  • اتجه للتحرير، ثم انتقل إلى أسفل القائمة المنسدلة حيث سيُظهر عادةً عدد المجموعات التي حددتها.
  • اختر تنفجر.
  • كرر ذلك حتى لا تتمكن من الانفجار بعد الآن.(إذا كنت تستخدم نماذج منخفضة التضليع كما هو مفترض، فلن يستغرق ذلك وقتًا طويلاً.)
  • CTRL + A لتحديد الكل مرة أخرى.
  • انتقل إلى ملف > تصدير > نموذج ثلاثي الأبعاد واختر ".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();
        }
    }
}

}

نأمل أن يساعدك كل هذا، أقترح عليك الاستمرار في اللعب به والاستمرار في التعرف عليه.

نصائح أخرى

وBrady،

ويا أنا أعتقد أن هذا يمكن أن يكون خطأ:

[إدراج (المصدر = "pat1.pat"، MIMETYPE = "التطبيق / الثماني تيار")] CameraParameters فار خاصة: الفئة؛

[إدراج (المصدر = "pat1.pat"، MIMETYPE = "التطبيق / الثماني تيار")] خاصة فار MarkerPattern: الفئة؛

وهنا في "CameraParameters" يجب تضمين "camera_para.dat" بدلا من - pat1.pat . حاول مع هذا واحد.

ولقد وجدت بعض المعلومات الجيدة فعلا في هذا الموقع . لقد استخدمت كود هناك لاستيراد النماذج في أشيائي AR. وهو يحدد طريقة بسيطة جدا لاستيراد نماذج COLLADA. أنا فقط أخذت عينة FlarToolkit سبيل المثال (المثال simpleCube)، وأضاف التعليمات البرمجية في تلك المادة، وكان ذلك كافيا للحصول على لي الذهاب.

وهنا رمز:

package {
    import org.papervision3d.lights.PointLight3D;
    import org.papervision3d.materials.WireframeMaterial;
    import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.materials.*;
    import org.papervision3d.materials.utils.*;
    import org.papervision3d.materials.shadematerials.*;
    import org.papervision3d.objects.primitives.Cube;
    import org.papervision3d.objects.primitives.Cylinder;
    import org.papervision3d.objects.DisplayObject3D;
    import org.papervision3d.objects.parsers.Collada;
    import flash.events.*;

    public class SimpleCube extends PV3DARApp {

        public var FAlogo:DisplayObject3D;
        public var light                        :PointLight3D;

        public function SimpleCube() {
            this.init('Data/camera_para.dat', 'Data/flarlogo.pat');
        }

        protected override function onInit():void {
            super.onInit();
            this.addEventListener( Event.ENTER_FRAME, EROnEnterFrame );

            // let there be light
            this.light = new PointLight3D;
            this.light.x = 0;
            this.light.y = 1000;
            this.light.z = -1000;

            // cow model
            FAlogo = new Collada("http://papervision2.com/wp-content/downloads/dae/cow.dae");
            FAlogo.rotationZ = -90;
            FAlogo.rotationY = -90;
            FAlogo.x = -100;
            FAlogo.z = 100;
            FAlogo.scale = 0.1;

            // re-orient the logo model before adding it to the scene

            this._baseNode.addChild(this.FAlogo);
        }

        private function EROnEnterFrame( event :Event ):void
        {
            // spins the cow yay!
            FAlogo.yaw(3);
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top