SDLやってみた

目次

はじめに

この記事は Kogakuin Univ Advent Calendar 2019 - Adventar12日目です。

 いやーなんと三個目のアドベントカレンダー登録になりました!何個も投稿させていただけて嬉しい限りです!誰もやらないから仕方ないね。政治経済の話、小説とイロモノ枠として投稿していたわけですが、今度こそは情報学部らしく、KogCoderらしく、ライブラリを使ってみたよという話をしていきたいと思います。

そもそもSDLとは

 そもそも、SDLをご存じでない?方もいらっしゃるのかなと思うのでSDLについてまずは説明していきたいと思います。うっせーー知ってるに決まってるだろバーカという方は目次から次に飛んで下さい(じゃあ、そもそも読むなよ)

 SDLの正式名称はSimple Dynamic Libraryと言って主にゲーム制作に使われるライブラリーです。C言語で書かれていて、SDL内で使われているAPIDirectXOpenGL、Vulkanと多岐にわたっており、それを内部で自動的に切り替えてくれたり自分で切り替えられるのでいろいろなプラットフォームで動くのが特徴です。

すばらしい

 SDL自身でも十二分にゲームプログラミングをすることが可能なのですが、なんとコイツにはSDL_imageSDL_mixerSDL_netSDL_ttfSDL_rtfSDL_gfxと素晴らしい補助ライブラリの数々がありこいつ等をインクルードすると更に楽にゲームを作ることが可能です。

 昨今ゲーム開発でよく使われているDirectXとWindowsAPIの組み合わせと、SDLとその補助ライブラリで実際にゲームを作るうえで必要な動作をさせるコードを書いて比べてみましょう。

実際比べてみる

Windowの作成
DirectX11&Windows

HRESULT DirectX11Manager::Init(HINSTANCE hInstance, int cCmdShow)
{
    WNDCLASSEX wcex = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, hInstance, NULL, NULL, NULL, NULL, "DirectX11 Template", NULL };
    if (!RegisterClassEx(&wcex)) {
        return E_FAIL;
    }

    RECT rc = { 0, 0, 1270, 760 };

    hWnd = CreateWindow(wcex.lpszClassName, "DeferredRenderer", WS_DLGFRAME,
        CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top,
        NULL, NULL, hInstance, NULL);
    if (!hWnd) {
        return E_FAIL;
    }

    ShowWindow(hWnd, cCmdShow);
    UpdateWindow(hWnd);

SDL

SDL_Window* window = NULL;

window = SDL_CreateWindow("Draw Text Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

画像の表示
Directx11&Windows

#include <windows.h>
#include <tchar.h>
#include <d3d11.h>
#include <d3dx11.h>	//追加

#pragma once
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "d3dx11.lib")	
	//ポリゴン頂点構造体
	struct Vertex3D {
		float pos[3];	//x-y-z
		float col[4];	//r-g-b-a
		float tex[2];	//x-y
	};
	const int TYOUTEN = 4;	//ポリゴンの頂点数

	//頂点データ(四角ポリゴン1枚)
	Vertex3D hVectorData[TYOUTEN] = {
		//500x811
		{ { -0.27f, +0.75f, +0.5f }, { 1.0f, 1.0f, 1.0f, 1.0f }, {0.0f, 0.0f} },
		{ { +0.27f, +0.75f, +0.5f }, { 1.0f, 1.0f, 1.0f, 1.0f }, {1.0f, 0.0f} },
		{ { -0.27f, -0.75f, +0.5f }, { 1.0f, 1.0f, 1.0f, 1.0f }, {0.0f, 1.0f} },
		{ { +0.27f, -0.75f, +0.5f }, { 1.0f, 1.0f, 1.0f, 1.0f }, {1.0f, 1.0f} }
	};
	D3D11_INPUT_ELEMENT_DESC hInElementDesc[] = {
		{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
		{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 4*3, D3D11_INPUT_PER_VERTEX_DATA, 0 },
		{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 4*3 + 4*4, D3D11_INPUT_PER_VERTEX_DATA, 0 }
	};
	//テクスチャー読み込み
	ID3D11ShaderResourceView* hpShaderResourceView = NULL;
	if(FAILED(D3DX11CreateShaderResourceViewFromFile(hpDevice, _T("picture.png"), NULL, NULL, &hpShaderResourceView, NULL))){
		MessageBox(hWnd, _T("D3DX11CreateShaderResourceViewFromFile"), _T("Err"), MB_ICONSTOP);
		goto End;
	}

	//そのテクスチャーをコンテキストに設定
	ID3D11ShaderResourceView* hpShaderResourceViews[] = { hpShaderResourceView };
    hpDeviceContext->PSSetShaderResources(0, 1, hpShaderResourceViews);

SDL

#include <SDL.h>

int main(int argc, char* argv[]){
	SDL_Surface* image;
	SDL_Rect rect, scr_rect;

	SDL_Init(SDL_INIT_EVERYTHING);

	SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);

	/* 画像読み込み */
	image = SDL_LoadBMP("picture.bmp");

	/* 画像の矩形情報設定 */
	rect.x = 0;
	rect.y = 0;
	rect.w = image->w;
	rect.h = image->h;

	/* 画像配置位置情報の設定 */
	scr_rect.x = 0;
	scr_rect.y = 0;

	/* サーフェスの複写 */
	SDL_BlitSurface(image, &rect, SDL_GetVideoSurface(), &scr_rect);

	/* サーフェスフリップ */
	SDL_Flip(SDL_GetVideoSurface());


	SDL_FreeSurface(image);

	SDL_Quit();

	return 0;
}

まあ、見ての通り圧倒的にSDLの方が楽です。素晴らしいね!

感想やまとめ

DirectXの動作はうまく書ければ軽快に動作しますが、SDLは安定して軽快に動作する上どのプラットフォームでも動くので非常に良かったです。しかも、書く量が少なくて済む上、Directに弄れました。Dxlibから一歩進みたい人にもオススメです。以上、SDLやってみたでした。

日本経済どころか世界経済がヤバイと思うお話

目次

はじめに

この記事は Kogakuin Univ Advent Calendar 2019 - Adventar4日目です。

 え~超絶久しぶりにブログを書くわけですが、同じプロジェクトの人がほとんど書いているので圧力を感じてこうして書いています。プログラムの話ばかりでつまらないので、今回は経済的なお話をしようと思います。あくまでも一つの意見ということを忘れないでください。←この視点はなんでも重要です。

 まあ、流石に安倍首相がああ言っていますが日本経済がヤバイことは皆さん気づいていると思います。ですが、世界経済もヤバイです。なぜ、ヤバいと思うのか。ヤバくなってしまった原因。僕たち理系はどうすればいいのかについて話して行きたいと思います。

ヤバいと僕が考える理由

 箇条書きにするとこんな感じです。上から順に説明していきたいと思います。

米国債の逆イールドカーブが数か月前に出現

  米国債の逆イールドカーブってなに?というと、米国債の長期利回り率と短期利回り率が逆転してしまう現象です。普通は長期の方が美味しい思いが出来ると思って投資家は買います。短期でリスクがない方が儲けられないと思って投資家は買いません。するとその通りに長期の方が儲けられるようになるわけです。

 ですが、投資家たちがそろそろ国ヤバくね?と思うとどうでしょう。短期でリスクがない方を選んだ方が儲かります。すると、みんなが短期を買うので短期の利回りが高くなるわけですね。

 じゃあ頭のいい投資家たちがヤバいと思ったからヤバいの?というと違います。もちろん、国債の短期の借り入れコストが長期の借り入れコストよりも高くなっていますよね?すると、銀行が企業に貸し出すのを渋ります。国債を元手に(正確には違いますが)貸し出しているので。すると、企業は銀行からお金を借りる際の利息が高くなっているので、経営者は投資を抑制あるいは凍結します。もちろん、銀行から一般消費者が借り入れするコストも上昇しているので、経済の3分の2以上を占める個人消費も減速するわけです。

 更に、そうすると企業側も消費者が物を買ってくれないので苦しくなります。するとリストラします。消費者が物を買えなくなります。という無限ループに陥るわけです。傾向としては逆イールドカーブのまま12─24カ月経つと景気が後退するらしいです。大変。一時的には解消されたようですがどうなるんでしょうね。

米国の中古住宅販売の件数の下落

 そもそも、なんで住宅の話出てくるの?と思う方いるかもしれません。ですが、意外と簡単な理由です。

  一般消費者の一番大きな額の投資が家の購入だから

 うん、すごく単純明快。じゃあ下落が何で問題なのか。要するに住宅が売れてないってことなんですね。更に言えば一番大きな額の投資が出来ていない。ということは、消費者の持っているお金は.......

 しかも価格は上がっているらしい。それってバブル崩壊した時と似ているらしいですね!

米国の株価推移が世界恐慌前と酷似

 文字ばっかでも疲れちゃうので(主に筆者が)図で示したいと思います。ドーン!

f:id:kangaeyou:20191201224646p:plain

 赤が世界恐慌前で黒が現在。現在は2019年なので220ドル越え程度の下落で回避出来ていることがわかっているわけですが、恐ろしいですね。結局何なんだよって?ごめん、書いてる途中に古いことに気づいた。今も順調に上がってるわ。トランプが紙幣刷りまくってインフレにさせているから。どっかの国と似てるな。

世界が金を刷りすぎて債務バブル状態

 さっきの話題でアメリカと日本が紙幣刷りまくった話をしましたが世界と書いている通り、国際的に金融緩和しまくるのがトレンドです。刷りまくっている国について説明していきます。

 米国も金融緩和しまくって危ない状態なのにまだ金融緩和を続けています。中国との関税合戦のせいでアメリカの実質GDP率も2%を切っています。

 日本は言わずもがな。安倍首相が財政出動じゃなくてインフレにびびりただ金を刷って銀行の日本銀行の口座の中の金を増やしただけなので機能せず、債務だけが膨れ上がりました。デフレなのに債務だけ膨れ上がるってどういうことだよ。

  中国は能動的に金を刷りまくって、企業に配りまくり成長させています。それでも鈍化してきたのか公式発表ではGDP成長率が6%との発表ですが、アナリストによる分析によると1.7%だそうです。

 EUアメリカがやっているなら大丈夫とかいう意味の分からないノリで刷っています。ギリシャ危機は有名な事故ですが実はメインのドイツでもヤバいことが起こっており、ドイツ銀行が破綻しかけたんですね。なんとか防ぎましたが二度も起こったトラブルで追ったダメージは.....

 と、このように経済が成長していないにも関わらず金を刷るという状態なわけですね。各国の債務は金を刷っているので膨らんでいますが返す当てがない状況です。あちゃーー。

と、明らかにヤバイ理由について述べてきましたが、じゃあ原因なんなの?というところについて説明していきたいと思います。

ヤバくなってしまった原因

  理解している方はこの記事を見るとある一貫性を見出せると思います。原因が金の刷りすぎ(金融緩和のしすぎ)によるものということです。そもそも逆イールドカーブも金を刷りすぎて国債の価値が減ったのが原因ですし、住宅販売件数の下落もインフレで価格はあがっているのに消費者にお金が回っていないのが原因。債務バブルもまんま金の刷りすぎが原因です。

(日本以外は)金刷りすぎや!

僕たち理系はどうすればいいのか

 理由を見ればわかりますが理系として生きようとしている以上、どんな天才でも直接的に関与するのは不可能です。なので今すぐ東大文一(経済学部)に入りましょう!

んなの無理だわ

 ということで、現実的な対象方法を教えます。めちゃくちゃ技術をため込んで革新的なサービスを作って企業するか、有能な人とのネットワークを作りまくって起業しましょう。それで起業して世界恐慌前までに資産家になっていれば大丈夫です。恐慌が来たら社員をリストラするだけであなたは生き残れます。ね、簡単でしょう?

最後に

 久しぶりのブログ疲れたわ!しかも頭も使いつつ三千文字程度も書かせやがって誰だこの話題を選んだ奴は!これに反論できるそこのあなた。有用なのでコメントに書きましょう。経済のことわからないって人、理系学校なので割といると思います。

 ですが、山に引きこもる仙人出ない限り経済はあなたたちにも重要です。これに反論しようという気持ちで知識をつけて頂けたら幸いです。後半端折ってる気がするのは気のせいです!!!!!!!!