返回列表 回复 发帖

[求助] 求AR高手合作毕业设计

本人是美术专业的 找AR程序人员合作
大概方案是识别不同的MARK。。出现相应的动作模型。。
有报酬。。。有兴趣的加QQ 113565508 (注明AR合作)
求AR高手合作毕业设计
大概方案是识别不同的5个MARK。。出现相应的动作模型。
这不论坛上有现成的么
我毕业设计也是artoolkit……
有现成的么...是需要识别出来的是动画喔
有现成的吗?帮忙指点一下啊,我也是做AR的,但是方向不太一样 4# gift925 you
识别不同的5个MARK,不知道你所说的识别是什么概念。
ARToolkit带有多个Mark的例子,不过他的原理是将所有的Marker和资源打包放在一起。
你是不是想做一个这样的程序,即动画资源放在后台,不是预先加载,通过不同的Marker识别,调用不同的动画资源?我目前正在尝试,不过结果不是太乐观。AR识别本来就是模糊识别,不像QR二维码那样是精确识别,这其中的效率、用户体验、正确率都是挑战。随着资源越来越多,AR的Marker也会越来越近似,识别的正确率和效率也会逐步减低。不是说不可能,目前我还没有找到更好的方式,考虑过用QR码代替AR码,但是难度比较大。
package
{
        import com.transmote.flar.FLARManager;
        import com.transmote.flar.marker.FLARMarker;
        import com.transmote.flar.marker.FLARMarkerEvent;
        import com.transmote.flar.utils.geom.FLARPVGeomUtils;
        import flash.display.Sprite;
        import flash.events.Event;
        import org.libspark.flartoolkit.support.pv3d.FLARCamera3D;
        import org.papervision3d.materials.MovieMaterial;
        import org.papervision3d.objects.DisplayObject3D;
        import org.papervision3d.objects.primitives.Plane;
        import org.papervision3d.render.LazyRenderEngine;
        import org.papervision3d.scenes.Scene3D;
        import org.papervision3d.view.Viewport3D;
        public class multimarkervideo extends Sprite
        {
                private var fm:FLARManager;
                private var vid1:Vid;
                private var vid2:Vid;
                private var container1:DisplayObject3D;
                private var container2:DisplayObject3D;
                private var activemarker1:FLARMarker;
                private var scene:Scene3D;
                private var viewport:Viewport3D;
                private var p1:Plane;
                private var p2:Plane;
                private var lre:LazyRenderEngine;
                private var camera:FLARCamera3D;
                private var activemarker2:FLARMarker;
                private var markerid:int;
                public function multimarkervideo()
                {
                        initflar();
                        vid2= new Vid();
                        vid2.vid.source="first_2.flv";
                        vid1= new Vid();
                        vid1.vid.source="kramer.m4v";
                        vid1.vid.stop();
                        vid2.vid.stop();
                }
                private function initflar():void
                {
                        fm= new FLARManager("../resources/flar/flarConfig.xml");
                        fm.addEventListener(FLARMarkerEvent.MARKER_ADDED, onadd);
                        fm.addEventListener(FLARMarkerEvent.MARKER_REMOVED, onremove);
                        fm.addEventListener(Event.INIT, init3d);
                }
                private function onadd(e:FLARMarkerEvent):void
                {
                        //trace("add");
                        if(e.marker.patternId==0)
                        {
                        markerAdded(0);
                        activemarker1=e.marker;
                        vid1.vid.play();
                        p1.visible=true;
                        }
                        if(e.marker.patternId==1)
                        {
                        markerAdded(1);
                        activemarker2=e.marker;
                        vid2.vid.play();
                        p2.visible=true;
                        }
                }
                private function onremove(e:FLARMarkerEvent):void
                {
                //      trace("remove");
                        if(e.marker.patternId==0){
                                markerRemoved(0);
                                vid1.vid.stop();
                                p1.visible= false;
                        }
                        if(e.marker.patternId==1){
                                markerRemoved(1);
                                vid2.vid.stop();
                                p2.visible=false;
                        }
                        activemarker1=null;
                        activemarker2=null;
                }
                private function init3d(e:Event):void
                {
                        //smua ini komponen kcuali mat
                        scene= new Scene3D();
                        //melewatkan parameter camera,jadi di attach flarmanagaer instance
                        camera= new FLARCamera3D(fm.cameraParams);
                        camera.z= -30;
                        viewport= new Viewport3D(640, 480, true);
                        lre= new LazyRenderEngine(scene, camera, viewport);
                        //video 1
                        var mat:MovieMaterial= new MovieMaterial(vid1, false, true);
                        p1= new Plane(mat, 320, 240, 2, 2);
                        p1.scaleY= -1;
                        p1.rotationZ=90;
                        p1.visible= false;
                        container1 = new DisplayObject3D();
                        container1.addChild(p1)
                                container1.visible=false;
                        scene.addChild(container1);
                        addChild(viewport);
                        //video 2
                        var mat1:MovieMaterial= new MovieMaterial(vid2, false, true);
                        p2= new Plane(mat, 320, 240, 2, 2);
                        p2.scaleY= -1;
                        p2.rotationZ=90;
                        p2.visible= false;
                        container2 = new DisplayObject3D();
                        container2.addChild(p2)
                        container2.visible=false;
                        scene.addChild(container2);
                        addChild(viewport);
                        addEventListener(Event.ENTER_FRAME, loop);
                }
                private function loop(e:Event):void
                {
                        if(activemarker1){
                                container1.transform=
FLARPVGeomUtils.convertFLARMatrixToPVMatrix(activemarker1.transformMatrix);
                        }
                        if(activemarker2) {
                                container2.transform=
FLARPVGeomUtils.convertFLARMatrixToPVMatrix(activemarker2.transformMatrix);
                        }
                        lre.render();
                }
                private function markerRemoved(markerid:int):void
                {
                        var x:int = markerid;
                        switch(x)
                        {
                                case 1:
                                {
                                        if(container1.visible==true)
                                        {
                                                container1.visible=false;
                                                break;
                                        }
                                        else
                                                break;
                                }
                                case 2:
                                {
                                        if(container2.visible==true)
                                        {
                                                container2.visible=false;
                                                break;
                                        }
                                        else
                                        {
                                                break;
                                        }
                                }
                        }
                }
                private function markerAdded(markerid:int):void
                {
                        trace(markerid);
                        var x:int = markerid;
                        switch(x)
                        {
                                case 1:
                                {
                                        if(container1.visible==false)
                                        {
                                                container1.visible=true;
                                                break;
                                        }
                                        else
                                                break;
                                }
                                case 2:
                                {
                                        if(container2.visible==false)
                                        {
                                                container2.visible=true;
                                                break;
                                        }
                                        else
                                                break;
                                }
                        }
                }
        }
希望对你有启发和帮助!!
楼主,我也想实现多个标记识别,请问你有成果了么?可以分享下么?
返回列表