こんにちは。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列車で行こうが面白くて、遊んでます。

いつか、ブログに書きたいです。(下手すぎて破産しちゃう…)