search
LoginSignup
0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

KumaMCN唯一?のガチ勢、ガチ本です。
クラッピーチャレンジ Advent Calendar 2017 24日目の記事です!

メリークリスマス(イブ)!楽しんでるかいパーリーピーポーw卍

遅くなってすみません。ガチ腹痛で倒れておりました…何食べたかなクラッピー

今回は、クラッピーでノリノリになれるインタラクティブなアート&VJパーリーに持って来いなものを2分で作った件についてです。

つくると3!の夜のVJで、みんなで光るクラッピーを持って踊ったのが楽しすぎて…
それからというものKumaMCNはクラッピーの光モノを量産し、流行らせました。(手だけ欲しい…)


作り方

今回用いるのは、クラッピーチャレンジャーまこらぎさんが作ったクラッピーでスライド送り(Digisparkが埋め込んであり、拍手するとEnterキーを送信できる)とSiv3Dを用いてパーティクルを表示します!

  • Windows 10
  • Visual Studio 2017
  • Siv3D
  • プロジェクター
  • DJ
  • クラッピーでスライド送り

Siv3Dは、C++で簡単にゲームやメディアアートアプリが作れるライブラリです。
Kinectなどのセンサーにも対応しています。
Kinectとスラックラインのコラボした際にも活用しました!

今回、参考にしたソースコードはこちら
ソースコードを次のように編集し、拍手のタイミングでEnterキーが送信され、パーティクルが大きくなるように可視化しました。

# include <Siv3D.hpp>

void Main()
{
    Graphics::SetBackground(Color(20, 40, 60));
    Graphics3D::SetLight(0, Light::None());

    const Texture textureGrass(L"Example/Grass.jpg", TextureDesc::For3D);

    Array<Particle> particles(400);

    // フルスクリーン可能な解像度一覧を取得
    const Array<Size> resolutions = Graphics::GetFullScreenSize();

    for (auto& particle : particles)
    {
        const Vec3 pos = RandomVec3({ -20, 20 }, { -0.2, 4 }, { -20, 20 });

        particle = Particle(pos, 0.2, ColorF(1.0, 0.6, 0.0));
    }

    const Texture texture(L"Example/Particle.png", TextureDesc::For3D);

    Graphics3D::SetBlendStateForward(BlendState::Additive);
    Graphics3D::SetDepthStateForward(DepthState::TestOnly);
    bool enterFlag = false;

    const Size targetSize(1280, 720);

    while (System::Update())
    {
        if (Input::KeyF.clicked)
        {
            // フルスクリーンモード
            if (!Window::SetFullscreen(true, targetSize))
            {
                System::Exit();
            }
        }

        if (Input::KeyW.clicked)
        {
            // ウィンドウモード
            if (!Window::SetFullscreen(false, targetSize))
            {
                System::Exit();
            }
        }
        Graphics3D::FreeCamera();

        if ((Input::KeyEnter).pressed) {
            enterFlag = true;
        }
        else {
            enterFlag = false;
        }

        for (auto& particle : particles)
        {
            particle.pos.y += 0.01f;

            if (4.0 < particle.pos.y)
            {
                particle.pos.y -= 4.2f;
            }

            const ColorF color = HSV(particle.pos.y * 100.0);

            const float s = 1.0f - (Abs(2.0f - particle.pos.y) / 2.0f);
            if(enterFlag){
                particle.scaling.x = particle.scaling.y = 1.0f * s;
            }
            else {
                particle.scaling.x = particle.scaling.y = 0.2f * s;
            }

            particle.color.w = s;
            particle.color = Vector4D<float>(color.b, color.g, color.r, color.a);

        }

        Plane(40).draw(textureGrass);

        Graphics3D::DrawParticlesForward(particles, texture);
    }
}

結果

スライド送りクラッピーを接続して、実行すると…
particlappy.gif

インタラクションでもクラッピー、「パーティクルッピー」でした。

クラッピーでパーリーしたいやつらはKumaMCNについてこい!卍卍

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?