読者です 読者をやめる 読者になる 読者になる

WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

GLUTでOpenGLに挑戦

OpenGL ES

今回のエンジニアブログを担当いたします、佐藤です。

私は学生の時、授業でやったOpenGL ESがとても苦手でした。
その後も何度か参考書をみたりしてOpenGLを勉強しようとしましたが
なかなか思うようにいかず、自然とOpenGLを避けるようになってしまっていました。

しかし、いつまでも避けていても良いことは無いので思い切って当エンジニアブログで数々のOpenGLの記事を掲載されている小瀬さんにレクチャーして頂きながら再度OpenGLに挑戦しました!

今回は、GLUT(OpenGL Utility Toolkit)というとても簡単にOpenGLを使用できるライブラリを使用していきます。

Mac OS XでGLUTを使用する (Xcode)

Xcodeを使って、MacでGLUTを使用します。

GLUTをMacで使用する方法は調べてみるといろいろ出てきますが、
私が今回教えて頂いた方法をご紹介させて頂きます。

1.新規プロジェクトを作成

テンプレートはCommand Line Toolを選択します。

スクリーンショット 2014-03-14 1.39.58

今回はC++で開発をしていきます。

2.フレームワークを追加する

スクリーンショット 2014-03-14 2.00.53

Build Phases → Link Binary With Librariesの「+」ボタンでフレームワークを追加します。

追加するフレームワークはGLUT.frameworkOpenGL.frameworkです。

これでプロジェクトの準備は完了です。

実際にGLUTで描画をしてみる

実際にGLUTを使って描画をしてみました!

#include <GLUT/glut.h>  
  
void display(){  
  
 glClear(GL_COLOR_BUFFER_BIT);  
  
 glColor3f(1.0, 0.0, 0.0);  
  
 // 片面表示を有効にする  
 glEnable(GL_CULL_FACE);  
  
 // 裏面を表示しない  
 glCullFace(GL_BACK);  
  
 glBegin(GL_TRIANGLES);  
  
 glVertex2d(0.0, 0.9);  
  
 glVertex2d(-0.9, -0.9);  
  
 glVertex2d(0.9, -0.9);  
  
 glEnd();  
  
 glFlush();  
  
}  
  
void init(){  
  
 glClearColor(1.0f, 1.0f, 0.0f, 1.0f);  
  
}  
  
int main(int argc, char * argv[]){  
  
 glutInit(&argc, argv);  
  
 glutInitDisplayMode(GLUT_RGBA);  
  
 glutCreateWindow("GLUTSample");  
  
 glutDisplayFunc(display);  
  
 init();  
  
 glutMainLoop();  
  
 return 0;  
  
}

ヘッダファイルのインクルードをWindowsやLinuxでは #include <GL/glut.h>と書くらしいのですが、
Macでは #include <GLUT/glut.h>と表記するので注意が必要です。

このサンプルではmainで
GLUTの初期化 → ディスプレイの表示モードの設定 → ウィンドウの作成 → 描画する関数の指定 → 画面の色指定 → イベントループ
という流れを行っています。

display()で描画する内容を作成しています。
図形はBegin()〜End()までの間にx,yともに-1〜1までの範囲で座標を指定をします。

サンプルでは三角形を描画しています。
三角形は頂点から反時計回りになっているのが表なので、わかりやすいようにglCullFace(GL_BACK)で裏面を表示しないようにしています。

スクリーンショット 2014-03-14 3.16.49

三角形の色をglColor3f(RGBをGLfloatで指定)で指定していますが、ほかにも
glColor3d(GLdoubleで指定) , glColor3i(GLintで指定) , glColor3b(GLbyteで指定)
など、いろいろあるそうです。

ここまでが、今回私が勉強した内容でした。

以前に勉強した時よりもずっと簡単でわかりやすくできました!
この調子で少しずつ苦手を解消していきたいなと思います!