make vm ← io 本体のmake使い方
sudo make install
make addons ←アドオンの make
sudo make insall
make port ← Darwin Ports や fink を導入していれば、アドオンに関連するライブラリの導入もやり易いかもしれない(使ってないので分からん)
sudo make port
user$ io ←対話モードに入るsample/miscディレクトリにあるサンプルを実行。
Io 20080120
Io> exit ←対話モードから出るにはexit
user$
user$ cd ./sample/misc ←ディレクトリを移動し
user$ ./HelloWorld.io ← HelloWorld.io(これはテキストファイルなので編集可能) を実行
Hello world!
Hello world (again)
アドオンをインストールしてない場合、エラーが出るのもある。 Exception: Failed to load Addon Random - it appears that the addon exists but was not compiled. You might try running 'make Random' in the Io source folder.
---------
Object Random Cards.io 4
OpenGL is missing Image addonそれぞれのライブラリは configureしてから、 sudo make install すると入ります。
Image is missing libtiff library →TIFF画像を扱うライブラリ http://www.remotesensing.org/libtiff/ から v3.8.2(stable) またはv4.0βをダウンロード
Image is missing jpeg library →JPEG画像を扱うライブラリ http://www.ijg.org/ から File:jpegsrc.v6b.tar.gz をダウンロード
インストール。
もし libpng がなければそれもインストール。
./configure※ここで忘れてはいけないのは、libjpegライブラリだけmakefileがダメダメなこと。sudo make install では、ヘッダ(jpeglib.h)とライブラリファイル(jpeglib.a)が自動インストールされません。sudo make install後に、usr/local/以下にそれぞれ直接コピーする必要があります。具体的には、libjpeg.aを、 usr/local/lib に入れてから、jpeglib.h, jconfig.h , jmorecfg.hを、 usr/local/include に入れる。
sudo make install
最初に必要がライブラリが分かっていれば、 先にB、C、D、E、F をインストールしておけば良いので、Aのインストールが楽になります。 しかし全く情報がなく、芋づる式に必要なライブラリが判明していくケースは厄介です。
やることは複雑に見えて単純、以下↓の繰返しです。
完了!
ffmpeg-export-2009-04-21$ sudo make make(6934) malloc: *** vm_allocate(size=4272951296) failed (error code=3) make(6934) malloc: *** error: can't allocate region make(6934) malloc: *** set a breakpoint in szone_error to debugffmpeg をインストールする場合は、先にmake 3.81を導入してから行なって下さい。
MainFile.io Control.io Hanoi.io |
Sort.io Dir.io ErlangChallenge.io |
ControlFlow.io Account.io except.io |
BottlesOfBeer.io Super.io HelloWorld.io |
Inheritance.io vtest.io qsort.io |
Ackerman.io CommandLineArgs.io SimpleCoro.io |
Cards.io WeakLink.io Conditions.io |
Decompile.io Foreach.io Brackets.io tailtest.io |
Io アドオンの サンプルスクリプトのいくつかを試してみた。 これらは、Makefile のあるディレクトリ階層から、addons/各アドオン名/samples に入った内にあります。 【要約】: OpenGLアドオン は普通に動く。まだテクスチャの貼り方が分からない。 Cairoアドオン は 日本語文字列の表示できる。図形や画像表示もできる。 Fontアドオン は 日本語文字列の表示ができない Imageアドオン も普通に動作する。 Portaudioアドオン はwavの再生を確認 Pythonアドオン使えば文字列操作が簡単? Cursesアドオンはターミナル上で、階層メニューやASCII的なダイアログを作ることができます。 Curses については、Cursesによる対話的なプログラム作成 を参照して下さい。 Fluxアドオン は、ボタンやテキスト欄等のGUI が表示を確認。複雑なものについては未確認。 アドオンのインストール後のサンプル類について、Mac OSX では、ioファイルのアイコンが黒いやつはメインで実行可能。白いのは直接実行しないタイプまたは実行に必要な条件がそろっていません。 また、実行ioファイルの改行コードが異なっている場合 ファイルがあるのにNo such file or directoryというメッセージが出ることがあります。./main.io : No such file or directoryMacOSX なら、そのファイルの改行コードをLF(UNIX)に保存しなおすと、正常に実行できるようになります。 もし何も反応無ければ、 chmod +x main.io すると実行できます。
Cairoアドオン:runAll.io(成功)
ベクターグラフィックスの描画、PNG画像の読込み。 runAll.io を実行するとCairoアドオンサンプルフォルダ内の全てのサンプル ioスクリプトが実行され、 自動的に描画結果がpngファイルとして書き出されます。 curveRectangle.png multiSegmentCaps.png gradient.png image.png setLineCap.png textAlignCenter.png dash.png fillAndStroke.png setLineJoin.png imagePattern.png text.png clipImage.png clip.png arc.png fillAndStroke2.png curveTo.png path.png arcNegative.png textExtents.png これは、Cairo の使い方を知らないと、使いこなすのは難しそうです。 Cairoの描画コマンドや、コンテキストの初期化や、終了方法については、 Cairo ライブラリのドキュメントを参考にして下さい。Cairo で 日本語フォントを表示してみよう
MacOSX の場合、(システムorユーザーどちらでも) ライブラリ/Fonts にインストールされているフォントなら認識されます。 フォント名は、PostScript名を指定します。 フォントファイル名が日本語名 ならば OSX付属の Fontbook.app で読込み、情報を見るで、PostScript名を指定。 みかちゃん.ttf → mikachan ※ PostScript名が英文以外のもは認識されません。 半角ひらがなフォント(なつみかん等)、どせいさんフォント 日本語フォントは、スクリプト中で以下のように設定して下さい。 Cairo アドオンのサンプルスクリプトで、これらを試すことができます。 stevedekorte/addons/Cairo/samples/text.io # 大阪フォント selectFontFace("Osaka", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) # Impact selectFontFace("Impact", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) # GD-高速道路ゴシックJA-TTF selectFontFace("GD-HighwayGothicJA-TTF", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) # M+2 フォント selectFontFace("mplus-2p-bold", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) # みかちゃんフォント selectFontFace("mikachan", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) # ヒラギノ selectFontFace("HiraKakuPro-W3", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) selectFontFace("HiraKakuStd-W8", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) # 絵文字フォント selectFontFace("HoeflerText-Ornaments", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) # Osakaユニコード selectFontFace("Apple_osaka_unicode", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) # メイリオ selectFontFace("Meiryo-Bold", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) # 絵文字フォント selectFontFace("AppleSymbols", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD) # 中国語フォント selectFontFace("GB18030Bitmap", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD)
OpenGLアドオン:balls.io(成功)
立方体の中をボールが跳ね回るサンプル
OpenGLアドオン:cube.io(成功)
ウインドウ内の立方体を、マウスカーソルで撫でるようにドラッグすると立方体が回転する。
OpenGLアドオン:cylinder.io(成功)
ワイヤーフレームによる円筒を、マウスで操作できる。
OpenGLアドオン:cylinder.io(成功)
ワイヤーフレームによる円筒を、マウスで操作できる。
OpenGLアドオン:game.io(失敗)
Exception: Object does not respond to 'docSlot' --------- Object docSlot game.io 107
OpenGLアドオン:grabTextureTest.io(失敗)
/stevedekorte/addons/OpenGL/samples/grabTextureTest.io display grabbing Exception: Image does not respond to 'grabTexture' --------- Image grabTexture grabTextureTest.io 25 Screen grab grabTextureTest.io 49 Screen display [GLUT] 0 Screen run grabTextureTest.io 81
OpenGLアドオン:Mandlebrot.io(失敗)
ウインドウが表示されない calc time 0.4652729034423828 print time 0.7628169059753418 total time 1.2280898094177246
OpenGLアドオン:polygonSmoothing.io(成功?)
半円形が回転するデモ。ポリゴンの継ぎ目をスムーズに表示するらしい。 マウスボタンを押すたびにno smoothing と jitter width alpha blendingが切り替わる
OpenGLアドオン:sphere.io(成功)
ポリゴンで出来た球体をマウスでぐりぐりできる。
OpenGLアドオン:events.io(成功)
ジョイスティック、キーボードやマウス入力を検知するデモ。 押されたキーの内容、マウスカーソルの座標 マウスドラッグ、押されたマウスボタンの番号やフラグを表示する
OpenGLアドオン:lines.io(成功)
重なった正方形が回転するデモ。それぞれ回転スピードが違うので、時々きれいな模様になります。
OpenGLアドオン:test2.io(失敗)
コードが表示された。 Box clone do(setOrigin(); setSize()); Box clone do(setOrigin(); setSize()); union := Box clone do(setOrigin(); setSize());
Fluxアドオン;Calc.io ,
電卓が起動した!
Flux アドオンは io のGUI を担当します。 描画はOpenGL や Cairoが関連している らしい /stevedekorte/addons/Flux/samples/Calculator/Calc.io ボタンをクリックして数字を出します。数字が表示される欄はテキストエリアのようです。
終了するにはメニューバーから選ぶとOK
Fluxアドオン;ファイルブラウザ(失敗)
ウインドウは出たものの、真っ黒。何かが足りない
Fluxアドオン;スライドショー(失敗→成功)
launchPath を System launchPath に修正したら起動成功。 これはプレゼン用の簡単なスライドショーを再生します(ウィンドウアプリケーション)。 下矢印キーで進み、上矢印キーで戻ります。 /stevedekorte/addons/Flux/samples/Slideshow user$ ./main.io 同じディレクトリにあるテキストファイル slides.txtを読込み、表示します。 行頭がタブになっている場合は本文、 タブインデントされてない行は、ページのタイトルとして、表示されます。 また、この行はページ分割の境界としても機能します。 終了するにはメニューバーから Quit を選びます。
Fluxアドオン;ボタンイベントのテスト(修正後に成功)
/stevedekorte/addons/Flux/samples/Test user$ ./main2.io foo と書かれたボタンがあり、それをマウスでクリックすると ボタンに書かれた文字が Please don't push this button again. に変化する。 【ボタンイベントの仕組み】 オブジェクトから Controller という名前のクローンを作る Controller に push という名前のメソッドを作る ボタンオブジェクト b を作ったら、 seActionTarget で、バインドするオブジェクト名を指定(Controller ) setAction で、そのメソッド名を指定(push) これでボタンを押した時に、 Controller オブジェクトの push メソッドが実行される。 main2.io#!/usr/bin/env io Flux // バックと文字色を設定し直した。 Controller := Object clone do( push := method(button, button setTitle("Please don't push this button again.") ) ) app := Application clone app appDidStart := method( app mainWindow setTitle("Test") b := Button clone b setTitle("Foo") b setWidth(300) b setActionTarget(Controller) b setAction("push") b textColor = Color clone set(1, 1, 1, 1) app mainWindow addSubview(b) app mainWindow backgroundColor set(0.5,0.5,0.5, .1) ) app run
Fluxアドオン;china.io(修正後、成功)
これはチャイナチェッカーというボードゲームです。 日本では、ダイヤモンドゲームと呼ばれています。 対面側の陣地に自分の色のコマを全部移動したら勝利。 コマを飛び越えると遠くまで移動することができる。 普通に実行するとエラーが出るので、ちょっと修正する。addons/Flux/samples/China usr$ ./china.io launchPath: Exception: ChinaApp does not respond to 'launchPath' --------- ChinaApp launchPath china.io 1598そこで、1598行目に追加ChinaApp do( launchPath :="." <---追加: lunchpath をカレントディレクトリに writeln("launchPath: ", launchPath)Hキー:ヘルプを見る。(キー操作説明が出る) Mキー:CPUのターンを実行 Gキー:決着がついたらこれでリセット Dキー:Developer Mode (コンストラクションモード) chinaConfig.io を編集すれば、プレイヤー数を増やしたり、盤面サイズを変更できます。 画像ファイルはどうやって読込まれるんだろう?
Fluxアドオン;デバッガ(失敗)
Content-type: text/html Cache-Control: no-store, no-cache, must-revalidate, max-age=0 Exception: nil does not respond to 'removePrefix' --------- nil removePrefix menu.io 23 Page setPath menu.io 277
Imageアドオン:test.io (成功)
79行目 を self setImagePath(Path with(System launchPath, "images/lotus.png")) に修正。 読込む画像を lotus.tiff , lotus.png, lotus.jpg などに変えてテスト。 ↓読込む画像が見つからない場合Imageアドオン:test.io (失敗)
Exception: Image error reading file on Image/samples/./t.jpg --------- _open Image.io 9 Image open test.io 14 Viewer setImagePath test.io 80 Viewer run test.io 85
Imageアドオン:scale.io (成功)
このサンプルはコマンドライン上で動作します。 普通に実行すると使い方を教えてくれます。Usage: io script.io infile outfile width height このサンプルスクリプトにスペースで区切られた引数を渡すと、指定した高さと幅の画像として保存されます。 書式は、scale.io [入力ファイル] [出力ファイル] [幅px] [高さpx] $user ./scale.io ./images/lotus.png ./lotus_p.png 180 250 出力された画像→
Fontアドオン:test.io (半分成功)
test.io と同じ階層にフォントファイル( Comic Sans MS 、 Brush Script )を置いた場合 スクリプトの箇所をこのように変更するとうまく表示されます。 ・スクリプトと同じ階層にフォントを置いた場合 monoFont := Font clone open("./Brush Script") setPixelSize(12) sansFont := Font clone open("./Comic Sans MS") setPixelSize(12) serifFont := Font clone open("./Brush Script") setPixelSize(12) 2byte文字を含むフォント(例:みかちゃん.ttf)は認識されません。 ・システムにインストールされているフォント monoFont := Font clone open("/Library/Fonts/osaka.unicode.ttf") setPixelSize(12) ・ユーザーごとにインストールされているフォント sansFont := Font clone open("/Users/ユーザー名/Library/Fonts/mplus-2p-black.ttf") setPixelSize(12) serifFont := Font clone open("/Users/ユーザー名/Library/Fonts/GD-HighwayGothicJA-TTF094b.ttf") setPixelSize(12) 日本語フォントも表示できますが、ひらがなや漢字を含む表示は今の所成功してません。 実体参照も× あいう 、 \u3042\u3044\u3046 ↓フォントが見つからない場合(失敗)Exception: Font cannot open resource --------- message 'open' in './test.io' on line 4
Fontアドオン:test2.io (半分成功)
中央寄り表示。ウインドウ下部にある灰色のバーが右に伸びるアニメーション。
Fontアドオン:terminal.io (失敗)
起動しない Exception: Object does not respond to 'GLApp' --------- Object GLApp terminal.io 3
ObjcBridgeアドオン:(失敗)
ObjectiveC と連携する為のアドオンらしい。 MacOSX 用でダブルクリッックで立ち上がるアプリが、作成されているが、 クリックしても反応がない。まだ何かライブラリが必要なのかもしれない。 Bridgetest ディレクトリのReadMeによれば、先に、IoLanguage bundle projectを実行せよ、とある。In order to run this test, you'll first need to build the IoLanguage bundle project in Io/Projects/OSXBundle.Xcode で、BridgeTest.pbprojを実行したが…エラーで失敗。/usr/bin/ld: warning -L: directory name (../../../../IoDesktop/_libs) does not exist /usr/bin/ld: warning -L: directory name (../../../../IoServer/_libs) does not exist /usr/bin/ld: warning -L: directory name (../../../../IoVM/_libs) does not exist
ODEアドオン:tutorial1.io(失敗)
3D物理エンジンのサンプル libodeが必要らしい。 Exception: Error loading object '/opt/local/lib/libode.dylib': 'dlopen(/opt/local/lib/libode.dylib, 10): image not found' --------- message 'open' in './tutorial1.io' on line 5
Pythonアドオン:UsingPython.io(成功)
Python は使ったことがないので分かりませんが、動作してます。 モジュールのロード、文字列の分割、英文大文字←→小文字の置換処理。 Which version of python are we running? 2.3a2+ (#4, Mar 2 2003, 17:13:46) [GCC 3.1 20020420 (prerelease)] System path is returned as a list /Library/Frameworks/Python.framework/Versions/2.3/lib/python23.zip /Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3 /Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/plat-darwin /Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/lib-tk /Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/lib-dynload /Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages /Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/plat-mac /Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/plat-mac/lib-scriptpackages /Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/Numeric /Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/PIL Load the string module Split a string Brave brave Sir Robin list("Brave", "brave", "Sir", "Robin") Load a C module (.so) Current time is: 1237516680.1858310699462891 Another way to invoke a method UPPERlower --> upperLOWER
AppleExtrasアドオン:pong.io(失敗)
Exception: Object does not respond to 'GLApp' --------- Object GLApp pong.io 33
AppleExtrasアドオン:roller.io(失敗?)
いきなり真っ黒なフルスクリーン画面に。丸い玉が反応するが意味が分からない。 ESCキーで画面から抜ける。「アプリケーションの強制終了」でIoを選択し強制終了。 AppleSensor という名前から、おそらくアップルのノートパソコンに搭載されている傾きセンサーでも感知するのかもしれない。 ノートパソコンを傾けると、丸い玉も転がるとか。
AppleExtrasアドオン:test.io(失敗)
getLightSensors() error: failed to find ambient light sensor getLightSensors() error: failed to find ambient light sensor 強制終了
GLFWアドオン: lesson02.io(失敗)
Mac OSX アプリケーションで動かさないと実行できないらしい。詳細不明。 Working in unbundled mode. You should build a .app wrapper for your Mac OS X applications. glfwOpenWindow failing because it can't become a foreground application
libsndfile & libportaudio 導入後 ・PortAudio アドオンは libportaudio入れるだけでwavが再生可能。 ・Libsndfile アドオン は、libsndfile の他に、libportaudio、 libavcodec ライブラリが必要。 実は同じサンプルプログラムが収録されてたりする。 Libsndfile アドオンの sndplay.ioは動かない s := Sound clone setPath(Path with(launchPath, "max.wav")) load PortAudio アドオンの sndplay.ioは、動く。 s := Sound clone setPath(Path with(System launchPath, "sounds/max.wav")) load もし、サンプルプログラムがlunchPathのせいで動かない場合、System launchPathにすれば動く可能性があります。 LibSndfile(Sound オブジェクト)で対応するフォーマット一覧(ソースより抜粋)。 wav , aif(apple) , au(unix μ-law) , paf(Ensoniq Paris), svx(amiga) ,nist(Timit database ,Groningen speech corpus), voc(Creative Voice Format),sf( ircam ),w64(wave64), mat4(GNU Octave 2.0), mat5(GNU Octave 2.1)
PortAudio アドオン:loopback.io 失敗
何故か無音
PortAudioアドオン:sndplay.io(成功)
音声の再生。 サンプル音声 sounds/max.wavを再生する 内容は"This is Ma-Ma-Maxheadroom" 永久に続き、ctrl+Cでも終わらないので、 ターミナルを終了させるしかない。
Libsndfile アドオン:mp3filestream.io (失敗)
Exception: Failed to load Addon AVCodec - it appears that the addon exists but was not compiled. You might try running 'make AVCodec' in the Io source folder. --------- Object AVCodec mp3filestream.io 50
LibSndFileアドオン:loopback.io(失敗)
Exception: Failed to load Addon PortAudio - it appears that the addon exists but was not compiled. You might try running 'make PortAudio' in the Io source folder. --------- Object AudioDevice loopback.io 4
LibSndFileアドオン:sndplay.io(失敗)
音声の再生。 サンプル音声 sounds/max.wavを再生する 内容は"This is Ma-Ma-Maxheadroom" 永久に続き、ctrl+Cでも終わらないので、 ターミナルを終了させるしかない。
Cursesアドオン:docbrowser.io(成功)
Cursesアドオンはターミナル上で、テキストを使ってGUIもどきの階層メニューやダイアログを作ることができます。 ターミナルから、階層メニューを表示しています。 このサンプルでは実行中のオブジェクトをブラウズしています。 「>」カーソル が現在選択している項目です。 ↓↑で項目移動、←→ キーで リスト項目から出る/潜る。ESCキーで終了。 例えば、このようにリスト階層を進んでいくことができます。 _object>Addons>Core>CLI> commandLineLabel
Cursesアドオン:browser.io(成功)
実行中のスクリプト内のメソッドや変数の内容を見ることができます。 これはslotSummary やgetSlot メソッドで見ているのと同じです ↓↑で項目移動、←→ キーで リスト項目から出る/潜る。ESCキーで終了。 「>」カーソル位置によって 変数の内容が変化する。>_object Inspector_0x5e7b10 _proto Object_0x5003d0 down method(...) next method(...) object method(...) objectSlotNames method(...) objectStack list(Object_0x50c5b0) offset 0 previous method(...) selectNextSlot method(...) selectPreviousSlot method(...) selectedSlotName "_object" ←現在選択されている項目 setObject method(obj, ...) setSelectedSlotNamemethod(...) show method(...) type "Inspector" up method(...)
Regexアドオン: libpcre が必要。
makeすると、インストールされ、3つのバイナリ版ができあがる。
sudo make install
make newtestこれをクリアできれば、問題なしです。
make test
●テスト成功例なお、サンプルスクリプトは、mvディレクトリに収録されています。
SQLite3
SQLite3Test
---------------
5 tests, 0 failures
./binaries/ioServer bindings/SkipDB/_unitTests/run.io
●テスト失敗例
test_4_Dot - failed
Exception: 'Object' does not respond to message 'v1'
Coroutine_0x1593e20-Coroutine_22625824
(略)
nil
---------------
4 tests, 4 failures
cd vmこのmvディレクトリには io のバイナリ版も生成されているので以下のように実行します。 使い方は 「./io 実行したいioスクリプトファイル名のあるパス」
./io _sampleCode/HelloWorld.ioioDesktop については次の項で説明します。
./io _sampleCode/Cards.io
./io _sampleCode/Calc.io
./io _sampleCode/Hanoi.io
cd IoFull-2005-12-21/vm以下のサンプルデモを試すことができます。ターミナルから、以下のコマンドを入力。
./ioDesktop nehe.io
./ioDesktop ../bindings/OpenGL/_sampleCode/demos/balls.io (ボールが跳ね回るデモ)また、OpenGLのチュートリアルは、ioのアーカイブに収録された「IoFull-2005-12-21/bindings/OpenGL/_docs/tutorial/index.html 」から探すことができます。 (iolanguageのサイトからでも見つけられます。)
./ioDesktop ../bindings/OpenGL/_sampleCode/demos/polygonSmoothing.io (スムージング)
./ioDesktop ../bindings/OpenGL/_sampleCode/demos/cube.io (立方体をマウスでグリグリ動かせる)
./ioDesktop ../bindings/OpenGL/_sampleCode/demos/DreamMachine.io (激しくフラッシュ)
./ioDesktop ../bindings/OpenGL/_sampleCode/demos/events.io (マウスでドラッグした時のGLUTイベント処理)
./ioDesktop ../bindings/Font/_sampleCode/fontTest.io
このデモはTTFフォントは /IoFull-2005-12-21/resources/library/fonts/Free ディレクトリから読み込んでいる。 日本語TTFフォントを読み込みは可能ですが、ひらがなやカタカナは、うまく表示されないので、なにか工夫が必要。
./ioDesktop main.ioと書いて実行しなければならないが、MacOSXを含むUNIX環境では、
./main.ioと書くだけで、ioDesktopを使い ioスクリプトを実行することができます。
@ io言語 :io と GLUT との連携 appendProto(OpenGL), glutEventTarget(self)、main , init , draw メソッドからなる構成。reshapeによるリサイズ時の連携// NeHe Tutorial #3
@ OpenGL:ウインドウの構築&リサイズ処理, glutMainLoop, glutSwapBuffers 等GLUTの初期化,ポリゴンの描画の基本 glBegin(GL_TRIANGLES と GL_QUADS)
@ io言語 :特になし// NeHe Tutorial #4 派手な正方形 と 三角形 , 回転
@ OpenGL:ポリゴン、頂点に色を指定する glColor3d。ローカル座標軸の移動 glTranslated
@ io言語 :timer メソッドによる GLUT との連携// NeHe Tutorial #5 派手な立方体 と 三角錐
@ OpenGL: ローカル座標軸の回転 glRotated , glutTimerFunc関数による アニメーション
@ io言語 :特になし// NeHe Tutorial #6 立方体にテクスチャを貼る
@ OpenGL:各面の色を指定する glColor3d。glBegin(GL_TRIANGLES と GL_QUADS) , ポリゴンモデルの回転
@ io言語 :グローバル変数みたいの。jpeg画像を読込み&テクスチャ化 self image := Image clone open(Path with(launchPath, "画像名.jpg"))// NeHe Tutorial #7 光源を使ってみる (参考#6)
@ OpenGL:ポリゴンにテクスチャを張付ける, glTexCoord2d , glVertex3d
@ io言語 :引数を伴った リストエレメントの使い方(光源), jpeg テクスチャ化, キーボードからのキー入力。テクスチャ表示法を配列リストで管理 ( texture at(filter) )// NeHe Tutorial #8 テクスチャを半透明にする
@ OpenGL:環境光(Ambient Light)と拡散光(Diffuse Light), ミップマップ, ニアレスト,リニアの3つのテクスチャ表示法を比較。
@ io言語 :キーボード入力 key := key asCharacter。if 文の使い方(条件と結果)。// NeHe Tutorial #9 星、ディスコライト ( 難易度注意? )
@ OpenGL:テクスチャの半透明ブレンド効果
@ io言語: オブジェクトを使って構造体。 配列リストとforeach文の使い方と各配列へのアクセス。jpeg テクスチャ化// NeHe Tutorial #10 ウォークスルー
@ OpenGL:複数の星をアニメーションさせる。
@ io言語: 外部テキストデータの読込み&コメント行排除処理。 構造体。 asNumber。ファイルのOpen Close。degreesToRadiansによる単位変換。三角関数// NeHe Tutorial #11 たなびく旗 (参考#6)
@ OpenGL:読み込んだテキストデータからパラメータを読み取り複数の頂点リストを生成。3D空間の構成。
@ io言語:多次元配列リスト append(), setX 関数等。多次元配列へのアクセス方法。 2重のforループで、動的にポリゴンの座標に合わせてテクスチャを張る。三角関数。// NeHe Tutorial #12 ディスプレイリスト (参考#6と#8)
@ OpenGL:テクスチャを張る。三角関数による波のうねり
@ io言語:データと OpenGLとの連携 glGenLists , glNewList
@ OpenGL:ディスプレイリストの使い方 glGenLists , glNewList , glCallList
ディスプレイリスト= 指定した複数のOpenGLコマンドをまとめて登録できる機能。複雑な形状も1回登録しておけば、指定した形状を glCallList 関数を呼び出すだけで、いつでも簡単に呼び出せるようになる。
各APIには(float int 型など)すべての変数型関数が用意されていますが、io 言語では、float またはdoble 型のみ呼び出される仕様となってます。 例えば、glNormal3b, glNormal3d, glNormal3f, glNormal3i, glNormal3s の関数をしても、実際にはglNormal3dが呼び出されます。
数値としてベクトルが返される(たとえば glGetDoublev) 関数は、常に返値をリスト エレメントとして格納します。そのため、あらかじめ 十分な大きさを持たせた リストエレメントを設定しておく必要があります。もしリストの大きさが足りなければ、その部分の返値はカットされてしまいます。
配列変数を引数とする 関数(例:複数の点の座標を扱う glVertex2dv, glVertex2fv, glVertex2iv, glVertex2sv, glVertex3dv, glVertex3fv, glVertex3iv, glVertex3sv, glVertex4dv, glVertex4fv, glVertex4iv, glVertex4sv)を扱う場合は、io言語では配列に相当するリストエレメントを必ず指定してください。そのときのリストの大きさは適切なものを指定します。もし、引数リストが短すぎた場合は、引数は 0.0 に修正されるか、可変長の入力データのせいで、ほかのメモリ領域を侵害するセグメントエラーが発生する恐れがあります。
出力、入力ともに ポインタを指定するもの(例: glReadPixels関数)は、バッファオブジェクト上で処理する。バイト配列は、出力処理のために事前に割り当てなければいけません。セグメントエラーを回避するために、正しいサイズを割り当てる必要があります。
Obj method_name := method ( 引数, 引数 ,
val := 10 //ローカル変数
-内容-
return val //返値
)
リストエレメント (配列のように使える)
texture := list(1) // texture という名前の長さ2 (0と1) のリストを定義
texture at(0) // texture リストの 0 番目 を参照
改行コードがMacのままの時など。
//: bad interpreter: No such file or directory
エラーメッセージ
Exception: 'Object' does not respond to message 'Demo' //'Object' は メッセージ 'Demo' に応答しません
Coroutine_0x1153590
-------------------
? Demo neh.io line 46 //エラーの起きた行
Coroutine setResult A2_Exception.io line 63
Coroutine main [unlabeled] line 0