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보기를 혼합하고 싶습니다. 그래서 해결책이 아닙니다.
도움 주셔서 감사합니다.
가능한 한 빨리 플레어로 테스트 할 것이므로 아마도 귀하의 답변이 받아 들여질 것입니다. 우리는 이미 프로젝트에 참여했고 (아주 좋은 성적을 가지고있었습니다 ;-)). – florian