« 2018年6月 | メイン | 2020年3月 »

2018年11月

2018年11月14日 (水)

OpenGL 最初の一歩

前回の続きです。

まず、新しいプロジェクトを作ります。テスト版の作業です。
メニューから「ファイル」-「新しいプロジェクト」とクリックして、出てきたウィンドウの
場所を
..¥Visual Studio 2013¥OpenGL¥
名前を test0 とし
上部の選択肢から「インストール済み」-「テンプレート」-「visual C++」
-「CLR」と展開して「CLR コンソール アプリケーション」をクリックして
「OK」をクリックしてください。
(「コンソール アプリケーション」でなくする方法は、後述します。)

以下のソースを test0.cpp にコピペしてください。
----
#include "stdafx.h"
#include <gl/freeglut.h>

void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  glFlush();
}

void initGL(void)
{
  glClearColor(0.0, 0.0, 1.0, 1.0);
}

int main(int argc, char *argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGBA);
  glutCreateWindow(argv[0]);
  glutDisplayFunc(display);
  initGL();
  glutMainLoop();
  return 0;
}
----

#include <gl/glut.h>
ではなく
#include <gl/freeglut.h>
でなくてはならないといけません。
「include ファイルを開けません。'gl/glut.h':No such file or directory」という
エラーメッセージに、私はこれで2日悩みました。

また #include "stdafx.h" というのはすべてのインクルードファイルの
前に記述しなければならないそうです。

そしてビルドしてみてください。 win32 か x64 にどちらか
環境にあった方にしてください。
Releases/Debug はどちらでも構いません。両方ビルドしても構いません。

そして問題なくビルドされたら、メニューから「デバッグ」-「デバッグなしで開始」
してみてください。青い四角いウィンドウが表示されたら成功です。

しかしコンソール画面も表示されるのはじゃまです。
これを表示しないようにしてみたいと思います。まず
int	main(int argc, char *argv[]) を
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
	LPSTR lpszCmdLine, int nShowCmd) に書き換えます。
そして argc, argv を __argc, __argv に書き換えます。
(元の main 関数を /* */ でコメントして、コピペで書き直すと
いいかもしれません。)

すると以下のようになります。
----
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
	LPSTR lpszCmdLine, int nShowCmd) {
	glutInit(&__argc, __argv);
	glutInitDisplayMode(GLUT_RGBA);
	glutCreateWindow(__argv[0]);
	glutDisplayFunc(display);
	initGL();
	glutMainLoop();
	return 0;
}
----
そして右側の ソリューション エクスプローラ の test0 (プロジェクト)を
右クリックして「プロパティ」-「構成プロパティ」-「リンカー」-「システム」
と開いて「サブシステム」の右端へマウスを持っていって、クリック、下向き記号が
あらわれたらそれをクリック、 Windows(/SUBSYSTEM:WINDOWS) を選択、

そしてビルドし直し、メニューから「デバッグ」-「デバッグなしで開始」を
実行、以上です。

OpenGL 準備編

ここでは OpenGL の Visual Studio 2013 での入門を、覚え書き程度に書いておきます。
なお私の環境では 64bit の windows10 なので、32bit のOSでは細かいところが
違うかもしれません。また Visuai Studio 2013 の基本的な設定は、
(Windows sdk 7.1、x64 環境など)済んでいるという前提です。

インストールの仕方は以下のページを参考にしました。
「GLUTによる「手抜き」OpenGL入門」
https://tokoik.github.io/opengl/libglut.html
(の「2.3 Windows 系 OS にインストールする」より)

まず以下のページから「freeglut-3.0.0.tar.gz」をダウンロードします。
http://freeglut.sourceforge.net/

これを展開するのに、例えば「lhaplus」などで展開することが出来ます。
https://forest.watch.impress.co.jp/library/software/lhaplus/
私はドキュメントフォルダに「 Visual Studio 2013 」があったので
そこに展開したフォルダ「freeglut-3.0.0」を「切り取り」「貼り付け」しました。


これだと sln ファイルが含まれてないので「CMake」を使いました。
https://cmake.org/download/
「Download Latest Release」をクリックし、64bitプログラミングがしたいのなら
cmake-3.13.0-rc3-win64-x64.msi をダウンロードし、
(32bit プログラミングなら cmake-3.13.0-rc3-win32-x86.msi を)ダブルクリックし、
インストール、デスクトップにある CMakeアイコンをダブルクリックして、起動します。
「Browse Source」に freeglut-3.0.0 フォルダを指定、
(C:¥Users¥(ユーザー名)¥Documents¥Visual Studio 2013¥freeglut-3.0.0 )の形になります。
なお、以下では C:¥Users¥(ユーザー名)¥Documents などのパスは ...¥ などと省略することにします。)
「Browse Build」にその下の build というフォルダを指定します。
(...¥freeglut-3.0.0¥build)
「Configure」をクリック Visual Studio 2013 を選択、
「Use default native compilers 」を選択、「Finish」をクリックします。
そして「Generate」をクリックすると、sln ファイルなどが生成されます。


freeglut.sln は「Browse Build」に指定したフォルダの中に生成されます。
これをダブルクリックして Visual Studio 2013 を起動してください。
そしてメニューの「Release/Debug」はデバックするかどうかで適当に決めてください。
64bit で、ビルドする場合は「win32」をクリックして x64 を選択してください。
もし x64 が出てこない場合は「新規作成」をクリックしてください。
(CMake で選択したものに合わせてください。)
そしてメニューから「ビルド」-「ソリューションのビルド」をクリックして
実行してください。

以下の4つのヘッダファイル
glut.h freeglut.h freeglut_std.h freeglut_ext.h
が「Browse Source」で指定したフォルダの include\GL にあるので
(例: ...¥Documents¥Visual Studio 2013¥freeglut-3.0.0¥include¥GL )
それを 32bit OS 版では
C:¥Program Files¥Windows Kits¥8.1¥Include¥um¥gl
( gl というフォルダがなければ作成してください。)
64 bit版では
C:¥Program Files (x86)¥Windows Kits¥8.1¥Include¥um¥gl
にコピーしてください。

「Browse Build」で指定したフォルダの中の lib フォルダの中の Release/Debug
フォルダの中の freeglutd.lib, freeglut_staticd.lib を
OSが 32bit 版なら
C:¥Program Files¥Windows Kits¥8.1¥Lib¥winv6.3¥um¥x86 に
OSが64bit版なら、CMake に合わせて
Win32 版は
C:¥Program Files (x86)¥Windows Kits¥8.1¥Lib¥winv6.3¥um¥x86
x64 版は
C:¥Program Files (x86)¥Windows Kits¥8.1¥Lib¥winv6.3¥um¥x64
にコピーします。

また「Browse Build」で指定したフォルダの中の bin フォルダの中の Release/Debug
フォルダの中の freeglutd.dll を同様に OSが 32bit 版なら
C:¥Windows¥System32 に
OSが 64bit版なら、
Win32 版は
C:¥Windows¥SysWOW64
x64 版は
C:¥Windows¥System32
にコピーします。

これで準備は完了です。 なお OSが 64bit のとき、 win32 版と x64 版と共存させる
ことも可能です。私はCMake x64 版を先にインストールしていたので
それのアンインストール、CMake win32 版のインストール、
freeglut-3.0.0.tar.gz の解凍をし直して、
freeglut-3.0.0 を freeglut-3.0.0-86 に変更して
...¥Documents¥Visual Studio 2013 にコピペして
CMake し直し等しました。

次回は簡単なプログラムを作って見たいと思います。