Haskell + OpenGL の可能性

目的が簡單に成就するなんて さうさうない

大きな山の手前に 小さいけれど 美しい山があつたので登つてみた

さういふことだと 理解してゐる

 

歴史ゲームを創つてみたいと 思つた

Haskellで グラフィカルな部分を ほとんど考へずに

コンソールのテキスト表示だけ

入力はキーボードだけ BGMなし

それでも 面白いと自分が感じられるものを

 

自動でマップをランダムに作成したり

ファイルから文章を讀み込み表示させたり

選択肢を選んで 正解すると イベントが變化したり

さういつたことが實現でき

さらに敵とのエンカウントが成功して

いよいよ戰鬪の實装だ といふときに

 

別のことにハマってしまつた

 

私が所属してゐる塾で 子供達との會話の中から

ヒントを得て 何とか試してみやう と思つたこと

それは 「エーテル」をシミュレートできないか といふものだ

 

エーテル」とは有機化學における「エーテル」ではなく

天文學において 一時期 考案されてゐたもので

光を傳へる媒質 であるが

マイケルソン・モーリーなどの實驗によつて 存在が否定された とされるものである

 

私は 若干の文献にあたり 若干の考察をした結果

理由は述べないが 「エーテル」は存在するのではないか と思つてゐる

そして つい最近まで 「エーテル」のモデルを

ボールに バネがくっついたやうなもの

と考へてゐた

宇宙空間に 原子よりもずっと小さいレベルの玉があつて

それらが お互ひに 何らかの弾性力によつて結びつき

常に振動してゐるのではないか と

 

今では (それこそ 「エーテル」をシュミレートしやうとしてゐる今となつては)

次のやうに考へてゐる

ボールは となりのボールと直接くっついてはゐないが

ボール同士が離れやうとすると 引っぱられ

あまり近づかうとすると 引き放される

つまり両者の間にバネがあるかのやうな挙動をする

ボール同士は ある程度の距離をもつと もはや近づかうともせず

なめらかに 自由に動くこともできる

 

何日か 試行錯誤し  Haskellを使つて

ボールとバネのモデルをつくり 一次元の(一直線上にならぶ)

ボールとバネが バネの長さの變化によつて どのやうな挙動を示すか

實驗してみた

何とか 結果が出たところで やはり これを直感的に見える形にしやう

といふことで Hasteを使ひ

ボールがバネの力によつて動くのを 目で見えるやうにした

 

その後 二次元の(縦方向と横方向のそれぞれにボールが並ぶ)モデルをつくり

函數を設定して バグに悩まされながらも 何とかそれらしきものができたので

ブラウザ上に表現した

http://syouzan.sakura.ne.jp/

 

しかし これは ボールの個數が多くなるにつれ メモリをかなり壓迫してしまふ

私のディスクトップパソコンの場合 ボールを100個にしてシミュレートすると

途中で動作が止まつてしまふこともあつた

Haste は Haskellコードから javascriptを生成し ブラウザで動作させるために

使ふものと理解してゐる

實行ファイル 何とか.exe によつて グラフィックをそのまま表示させるものではない

 

といふところで 脳裏に浮かぶのは

OpenGL

だった

 

Haskellのコードから OpenGLを使ふ 簡單なサンプルコードを試してみたことがあつた

私としては ここに表示されてゐるやうな  ごく普通のフォントを

OpenGLを使つて Haskellのコードで表示させたりしたかつたのだが

どうしても やり方が分からず 断念してゐた

HaskellSDLを使ひ すごい かっこいいゲームを創つた方がゐて

http://questro.jp/blog/lightit-history/

SDL やつてみたかつたのだが

どうしても導入時のエラーが解決できず 断念した

 

しかし 今私がやつてゐるシミュレーションは

OpenGLなら 結構簡單に實装できるのではないか

と思ひ それなりに チャカチャカやってゐたら

できた

github.com

多重リストをマップしなければならないところで

うまく行くか心配だつたが

動いたので 良かつた

これを進めていくと さらに色々なことが出来さうな氣がしてゐる

 

これでフォントが普通に表示できる方法が分かれば

さらに モチベーションが上がるんだけど・・・

 

しかし ほどほどのところで 歴史ゲーム制作にも戻つていきたい