雑種のポメラニアン

フリープログラマーの日記とか人生観とか綴るよ

Effectを3Dっぽく使う #FireMonkey

随分間が空いてしまいましたがFireMonkeyの記事です。

<今日のお題>
Effectを3Dに使ってみたい。

Effectを何とか3Dっぽく使えるよう調べてみました。
ベースはサンプルのShaderFiltersです。
調べたところFireMonkeyのEffectはBitmapにしか適用できないようです。
でもそれだと3Dアプリで使い甲斐がないので、工夫してみました。

クルクル回るImage3DLayerにBlurイフェクトをかけてみました。
EffectsタブのBlurEffectを使ったのですが
Bitmapに対して適用する場合は
普通にオブジェクトエディター(左上のやつです)にぶら下げるだけで
Blurされるんですが
Image3DLayer(ここではImage3D1)に対してはそれだけではダメでした。

従来のDelphiと同様にTBitmap(ここではBitmap1)をまずロードします。
そして、FormRender時に

Image3D1.Bitmap.Assign(Bitmap1);
BlurEffect1.ProcessEffect(Image3D1.Bitmap.Canvas, Image3D1.Bitmap, 0);

としてBlurをかけました。
Bitmap1が必要なのは
BlurEffectにFloatAnimationをぶら下げることで
連続的にBlurの効果を変化させているので
描画時に毎回Image3D1をアサインするようにしないと
果てしなくボケていってしまうからです。

できればカメラで映した映像にイフェクトをかけたかったのですが
Effectsのソースを見た感じではBitmap固定になってました。
ちょっと納得が行きませんが、今後も頑張って調べていきます。

次はModelのロードでもやってみようかな。