Play Siv3D!

ゲームとメディアアートのための C++ ライブラリ「Siv3D」

Siv3D

Siv3D は C++ で楽しく簡単にゲームやメディアアートを作れるライブラリです。Kinect や Leap Motion, カメラやマイクといった多くのデバイスに対応し、複雑なインタラクションを短いコードで書くことができます。2008 年から開発を始め、2012 年に α 版を公開、2013 年 9 月には IPA 未踏事業に採択 (2013 年度スーパークリエータ認定) 、2014 年 9 月に CEDEC に出展、2016 年 9 月に最新版 Siv3D August 2016 v2 をリリースしました。これまで 様々なゲームやアプリケーション が Siv3D で開発されています。現在 macOS/Linux に対応する マルチプラットフォーム版 を開発中です。

News

Siv3D Advent Calendar 2017 を開催中 2017.12.1
・Siv3D August 2016 v2 をリリースしました 2016.9.1
・Siv3D August 2016 をリリースしました 2016.8.27
新リファレンス がオープンしました 2016.8.10

Features

短いコード、少ない学習コスト
数行~数十行のコードで、音や画像を扱うインタラクティブなアプリケーションを開発できます。 短時間で面白い結果が得られるため、プログラミング教育での活用にも適しています。

音や画像のための豊富な機能
基本的な音楽再生や描画の機能に加え、テンポやピッチを変更する波形編集、顔や AR マーカーの検出、Twitter への画像投稿といった応用的な画像・音声処理を易しいコードで実現できます。

10 種類以上の入力デバイスに対応
Kinect, Leap Motion, マイク、Web カメラ、ペンタブレット、ゲームコントローラ、マルチタッチ、Arduino など、10 種類以上の入力デバイスを、わずか 2, 3 行のコードの追加で活用できます。


最新の C++ を学べる
ライブラリやサンプルはすべて最新の C++11/14 規格で書かれています(最新の C++ について知りたい方は こちら)。Siv3D を使うことで新しい C++ の書き方を学習できます。

すぐに始められる
Siv3D をインストールすると Visual Studio のプロジェクト作成メニューに Siv3D の項目が追加されます。ダウンロードから最速 30 秒でサンプルをビルド・実行できる簡単セットアップです。

サポートとコミュニティ
リファレンスには 300 以上のサンプルコードが掲載され、随時更新されています。使い方に困ったときにはフォーラムや Twitter でサポートを受けられます。ユーザのための勉強会も開いています。


わずか数行のコードから、グラフィカルでインタラクティブなアプリケーションが生まれます。

# include <Siv3D.hpp>

void Main()
{
	const Font font(30);

	while (System::Update())
	{
		Circle(Mouse::Pos(), 100).draw();

		font(Mouse::Pos()).draw(50, 200, Palette::Orange);
	}
}

対応する画像形式は 10 種類。画像ビューアも簡単に作れます。

# include <Siv3D.hpp>

void Main()
{
	const Texture texture(L"Example/Windmill.png");

	while (System::Update())
	{
		texture.draw(100, 50);
	}
}

お絵かきソフトを作るのも朝飯前です。ペンの色や太さを変えたり、画像を加工・保存する機能も、数行コードを追加すれば実装できます。

# include <Siv3D.hpp>

void Main()
{
    Image image(Window::Size(), Palette::White);

    DynamicTexture texture(image);

    while (System::Update())
    {
        if (Input::MouseL.pressed)
        {
            Line(Mouse::PreviousPos(), Mouse::Pos()).overwrite(image, 8, Palette::Orange);

            texture.fill(image);
        }

        texture.draw();
    }
}

点、線分、長方形、円、三角形、四角形、多角形など様々な図形型が用意されています。あたり判定や包含判定はたった 1 行で記述できます。

# include <Siv3D.hpp>

void Main()
{
	const Rect rect(20, 20, 200, 100);

	const Circle circle(150, 300, 100);

	const Polygon star
	{
		{ 430, 100 }, { 470, 240 },
		{ 610, 240 }, { 505, 325 },
		{ 545, 460 }, { 430, 380 },
		{ 315, 460 }, { 355, 325 },
		{ 250, 240 }, { 390, 240 }
	};

	while (System::Update())
	{
		const Circle player(Mouse::Pos(), 30);

		rect.draw(player.intersects(rect) ? Palette::Red : Palette::Yellow);

		circle.draw(player.intersects(circle) ? Palette::Red : Palette::Yellow);

		star.draw(player.intersects(star) ? Palette::Red : Palette::Yellow);

		player.draw();
	}
}

Kinect や Leap Motion といった最新デバイスを驚くほど簡単に扱えます。プレイヤーのアクションを使ったゲームを今すぐ作り始められます。

# include <Siv3D.hpp>

void Main()
{
    KinectV2::Start();

    DynamicTexture depthTexture;

    std::array<Optional<KinectV2Body>, 6> bodies;

    while (System::Update())
    {
        if (KinectV2::HasNewDepthFrame())
        {
            KinectV2::GetDepthFrame(depthTexture);
        }

        if (KinectV2::HasNewBodyFrame())
        {
            KinectV2::GetBodyFrame(bodies);
        }

        depthTexture.draw();

        for (const auto& body : bodies)
        {
            if (body)
            {
                for (const auto& joint : body->joints)
                {
                    Circle(joint.depthSpacePos, 15).drawFrame(6.0, 0.0, Palette::Red);
                }
            }
        }
    }
}

5 分もあれば音楽プレイヤーを作ることができます。コードは Qiita | Siv3D で音楽プレイヤーを作る で紹介しています。

3D グラフィックスを表現するのに難しい知識は必要ありません。シーンには最大 128 個の光源を置くことができ、フォグやパーティクルを使ったエフェクトの演出ができます。

# include <Siv3D.hpp>

void Main()
{
    const Texture texture(L"Example/Earth.jpg", TextureDesc::For3D);

    while (System::Update())
    {
        Graphics3D::FreeCamera();

        const double yaw = Time::GetMillisec() * -0.0001;

        Sphere(10, Quaternion::Yaw(yaw).roll(-23.4_deg)).draw(texture);
    }
}