2011-03-23 3 views
0

Я пытаюсь сделать некоторые проекты дополненной реальности с flartoolkit. Теперь я могу поместить простые 3D-объекты на свой маркер, и он отлично работает, но я хочу дать моему проекту некоторые события, с которыми пользователь может взаимодействовать. Я пытаюсь проследить вращение маркера. есть контейнер: DisplayObject3D, который мое приложение использует для добавления трехмерных объектов, я проследил это: «trace (container.rotationZ)», но он просто возвращает 0. Я изучил исходный код другого AR-приложения, и он без проблем использовал вращение его контейнерного объекта. И я думаю, что я должен упомянуть, что я использую файл упражнений seb lee delisle papervision3d с курса lynda.com. у кого есть опыт работы с flartoolkit? основные функции моего моего кода, как показано ниже:
дополненная реальность 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(); 
} 

ответ

1

я не мог бы быть в состоянии помочь с основной проблемой, но если вы хотите, чтобы пользователи взаимодействуют с моделями, которые необходимо установить свои материалы, чтобы быть интерактивными, иначе они не будут получать события мыши. Что касается вращения ... Я мог бы что-то упустить, но это экземпляры внутри контейнера, к которому вы применяете поворот, а не сам контейнер?

Это помогло мне получить простой пример PV3D работает: PV3D Tutorial for basic interactivity

Смежные вопросы