ぱらなのブログ

Siv3Dで3Dゲームを作ってみる 1

はじめに

DirectX11で3Dゲーム作って技術に触れてみようと思ったんですが、まずはSiv3Dで3Dを触ってみることにしました。

筆者の3Dに関する知識は本当に何もありません。そのため色々な点について間違っている可能性があります。

また、Siv3Dについての説明はググればいくらでも出てくると思うので省略します。




そして記事を書くことにした理由ですが、Siv3Dで3Dゲーム作ってる先人達の情報どれぐらいでてくるかなとググってみたらほぼヒットしなかったためです。あと開発途中で投げ出さないようにモチベ維持のため

これは良くないので、3Dゲーム開発を始める足がかりとして私も記事を書いてみることにしました。本当に何の知識もないので入門記事的なものを書くには向いているんじゃないかなと思ったのも理由のひとつです。上級者が書いた記事って本当に初歩的なポイントを知りたいのにスルーされていたりしますからね。

普段Siv3Dを使っているが2Dだけじゃなくて3Dにもちょっと興味が出てきた…ってレベルの人向けに、私の死闘記録を兼ねた記事を頑張って書いてみたいと思います。

リファレンスを読む

困ったときはまずリファレンスに目を通しましょう。

3D描画 · Siv3D/Reference-JP Wiki · GitHub

今後の方針・数値の意味を把握する

サークルでの提出物も兼ねて、簡単なシューティングもどきを作ってみることにしました。

内容的にはとりあえずカメラは固定で、マウスで照準をあわせた方向に弾が飛ぶ…って感じです。これだけでも全然簡単じゃない気がしてます。

さて床と壁を描画してみよう…と思ったのですが、いきなりつまづきました。

壁を描画するために必要な数値設定がわかりません。



回転させればいいやろ~ってだけなのですが、どこをどう回転させればいいのか分かりません。

ソースコードで実際に回転させてなんとなく把握することにしました。

# include <Siv3D.hpp>

void Main()
{
    double a = 0, s = 0, d = 0;

	while (System::Update())
	{
        if (Input::KeyA.pressed)
        {
            a += 1;
        }
        if (Input::KeyZ.pressed)
        {
            a -= 1;
        }

        if (Input::KeyS.pressed)
        {
            s += 1;
        }
        if (Input::KeyX.pressed)
        {
            s -= 1;
        }

        if (Input::KeyD.pressed)
        {
            d += 1;
        }
        if (Input::KeyC.pressed)
        {
            d -= 1;
        }

        if (Input::KeyF.clicked)
        {
            a = s = d = 0;
        }

        PutText(L"a = ", a, L"°").from(0, 0);
        PutText(L"s = ", s, L"°").from(0, 20);
        PutText(L"d = ", d, L"°").from(0, 40);

        Plane(Vec3(0, 0, 0), Vec2(10, 10))
            .asMesh()
            .rotated(Radians(a), Radians(s), Radians(d))
            .draw();
    }
}

rotated(90_deg, 0, 0)で壁になるようです。

なんとなく回転させられるようになったところで、短いですが本日はここまでです。

続きがあるといいな。