06. エフェクト - hannsi-to/LFJG-LiteFrameJavaGui GitHub Wiki

まずここではオブジェクトにエフェクトを適応する方法をお伝えします。

準備

準備としてグローバル変数として EffectCache を作成してください。init関数内で EffectCache.createEffectCache() を呼び出してキャッシュを生成します。 createCache() を使用してEffectBaseを登録します。さいごに attachGLObject()  を呼び出してエフェクトを適用したいオブジェクトにアタッチします。実際のコードです

public class MainFrame implements LFJGFrame {
    Frame frame;
    GLRect glRect1;
    EffectCache effectCache1;

    public static void main(String[] args) {
        new MainFrame().setFrame();
    }

    @Override
    public void init() {
        frame.updateLFJGLContext();

        glRect1 = new GLRect("Rect1");
        glRect1.rect(500, 500, 1000, 1000, Color.RED);
        effectCache1 = EffectCache.createEffectCache()
                .attachGLObject(glRect1);
    }

    @Override
    public void drawFrame() {
        glRect1.draw();
    }

    @Override
    public void stopFrame() {
        glRect1.cleanup();
        effectCache1.cleanup();
    }

    @Override
    public void setFrameSetting() {

    }

    public void setFrame() {
        frame = new Frame(this, "MainFrame");
    }
}

エフェクト追加

テストとして回転エフェクトを適応してみます。init関数内のEffectCache.createEffectCache()あとに

.createCache(Rotate.createRotate("Rotate1").zDegree(45).cx(500).cy(500))

を追加してください。これで原点から500,500を回転中心としてオブジェクトが左に45度傾きます。実際の結果です。 全体のコードです。

public class MainFrame implements LFJGFrame {
    Frame frame;
    GLRect glRect1;
    EffectCache effectCache1;

    public static void main(String[] args) {
        new MainFrame().setFrame();
    }

    @Override
    public void init() {
        frame.updateLFJGLContext();
        
        glRect1 = new GLRect("Rect1");
        glRect1.rect(500, 500, 1000, 1000, Color.RED);
        effectCache1 = EffectCache.createEffectCache()
                .createCache(Rotate.createRotate("Rotate1").zDegree(45).cx(500).cy(500))
                .attachGLObject(glRect1);
    }

    @Override
    public void drawFrame() {
        glRect1.draw();
    }

    @Override
    public void stopFrame() {
        glRect1.cleanup();
        effectCache1.cleanup();
    }

    @Override
    public void setFrameSetting() {

    }

    public void setFrame() {
        frame = new Frame(this, "MainFrame");
    }
}

createCache関数ですがEffectBaseを継承しているエフェクトクラスなら何度も重ね掛けできます。

エフェクトアニメーション

drawFrame関数内でエフェクトの値を常に変えることができます。関数内に以下のコードを追加してください。

Rotate rotate1 = ((Rotate) effectCache1.getEffectBase("Rotate1"));
rotate1.zRadian(rotate1.getZ() + MathHelper.toRadians(10));

このコードは毎フレーム10度ずつ回転するコードです。実行結果です。