フェムトセカンド #七味とーがラジオ / @melonsode

The Destination is unknown. The Journey is the Reward.
Author: 野澤真一 / NOZAWA Shinichi , version 2.0220330 / Podcast: 七味とーがラジオ / twitter: @melonsode

MacでOpenGLのプログラムを始める方法

|

カテゴリ:

MacでOpenGLのプログラムを始める方法を紹介します。

OpenGLは2D, 3Dのグラフィックスの描画に特化したライブラリで、
C言語などから利用できます。
Macには最初からインストールされているので、
わざわざOpenGLとそれを動かすためのGLUTを
自分でインストールする必要はありません。(少なくとも10.5は。)

環境:
Mac OS X Lepard 10.5.6
1.8GHz Intel Core 2 Duo
MacBook Air

1.Xcodeを起動する。

2.新規プロジェクトをつくる

3.StandardToolを選択し、作成

Command Line Utilityの中のStandard Utilityを選択。
(プログラムをC言語で行いたいときはこれを選ぶけれど、
他の言語でやりたいときはこれじゃないんだと思う)

プロジェクト名は適当につけてください。
場所は例えば「~/Desktop/hogehoge」とすると
デスクトップ上のhogehogeというフォルダに保存されます。

4.既存のフレームワークを追加:OpenGLとGLUT

パネルが出てくるので、ギヤのマークのプルダウンをクリックして、
「追加 > 既存のフレームワーク...」をクリック。

フレームワークの中からGLUTとOpenGLを選択。(2回追加を行う)

追加されると次のようになる。

5.main.cにOpenGLとGLUTのヘッダを付け加える

OpenGLとGLUTのヘッダは

#include <OpenGL/gl.h>
#include <GLUT/glut.h>

となる。ここはWindowsと異なるので注意。

ヘッダを付け加えるのは別にmain.cじゃなくてもいいと思うけど、
(例えばmain.hというファイルを作ってそこに書く)
僕はC言語は詳しくないのでこうしています。

これで少なくともコンパイルはできるはずです。

6.コンパイルしてみる

Xcodeのコンソールを表示して(実行 > コンソール)、

「ビルドして実行」を押してみましょう。

コンソールに「Hello, World!」と表示されるはずです。

これでうまくコンパイルされるなら、
main.cの中で自由にGLUTとOpenGLのライブラリが使えるはずです。

OpenGLのプログラミングに関しては、
例えば以下のページを参考にしてみてください。

GLUTによる「手抜き」OpenGL入門

補足

OpenGLは当然ながらXcodeを使わなくてもできます。

例えばテキストエディタでC言語のプログラムをするときは、
プログラムの最初に

#include <OpenGL/gl.h>
#include <GLUT/glut.h>

というのを付け加えて、
コンパイルするときに、

cc -framework OpenGL -framework GLUT -framework Foundation program.c

というような引数をいろいろつけてコンパイルすればいい、のだと思うけど、
僕はC言語のプログラムには疎いので、
もしかしたらまちがっているかもしれない。

Xcodeを使うメリットはそう言ったコンパイル時の引数のことを
気にしなくても「フレームワークを追加」という操作で、
それが自動的に実現されることと、
プログラムのエラーを分かりやすく教えてくれるところと、
あとはプログラムが致命的なエラーを内包していても、
被害を小さく収めてくれるなど点があります。

ぼやき

僕はC言語は苦手で嫌いなので、
本当はOpenGLを得意なPerlで扱いたい。

PerlからOpenGLを扱うためのモジュールがあって、
それをPOGLという。

http://graphcomp.com/opengl/
http://search.cpan.org/dist/OpenGL/

これを使いたいのだけど、モジュールのインストールがうまくいかない。

cpan install OpenGL

とやって、CPANからこのモジュールをインストールしようとするのだけど、
コンパイルでこけてしまう。

どなたかわかるかた教えてください。

cpan> install OpenGL CPAN: Storable loaded ok Going to read /Users/shinichi/.cpan/Metadata Database was generated on Fri, 17 Jul 2009 09:27:05 GMT Running install for module OpenGL Running make for B/BF/BFREE/OpenGL-0.57.tar.gz CPAN: Digest::MD5 loaded ok CPAN: Compress::Zlib loaded ok Checksum for /Users/shinichi/.cpan/sources/authors/id/B/BF/BFREE/OpenGL-0.57.tar.gz ok Scanning cache /Users/shinichi/.cpan/build for sizes Deleting from cache: /Users/shinichi/.cpan/build/Parse-RecDescent-1.94 (16.5>10.0 MB) Deleting from cache: /Users/shinichi/.cpan/build/Spreadsheet-WriteExcel-2.25 (15.8>10.0 MB) Deleting from cache: /Users/shinichi/.cpan/build/OpenGL-0.57 (12.8>10.0 MB) OpenGL-0.57/ OpenGL-0.57/CHANGES OpenGL-0.57/COPYRIGHT OpenGL-0.57/examples/ OpenGL-0.57/examples/clip OpenGL-0.57/examples/cube OpenGL-0.57/examples/depth OpenGL-0.57/examples/double OpenGL-0.57/examples/fun OpenGL-0.57/examples/glu_test OpenGL-0.57/examples/light OpenGL-0.57/examples/plane OpenGL-0.57/examples/planets OpenGL-0.57/examples/quest OpenGL-0.57/examples/README OpenGL-0.57/examples/simple OpenGL-0.57/examples/smooth OpenGL-0.57/examples/spaceship.nff OpenGL-0.57/examples/stan.ppm OpenGL-0.57/examples/texhack OpenGL-0.57/examples/texture OpenGL-0.57/examples/tk_demo OpenGL-0.57/examples/tk_steal OpenGL-0.57/examples/try OpenGL-0.57/examples/wolf.bin OpenGL-0.57/fragment.arb OpenGL-0.57/fragment.cg OpenGL-0.57/fragment.glsl OpenGL-0.57/FreeGLUT/ OpenGL-0.57/FreeGLUT/freeglut.dll OpenGL-0.57/FreeGLUT/freeglut.lib OpenGL-0.57/FreeGLUT/README.txt OpenGL-0.57/genvars.pl OpenGL-0.57/glext_procs.h OpenGL-0.57/glpm_const.h OpenGL-0.57/glut_const.h OpenGL-0.57/glut_util.h OpenGL-0.57/glu_const.h OpenGL-0.57/glu_util.h OpenGL-0.57/glx_const.h OpenGL-0.57/glx_util.h OpenGL-0.57/gl_const.h OpenGL-0.57/gl_util.c OpenGL-0.57/gl_util.h OpenGL-0.57/include/ OpenGL-0.57/include/GL/ OpenGL-0.57/include/GL/freeglut.h OpenGL-0.57/include/GL/freeglut_ext.h OpenGL-0.57/include/GL/freeglut_std.h OpenGL-0.57/include/GL/gl.h OpenGL-0.57/include/GL/glext.h OpenGL-0.57/include/GL/glprocs.h OpenGL-0.57/include/GL/glut.h OpenGL-0.57/include/GL/glxext.h OpenGL-0.57/include/GL/SGIFreeSWLicB.1.1.pdf OpenGL-0.57/include/GL/wglext.h OpenGL-0.57/INSTALL OpenGL-0.57/isosurf.bin OpenGL-0.57/isosurf.pl OpenGL-0.57/KNOWN_PROBLEMS OpenGL-0.57/Makefile.PL OpenGL-0.57/MANIFEST OpenGL-0.57/menutest.pl OpenGL-0.57/META.yml OpenGL-0.57/oga.pl OpenGL-0.57/OpenGL.pm OpenGL-0.57/OpenGL.pod OpenGL-0.57/OpenGL.xs OpenGL-0.57/os2pm_X.h OpenGL-0.57/ppport.h OpenGL-0.57/README OpenGL-0.57/README.cygwin OpenGL-0.57/README.FreeBSD OpenGL-0.57/README.macosx OpenGL-0.57/README.nvidia OpenGL-0.57/README.os2 OpenGL-0.57/README.Win32 OpenGL-0.57/SUPPORTS OpenGL-0.57/test.jpg OpenGL-0.57/test.pl OpenGL-0.57/test.png OpenGL-0.57/test.tga OpenGL-0.57/TODO OpenGL-0.57/typemap OpenGL-0.57/utils/ OpenGL-0.57/utils/cleanup.pl OpenGL-0.57/utils/const.pl OpenGL-0.57/utils/exports.pl OpenGL-0.57/utils/exports.txt OpenGL-0.57/utils/glext_procs.pl OpenGL-0.57/utils/glversion.c OpenGL-0.57/utils/hdr_diff.pl OpenGL-0.57/utils/Makefile OpenGL-0.57/utils/Makefile.cygwin OpenGL-0.57/utils/Makefile.macosx OpenGL-0.57/utils/makefile.mak OpenGL-0.57/utils/makefile.mingw OpenGL-0.57/utils/mingw.bat OpenGL-0.57/utils/opengl32.txt OpenGL-0.57/utils/wgl_ext.txt OpenGL-0.57/vertex.arb OpenGL-0.57/vertex.cg OpenGL-0.57/vertex.glsl

CPAN.pm: Going to build B/BF/BFREE/OpenGL-0.57.tar.gz

2009-07-18 02:27:55.725 glversion[15023:10b] GLUT Warning: invalid glutGet parameter: 508
Found GLUT - unknown version

Using interface: AGL

Checking if your kit is complete...
Looks good
Writing Makefile for OpenGL
cp OpenGL.pm blib/lib/OpenGL.pm
AutoSplitting blib/lib/OpenGL.pm (blib/lib/auto/OpenGL)
cp Config.pm blib/lib/OpenGL/Config.pm
cp OpenGL.pod blib/lib/OpenGL.pod
/usr/bin/perl /System/Library/Perl/5.8.8/ExtUtils/xsubpp -noprototypes -typemap /System/Library/Perl/5.8.8/ExtUtils/typemap -typemap typemap OpenGL.xs > OpenGL.xsc && mv OpenGL.xsc OpenGL.c
cc -c -Iinclude -I/usr/X11/include -arch i386 -arch ppc -g -pipe -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -Wdeclaration-after-statement -I/usr/local/include -O3 -DVERSION=\"0.57\" -DXS_VERSION=\"0.57\" "-I/System/Library/Perl/5.8.8/darwin-thread-multi-2level/CORE" -DHAVE_VER -DHAVE_GL -DHAVE_GLU -DHAVE_GLUT OpenGL.c
cc -c -Iinclude -I/usr/X11/include -arch i386 -arch ppc -g -pipe -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -Wdeclaration-after-statement -I/usr/local/include -O3 -DVERSION=\"0.57\" -DXS_VERSION=\"0.57\" "-I/System/Library/Perl/5.8.8/darwin-thread-multi-2level/CORE" -DHAVE_VER -DHAVE_GL -DHAVE_GLU -DHAVE_GLUT gl_util.c
Running Mkbootstrap for OpenGL ()
chmod 644 OpenGL.bs
rm -f blib/arch/auto/OpenGL/OpenGL.bundle
cc -mmacosx-version-min=10.5.6 -arch i386 -arch ppc -bundle -undefined dynamic_lookup -L/usr/local/lib OpenGL.o gl_util.o -framework OpenGL -framework GLUT -o blib/arch/auto/OpenGL/OpenGL.bundle \
\

chmod 755 blib/arch/auto/OpenGL/OpenGL.bundle
cp OpenGL.bs blib/arch/auto/OpenGL/OpenGL.bs
chmod 644 blib/arch/auto/OpenGL/OpenGL.bs
Manifying blib/man3/OpenGL.3pm
/usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-Iblib/lib" "-Iblib/arch" test.pl
Can't load 'blib/arch/auto/OpenGL/OpenGL.bundle' for module OpenGL: dlopen(blib/arch/auto/OpenGL/OpenGL.bundle, 2): Symbol not found: _glutBitmapHeight
Referenced from: /Users/shinichi/.cpan/build/OpenGL-0.57/blib/arch/auto/OpenGL/OpenGL.bundle
Expected in: dynamic lookup
at test.pl line 9
Compilation failed in require at test.pl line 9.
BEGIN failed--compilation aborted at test.pl line 9.
make: *** [test_dynamic] Error 2
/usr/bin/make test -- NOT OK
Running make install
make test had returned bad status, won't install without force

2009-07-18 02:27:55.725 glversion[15023:10b] GLUT Warning: invalid glutGet parameter: 508
Found GLUT - unknown version

とあるので、おそらくGLUTのヘッダファイルが古いのだと思われる。

が、どうやったらそれを修正できるのか、
わからない。

プロフィール

月別アーカイブ

全アーカイブ

フェムトセカンド1.0


メールを送る(故障中)