こんにちは。Yukiです。
今回は、OpenGL(GLUT)を使ってみたいと思います。
OpenGL(GLUT)とは
OpenGL(Open Graphic Library)とは、グラフィック関係のライブラリです。
映像や画像を出力することは、かなり大変なのですが、それらを簡単に出来るようにしたライブラリです。
ただ、OpenGL自体はOSに依存しにくい仕様だったのですが、それでもWindowsやLinuxなど、マウスポインタの取得方法やキーボードの取得方法などが違うため、そこら辺を、若干設定しないといけません。そこら辺を簡単に出来るようにして、OS依存しなくしたのがGLUTです。(若干違うような気もしますが)
まあややこしいですが、GLUTを使うと、OpenGLを簡単に使えるようになります。
(ただし、GLUTを使うことで、OpenGLの複雑な機能が使えなくなってしまうという問題もあります。が、今回はそんなに難しいことをしないので、GLUTを使用します。というかそんな難しいことをするなら、Unityを使ったほうが楽な気がします)
ちなみに、似た名前でOpenCVというやつもありますが、あっちは、画像処理や解析・機械学習に特化したライブラリです。(用途が違います)
早速やってみる
今は非推奨な方法になってしまいましたが、Visual Studioで開発することができます。
(具体的には、ライブラリがNuGetで取得可能)
今回はVisual Studio Community 2022で開発します。(今後はVSと略します)
まずは、VS2022を開き、C++プロジェクトを作ります。
もしない場合は、下の”さらにツールと機能をインストールする”から、C++によるデスクトップ開発を選択して、インストールします。
名前などは自由に変更してください。
次にNuGetからGLUTをインストールします。
参照を右クリックし、Nugetパッケージの管理…を選択します。
その後、出てきた検索欄に”GLUT”と入力し、nupenglを選択。インストールします。
次に、ソースファイルを新規作成します。
ソリューションエクスプローラーのソースファイルを右クリックして、追加、新しい項目を選択します。
今回はmain.cppとします。
これでGLUTの設定はOKです。次に、C++のコンパイル・実行が出来るか確かめます。
(ここはスキップしてもOK)
#include <stdio.h>
int main(void){
printf(“Hello World!”);
return 0;
}
上にあるローカル Windows デバッガー(再生ボタンみたいなやつ)を押します。
OKですね。(誤字っている…)
次に、GLUTのテストプログラムを書いてみます。
今回はテストなので、黒い背景に白いブロックを描画してみます。
#include <stdio.h>
#include <GL/glut.h>
//ウィンドウ操作をする際は、ここで書き換えるための関数
void display(void);
int main(int argc, char* argv[]) {
//OpenGL(GLUT)セットアップ
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(640, 640);
//ウィンドウを生成 タイトル名を設定
glutCreateWindow("GLUT Test");
//display関数でdisplay操作
glutDisplayFunc(display);
glutMainLoop(); //無限ループ
}
//ウィンドウを操作する際は、ここで書き換える
void display(void) {
//背景色を黒に設定
glClearColor(0, 0, 0, 0);
//長方形を描画
//塗りつぶし
glBegin(GL_POLYGON);
//白
glColor3d(1, 1, 1);
//長方形の座標を設定
glVertex2d(-0.4, 0.4);
glVertex2d(0.4, 0.4);
glVertex2d(0.4, -0.4);
glVertex2d(-0.4, -0.4);
//描画終了
glEnd();
//ディスプレイに出力
glFlush();
}
結果はこんな感じになりました。
ちなみに、
glBegin(GL_POLYGON)で描画開始
glColor3dで色指定(0~1まで double)
glVertex2dで、座標指定です。-1から1まで(double)になります。
描画が終わったら、glEnd();とすることで、描画終了になります。
glFlush();で画面に出力されます。
今後
今後は、スイカゲームもどきを作っていくために、色々やってみたいと思います。
余談
最近A列車で行こうが面白くて、遊んでます。
いつか、ブログに書きたいです。(下手すぎて破産しちゃう…)