└(՞ةڼ◔)」<やっほ〜したろうだよォ〜!

最近色んな人からドヤ顔白衣と呼ばれるようになりました。
アノ人の影響力はすごいですね…。

i-engineer.jp


ついに今日、卒業論文発表が終わりました!
これで学部生としてやるべきことは尽くしました。今はただ天命を待つだけです。
というわけで、新年度に向けてしたろうが生まれ変わりました!@shitaro2016
心機一転、ゼロからの再スタート!これからの活躍に期待してください!

概要

従来では、FortranでOpenGLを使うにはGLUTという選択肢しかなかった。
しかし、モダンなFortranではC言語とより密な連携がとれるようになったことに着目したしたろうは、
自分でGLFWとGLEWのラッパーを書くことで、モダンなOpenGLをモダンなFortranで使用することを実現したのだ!

経緯

Fortranは歴史の長いプログラム言語の一つであり、計算がC言語並に速いことで知られています。
しかし、Fortranには「GUIが貧弱」という欠点があります。
というか用途を鑑みればFortranでGUIをする必要がないので当然です。

それでも―――。
Fortranで3Dゲームを作りたい…。
モダンなFortranを使って現代っ子になりたい…。

だいぶ前に蛇と手を組んでいた?記憶にございません。

嗚呼、愛しのふぉとらんよ…。
卒論執筆中にFortranで頭がいっぱいになったしたろうは、さながら平安乙女。
クッソ忙しい中、モダンなOpenGLをモダンなFortranで使う方法を秘密裏に研究するのだった…。

先行研究

FortranでOpenGLを扱う方法は、F03GLというライブラリを使用することです。
というか、現時点でこれ以外でのOpenGLを使うための選択肢はありません(要出典)。
あったら教えてください…。

www.dolfyn.net

f03glは、古典的OpenGLをラップしたものです。これにより、Fortran2003でGLUTを使うことができます。

先行研究の問題点

問題は、もうGLUTは終わったコンテンツになってしまったということです。
私は生まれ変わったので、モダンなツールキットであるGLFWを使いたくて仕方がありません。

しかし、GLFWのラッパーの中にFortranはありません。(2016年2月23日現在)

本研究の目的

"ないなら作ってしまえ―――。"
これが部の方針(オキテ)でした。
だから、自分でラッパーを書きました。

全ては、モダンなFortranのため。


本研究の提案手法

なんとFortran2003からC言語と連携をするための機能が大幅に拡張・改善されました!

gcc.gnu.org


詳細は後日、幸福の物理ブログで解説する予定ですが、ISO_C_BINDINGというFortranの組み込みモジュールを使用します。
つまりはチョ〜簡単にFortranでC言語の関数を呼び出せるようになったのです。
実装の仕方は、まさに、先行研究であるf03glの.f90の通りです。

研究結果

見てください、GLUTから脱皮したFortranの姿を!
screenshot

ついにGLFW + GLEWを使ったモダンなOpenGLをFortranだけで書くことができました。
もうGUIが貧弱だなんて言わせない。

ソースコードはこんな感じです。一部分だけを抜粋して載せてあります。こんな感じで書けば良いのだなあという雰囲気だけ伝わればいいかな、と。

上記のソースコードは下記ページのコード(C/C++)をFortranにそのまま焼き直したものになります。

www.opengl-tutorial.org


結論と展望

・Fortran2003を使ってモダンなOpenGLを使用することに世界で初めて(要出典)成功しました!
・Fortranだけで3D物理学ゲーム(orシミュレーション)ができる…かも?
CとFortranとの対応関係が分かればGLFW、GLEWのラッパーを書くのに頭を使う必要がなくなる。むしろ筋肉が必要。
・ポインタのポインタ、関数ポインタなどなど…C言語のポインタにめっっちゃ詳しくなりました。
・悪いことは言わない、C/C++を使え。

└(՞ةڼ◔)」<Fortranンアアッ!コウフクッ!コウフクッ!

執筆者:したろう(shitaro@2016)
ブログ:幸福の物理