Flash(+Stage 3D)의 배경을 투명하게 만들기

2490 단어 Stage3DAIRflash
Stage 3D가 나타나기 전(Flash Player 10 이전) Flash의 전송은 비교적 간단했지만 Stage 3D 때문에 복잡해졌습니다.
Stage 3D는 Flash(일반)에서 정식 3D를 처리하기 위해 상당히 중요한 기능입니다.

Flash(Not Stage3D) + HTML


HTML에서 다음 옵션 설정
wmode="transparent"

Flash(Not Stage3D)+NativeWindow


AIR 응용 프로그램에서 XML을 설명하는 initial Window 항목에 다음 설정을 추가합니다.
<systemChrome>none</systemChrome> 
<transparent>true</transparent> 

Flash(Stage3D) + HTML


나는 할 수 없을 것 같다.
wmode에transsparent와direct 두 가지를 설정하고 싶은데 그럴 리가 없어요...

Flash(Stage3D)+NativeWindow


다음은 본론.
AIR 응용 프로그램에서 XML을 설명하는 initial Window에 다음 설정을 추가합니다.
<systemChrome>none</systemChrome> 
<transparent>true</transparent> 
<renderMode>direct</renderMode>  
하지만 이렇게 되면 투명한 색이 투명해도 배경이 남는다.
context3D.clear(1, 0, 1, 0);//アルファ0なのに表示されちゃう!

그림의 보라색 부분을 투명하게 하기를 원하는 부분입니다.
즉, 3D 드로잉은 배경 투명도만 표시합니다.
그래서 저는 3D를 Flash의 기존 Sprite에 복사해서 표시하는 방법을 생각합니다.
Context3D의 drawToBitmapData 방법을 사용하면 Bitmap 클래스에 그릴 수 있기 때문에 사용합니다.
비트맵 클래스의 경우 Stage에 addChild를 추가하여 표시할 수 있습니다.

1. 윈도 크기의 Bitmap 클래스를 addChild로 만듭니다.

var bitmap:Bitmap = new Bitmap(new BitmapData(stage.stageWidth, stage.stageHeight, true));
addChild(bitmap);

2. Stage 3D를 비활성화합니다.


나는 초기화는 보통과 같으면 된다고 생각한다.
그리기 전에 visible을 가짜로 설정합니다.
stage3D.visible = false;

3. 0으로 화면 지우기

context3D.clear(0, 0, 0, 0)

4. Bitmap에 3D 이미지를 그립니다.

context3D.drawToBitmapData(bitmap.bitmapData);
이렇게 하면 완성된다.
가장 힘들었던 건 3번.
r:0, g:0, b:0, a:0이면 그려지지 않고 r:1, g:0, b:0, a:0이면 빨간색으로 변한다.α0
한 가지 방법으로는 믿기지 않지만, 먼저 Win7, 8, Mac로 배경이 투명하게!

샘플은 아래 URL을 통해서 살 수 있을 것 같아요.
Live 2D SDK 브로셔 "Flash로 데스크탑 마스코트 만들기"
https://sites.google.com/a/cybernoids.jp/cubism2/simple-app/desctopmascot

좋은 웹페이지 즐겨찾기