2011-03-23 5 views
0

J'essaie de faire des projets de réalité augmentée avec flartoolkit. Je peux maintenant mettre des objets 3D simples sur mon marqueur et cela fonctionne bien, mais je veux donner à mon projet des événements avec lesquels l'utilisateur peut interagir. J'essaie de tracer la rotation du marqueur. il y a un conteneur: DisplayObject3D que mon application utilise pour ajouter les objets 3d, j'ai tracé ceci: "trace (container.rotationZ)" mais il retourne juste 0. J'ai étudié le code source d'une autre application AR et il utilisait la rotation de son objet conteneur sans problème. Et je pense que je devrais mentionner que j'utilise le fichier d'exercices de seb lee delisle papervision3d bien sûr de lynda.com. quelqu'un a une expérience avec flartoolkit? les principales fonctions de mon mon code est comme ci-dessous:
la réalité augmentée flartoolkit rotation

public function AR_AlchemyBase() 
{ 
    super(640,480, false); 
    cameraParams = FLARParam.getDefaultParam(WIDTH * 0.5, HEIGHT * 0.5); 

    marker = new FLARCode(16, 16); 
    marker.loadARPattFromFile(new MarkerPattern()); 

    init(); 
} 

public function init():void 
{   
    video = new Video(WIDTH, HEIGHT); 
    webCam = Camera.getCamera(); 
    webCam.setMode(WIDTH, HEIGHT, 30); 
    video.attachCamera(webCam); 
    video.smoothing = true; 

    camBitmapData = new BitmapData(WIDTH *0.5, HEIGHT * 0.5,false, 0x000000); 

    camBitmap = new Bitmap(camBitmapData); 
    camBitmap.scaleX = camBitmap.scaleY = 2; 
    addChildAt(camBitmap,0); 

    raster = new FLARRgbRaster(WIDTH *0.5, HEIGHT * 0.5); 
    detector = new FLARSingleMarkerDetector(cameraParams, marker, 80); 
    result = new FLARTransMatResult(); 

    viewport.x = -4; 

    _camera = new FLARCamera3D(cameraParams); 
    container = new FLARMarkerNode(); 
    scene.addChild(container); 

    addSceneObjects(); 

    stage.addEventListener(Event.ENTER_FRAME, enterFrame); 
} 

//the function to put our objects in 
public function addSceneObjects() : void 
{ 

    var wmat:WireframeMaterial = new WireframeMaterial(0xff0000, 1, 2); 
    wmat.doubleSided = true; 

    var plane : Plane = new Plane(wmat, 80, 80); 
    container.addChild(plane); 

    var light:PointLight3D = new PointLight3D(); 
    light.x = 1000; 
    light.y = 1000; 
    light.z = -1000; 

    var fmat:FlatShadeMaterial = new FlatShadeMaterial(light, 0xff22aa, 0x0); 
    var cube : Cube = new Cube(new MaterialsList({all: fmat}), 40, 40, 40); 
    cube.z = -20; 
    container.addChild(cube);   
} 

public function enterFrame(e:Event):void 
{ 
    var scaleMatrix:Matrix = new Matrix(); 
    scaleMatrix.scale(0.5, 0.5); 
    camBitmapData.draw(video, scaleMatrix); 

    raster.setBitmapData(camBitmapData); 

    counter++; 

    if(counter == 3) counter = 0; 

    var imageFound : Boolean = false 

    currentThreshold = threshold+ (((counter%3)-1)*thresholdVariance); 
    currentThreshold = (currentThreshold>255) ? 255 : (currentThreshold<0) ? 0 : currentThreshold; 

    imageFound = (detector.detectMarkerLite(raster, currentThreshold) && detector.getConfidence() > 0.5) ; 

    if(imageFound) 
    { 
     detector.getTransformMatrix(result); 
     container.setTransformMatrix(result); 
     container.visible = true; 

     threshold = currentThreshold; 
     thresholdVariance = 0; 

     if(onImageFound!=null) onImageFound(); 
    } 
    else 
    { 
     if(counter==2) thresholdVariance +=2; 

     if(thresholdVariance>128) thresholdVariance = 1; 

     if(onImageLost!=null) onImageLost(); 

    } 

    singleRender(); 
} 

Répondre

1

je pourrais ne pas être en mesure d'aider le problème principal, mais si vous voulez que les utilisateurs d'interagir avec les modèles dont vous avez besoin de mettre leur matériel pour être interactif, sinon, ils ne reçoivent pas d'événements de souris. En ce qui concerne la rotation ... Il se peut que je manque quelque chose mais ce sont les instances à l'intérieur du conteneur où vous appliquez la rotation, pas le conteneur lui-même?

Cela m'a aidé à obtenir un exemple simple de PV3D en cours d'exécution: PV3D Tutorial for basic interactivity