2011-11-22 2 views
3

Flex 프레임 워크 및 3D 그래픽 라이브러리 Flare3D으로 애플리케이션을 구축 중입니다.
내 3D 장면을 MXML 응용 프로그램에 포함하고 3D 장면으로 마우스 이벤트를 전달할 수 있기를 원합니다.Flare3D를 Flex 애플리케이션에 통합

여기 내 코드입니다 :
- MXML 응용 프로그램 :

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
       xmlns:views="views.*" 
       minWidth="955" minHeight="600" 
       backgroundAlpha="0"> 

<s:HGroup width="100%" height="100%"> 

    <s:Panel width="250" height="100%"> 
    </s:Panel> 
    <views:MyView 
     id="myView" 
     width="100%" height="100%" /> 

</s:HGroup> 
</s:Application> 

렌더링 3D의 책임 UIComponent (단지 큐브).

package views 
{ 

import flare.basic.Scene3D; 
import flare.basic.Viewer3D; 
import flare.core.Camera3D; 
import flare.primitives.Cube; 

import flash.display.Stage3D; 
import flash.display.StageAlign; 
import flash.display.StageScaleMode; 
import flash.events.Event; 

import mx.controls.Alert; 
import mx.core.UIComponent; 

public class MyView extends UIComponent 
{ 

    private var scene:Scene3D; 
    private var stage3D:Stage3D; 

    private var cube:Cube; 

    public function MyView() 
    { 
     super(); 
     this.addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

    public function init(event:Event):void 
    { 
     stage.scaleMode = StageScaleMode.NO_SCALE; 
     stage.align = StageAlign.TOP_LEFT; 
     //stage.focus = null; 
     //stage.getChildAt(0).visible = false; 

     scene = new Viewer3D(stage); 
     scene.setViewport(250, 0); 
     scene.addEventListener(Scene3D.PROGRESS_EVENT, progressEvent); 
     scene.addEventListener(Scene3D.COMPLETE_EVENT, completeEvent); 

     scene.camera = new Camera3D(); 
     scene.camera.setPosition(150, 150, -300); 
     scene.camera.lookAt(0, 0, 0); 

     cube = new Cube("cube"); 
     scene.addChild(cube); 
    } 

    protected function progressEvent(e:Event):void {} 
    protected function completeEvent(e:Event):void {} 

} 
} 

문제는 3D 렌더링은 (우리는 MXML 구성 요소를 넣을 수 있습니다) 2 차원 층 뒤에있는 "레이어"에서 기본적으로 수행된다는 점이다.
기본적으로 3D 및 2D 요소를 혼합하면 3D 요소를 볼 수 없습니다.
그래서 backgroundAlpha="0"을 추가했습니다. 이것은 3D보기를 보여주는 문제를 해결했습니다. 하지만 이제는 또 다른 문제가 있습니다. 장면을 클릭하고 마우스를 움직일 때 큐브를 이동할 수 없습니다 (기본 동작). 3D보기가 2D보기 뒤에 있기 때문에이 점을 이해합니다.

(필요할 때) 3D보기에 마우스 이벤트의 포커스를 부여 할 수 있습니까?
또는 내가 원하는 것을 수행하는 다른 방법이 있습니까? 내가 알아 낸 유일한 해킹은이 //stage.getChildAt(0).visible = false;의 주석 처리를 제거하여 2D보기를 보이지 않게 만드는 것입니다. 하지만 2D 요소와 3D보기를 혼합하고 싶습니다. 그래서 해결책이 아닙니다.

도움 주셔서 감사합니다.

답변

1

Alternativa3D 및 Flex 4.6에서 똑같은 문제가 발생했습니다. 내가 시도한 것은 Panel 태그가 아닌 응용 프로그램 태그에 UIComponent를 추가하고 Flex 및 Stage3D 마우스 이벤트가 모두 작동하는 것입니다.

그래서 코드는 다음과 같습니다

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
       xmlns:views="views.*" 
       minWidth="955" minHeight="600" 
       backgroundAlpha="0"> 

    <views:MyView 
     id="myView" 
     width="100%" height="100%" /> 

<s:HGroup width="100%" height="100%"> 

    <s:Panel width="250" height="100%"> 
    </s:Panel> 

</s:HGroup> 
</s:Application> 
+0

가능한 한 빨리 플레어로 테스트 할 것이므로 아마도 귀하의 답변이 받아 들여질 것입니다. 우리는 이미 프로젝트에 참여했고 (아주 좋은 성적을 가지고있었습니다 ;-)). – florian

0

backgroundAlpha="0"이 나를 위해 일한 설정.

http://www.beyond-reality-face.com/sdk을 Flex/Flash Builder에서 사용하려고 시도하고있었습니다.

이제 문제를 이해합니다. Flex 앱은 2D이며 투명하지 않으므로 backgroundAlpha="0"은이를 수정합니다.

또한 stage3D는 투명하지 않습니다. 그러나 Face SDK의 예제는 웹캠을 Flare3D 평면에 애니메이션 텍스처로 페인팅하여 이미이를 설명합니다.

관련 문제