-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Reputeless edited this page Aug 12, 2016
·
62 revisions
"Siv3D" は C++ で楽しく簡単にインタラクティブなアプリケーションを作れるライブラリです。2D / 3D グラフィックスやオーディオを自在にコントロールし、Kinect や Leap Motion, カメラやマイクといった様々なデバイスを使った複雑なインタラクションを短いコードで書けます。
アプリケーション開発を楽しむための最良のツールです。
数行~数十行のコードでインタラクティブなアプリケーションを開発できます。短時間で結果が得られるため、大学や専門学校のプログラミング教育でも活用されています。
音楽の再生や画像の表示、テンポやピッチの変更、波形編集、画像加工、AR マーカーの検出、Twitter への画像投稿といった様々な処理を易しいコードで実現します。
Kinect, Leap Motion, マイク、Web カメラ、ペンタブ、ゲームコントローラ、マルチタッチ、Arduino など、10 種類以上の入力機器を、2, 3 行のコードの追加で活用できます。
すべてのコードが最新の C++11/14 規格で書かれているため、Siv3D を使うことで新しい C++ の書き方を学習できます。(最新の C++ について知りたい方は [こちら](http://www.slideshare.net/Reputeless/c11c14))
洗練されたコードで、あらゆるアイデアを明快に表現します。
図形と文字```cpp # include
void Main() { const Font font(30);
while (System::Update())
{
Circle(Mouse::Pos(), 100).draw();
font(Mouse::Pos()).draw(50, 200, Palette::Orange);
}
}
<img src="https://github.com/Siv3D/Reference-JP/blob/master/resource/siv3d/top2.gif?raw=true" width="320" height="240" align="left">
ペイント<br clear="left">
```cpp
# 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();
}
}
```cpp # include
void Main() { const Size blockSize(40, 20); const double speed = 8.0; Rect wall(60, 10); Circle ball(320, 400, 8); Vec2 ballSpeed(0, -speed);
Array<Rect> blocks;
for (auto p : step({ Window::Width() / blockSize.x , 5 }))
{
blocks.emplace_back((p*blockSize).moveBy(0, 60), blockSize);
}
while (System::Update())
{
ball.moveBy(ballSpeed);
wall.setCenter(Mouse::Pos().x, 420);
for (auto it = blocks.begin(); it != blocks.end(); ++it)
{
if (it->intersects(ball))
{
(it->bottom.intersects(ball) || it->top.intersects(ball)
? ballSpeed.y : ballSpeed.x) *= -1;
blocks.erase(it);
break;
}
}
for (auto const& block : blocks)
{
block.stretched(-1).draw(HSV(block.y - 40));
}
if (ball.y < 0 && ballSpeed.y < 0)
{
ballSpeed.y *= -1;
}
if ((ball.x < 0 && ballSpeed.x < 0) || (Window::Width() < ball.x && ballSpeed.x > 0))
{
ballSpeed.x *= -1;
}
if (ballSpeed.y > 0 && wall.intersects(ball))
{
ballSpeed = Vec2((ball.x - wall.center.x) / 8, -ballSpeed.y).setLength(speed);
}
ball.draw();
wall.draw();
}
}
<img src="https://github.com/Siv3D/Reference-JP/blob/master/resource/siv3d/top4.gif?raw=true" width="320" height="240" align="left">
対象定規<br clear="left">
```cpp
# include <Siv3D.hpp>
void Main()
{
const int32 N = 12;
Image image(Window::Size(), Color(20, 40, 60));
DynamicTexture texture(image);
Mouse::SetTransform(Mat3x2::Translate(Window::Center()));
while (System::Update())
{
if (Input::MouseL.pressed)
{
for (auto i : step(N))
{
Circular cs[2] = { Input::MouseL.clicked ? Mouse::Pos() : Mouse::PreviousPos(), Mouse::Pos() };
for (auto& c : cs)
{
c.theta = i % 2 ? -c.theta - TwoPi / N * (i - 1) : c.theta + TwoPi / N * i;
}
Line(cs[0], cs[1]).moveBy(Window::Center()).overwrite(image, 2, HSV(System::FrameCount(), 0.5, 1.0));
}
texture.tryFill(image);
}
else if (Input::MouseR.clicked)
{
image.fill(Color(20, 40, 60));
texture.fill(image);
}
texture.draw();
}
}
イラスト提供: [古古米](http://www.pixiv.net/member.php?id=583587) さん ```cpp # include
void Main() { Texture texture;
Array<Rect> faces;
while (System::Update())
{
if (Dragdrop::HasItems())
{
if (Image image{ Dragdrop::GetFilePaths()[0] })
{
faces = Imaging::DetectFaces(image, CascadeType::Anime);
texture = Texture(image);
Window::Resize(texture.size);
}
}
texture.draw();
const double a = Sin(Time::GetMillisec() * 0.005) * 0.5 + 0.5;
for (const auto& face : faces)
{
face.drawFrame(3, 3, ColorF(Palette::Red, a));
}
}
}
<img src="https://github.com/Siv3D/Reference-JP/blob/master/resource/siv3d/top6.gif?raw=true" width="320" height="240" align="left">
オーディオスペクトラム<br clear="left">
```cpp
# include <Siv3D.hpp>
void Main()
{
const Sound sound = Dialog::OpenSound();
sound.play();
while (System::Update())
{
const auto fft = FFT::Analyze(sound);
for (auto i : step(320))
{
RectF(i * 2, Window::Height(), 2, -Pow(fft.buffer[i], 0.6) * 1000).draw(HSV(240 - i));
}
}
}
```cpp # include
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);
}
}
}
}
}
<img src="https://github.com/Siv3D/Reference-JP/blob/master/resource/siv3d/top8.gif?raw=true" width="320" height="240" align="left">
地球<br clear="left">
```cpp
# 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);
}
}
- Siv3D の基本
- 図形を描く
- テクスチャを描く
- テキストを描く
- 文字列と数値の変換
- キーボード入力
- マウス入力
- サウンドの再生
- MIDI の再生
- ウィンドウと背景
- 図形のあたり判定
- 乱数
- ダイアログ
- ドラッグ & ドロップ
- アプリの状態
- テキストファイル
- INI, CSV, JSON
- バイナリファイル
- GUI
- アセット管理
- 画像編集
- Web カメラ
- マイク入力
- 経過時間の測定
- HSV カラー
- ファイルダウンロード
- 3D 描画
- 2D のレンダーステート
- 3D のレンダーステート
- パーティクル
- スクリーンショット
- アプリケーションの公開
- さらに学ぶには
- アプリランチャーを作ろう
- 音楽プレイヤーを作ろう
- 横スクロールゲームを作ろう
- ドット絵エディタを作ろう
- シーン遷移をサポートする SceneManager の使い方
- Siv3D ミニサンプル集
- タスクシステムを使う
- スケッチ
- 画像ビューアー
- オーディオスペクトラム
- マイク入力スペクトラム
- 文字色の反転
- 天気予報
- ドットお絵かき
- 15パズル
- ブロックくずし
- 時計
- 音楽プレイヤー
- ピアノ
- ライフゲーム
- シーン管理
- 地球
- 3Dシーン
- 3D交差判定
- Wooden Mirror
- シューティングゲーム
- Image to Polygon
- Sketch to Polygon
- 軌跡
- Plot3D
- テンポとピッチの変更
- 長方形の影
- Twitterクライアント
- Polygon to Mesh
- 3Dテキスト
- アプリ終了の確認
- 地形の生成
- アーカイブファイル
- GUIのアニメーション
- Aero Glassエフェクト
- Glitch
- リンクテキスト
- 付箋
- シーン切り替え(シルエット)
- MIDIシーケンサー
- 数つなぎ
- 画面を揺らす
- 対称定規
- aobench
- MIDIビジュアライザー
- 電卓
- 手書き文字認識
- 顔検出
- 音声合成
- Image to PhysicsBody