トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     3D回転させるとアンチエイリアスがかかってしまう?
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
矢口マサムネ
Åê¹ÆNo.48563
投稿日時: 2012-1-9 15:57
新米
居住地: 東京
投稿: 21
使用環境:
Windows 7 Professional SP1 / 64bit
Flash CC 2014
Flash CS6
3D回転させるとアンチエイリアスがかかってしまう?
お世話になります。

ぼかしたくないフォントを含むオブジェクトを3D回転させたいのですが
どうしても強制的にアンチエイリアスがかかってしまい、困っています。
http://csf.artisania.net/Sample.swf

import flash.events.Event;

this.addEventListener(Event.ENTER_FRAME, on_EnterFrame);
function on_EnterFrame(e:Event):void {
	testTxt.rotationX +=  12;
	if (testTxt.rotationX == 360) {
		testTxt.rotationX = 0;
		// 0に戻しても、360のままでも変わらず

		trace(testTxt.x, testTxt.y, testTxt.z, testTxt.scaleX, testTxt.scaleY, testTxt.height, testTxt.width, testTxt.rotationX, testTxt.rotationY);
		// 小数点以下を含む数値もない

		this.removeEventListener(Event.ENTER_FRAME, on_EnterFrame);
	}
}

http://csf.artisania.net/Sample.fla

デバイスフォントであろうが、普通のフォントをアンチエイリアスなしに設定しようが変わらずでした。

一度 removeChild → addChild をしなおしてみても直りません。
最終的に、回転し終わった状態でアンチエイリアスなしに戻れば問題ないのですが…。

原因等が判りましたら、お教え戴けませんでしょうか。
ひろゆき
Åê¹ÆNo.48565
投稿日時: 2012-1-9 16:09
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 3D回転させるとアンチエイリアスがかかってしまう?
まず、このSWFは、noScaleになっていないので、SWFのステージサイズが変更されると、
SWF自体が拡縮され、それが歪みの原因になることも考えられるので、
SWFのスケールモードをnoScaleなどにするか、html上で、SWFをサイズ固定で表示すべきでしょう。

次に、回転するから、アンチエイリアスになるのでしょうか?
回転せずに、z座標指定しただけだと、どうなるのでしょうか?

検証するのであれば、シンプルなもので試すべきです。

import flash.display.StageScaleMode;
import flash.display.StageAlign;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

testTxt.z = 0;
で、充分でしょう。


----------------
質問する際は、回答者に具体的な情報を与えてください。

矢口マサムネ
Åê¹ÆNo.48566
投稿日時: 2012-1-9 16:42
新米
居住地: 東京
投稿: 21
使用環境:
Windows 7 Professional SP1 / 64bit
Flash CC 2014
Flash CS6
Re: 3D回転させるとアンチエイリアスがかかってしまう?
ひろゆき 様

ご返答ありがとうございます。ご指摘の通り、z座標の指定のみに作り変えてみた処、
同様にアンチエイリアスが発生してしまう様です。
http://csf.artisania.net/Sample_2.html

trace(testTxt.z);

stage.addEventListener(MouseEvent.CLICK, on_Click);
function on_Click(e:Event):void {
	
	testTxt.z = 0;
	trace(testTxt.z);

}

z座標は変化していないのに、クリックした時点でアンチエイリアスが発生

xやyの指定では発生せず、z座標のみで発生します。
ご指摘を元に少し検索してみたところ、3D要素に手を加えた時点でビットマップ化されてしまう…という事なのでしょうか。

何か回避する方法がありましたらお教え戴けませんでしょうか?
ひろゆき
Åê¹ÆNo.48567
投稿日時: 2012-1-9 16:47
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 3D回転させるとアンチエイリアスがかかってしまう?
回転自体が原因ではありませんね。

Native3Dを用いて、DisplayObjectを3D空間として表示しようとした時点で、
DisplayObjectに対して、何らかの3D変換がされているはずです。
そのため、3D回転しているように見えるわけです。

z座標を指定しただけで、アンチエイリアスのような表示になってしまうことから、
Native3Dを用いた段階で、3D変換をする上で誤差が生じているように思われます。

なので、基本的には回避策はないと思った方が良いでしょう。
あるいは、Native3Dを用いないで、誤差が表示しにくいような3Dライブラリを用いるとか。


----------------
質問する際は、回答者に具体的な情報を与えてください。

矢口マサムネ
Åê¹ÆNo.48568
投稿日時: 2012-1-9 17:18
新米
居住地: 東京
投稿: 21
使用環境:
Windows 7 Professional SP1 / 64bit
Flash CC 2014
Flash CS6
Re: 3D回転させるとアンチエイリアスがかかってしまう?
ひろゆき 様

ご返答ありがとうございます。

とりあえず、全く同じインスタンスを別に用意して、3D処理が終わった時点ですり替える、という方法でお茶を濁す事としました。
別の3Dライブラリを用いる方法については、まだ経験も少なくどんなライブラリが普及しているか等の知識にも乏しいため、
おいおいその辺も学びがてら試してみようと思います。

ありがとうございました!



追記:
クラス化した際、アニメーションが停止した時点で新たなTextFieldを作成して同じTextFormatを適用させ、文字列もコピーして
元のオブジェクトとすり替える動作を入れる事で、ひとまず当初の意図通りに表示させる事は出来ました。根本的な解決とは程遠い感じですが…。
同様の事で悩む方がおられるかどうか判りませんが、一応、ご報告まで。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops