遂に成し遂げました。
海外に武者修行へ1年間行った結果、Unityなどのツールを使わずに、共通のソースコードでMac,Ubuntu(Linux),Windowsの各種環境において3D図形を描画することに成功しました!Write once, run anywhere!
・・・いや、違いました。.NET Core上でOpenTKを使っただけでした。
以下が環境に依存せず動く3D描画PGです。
https://github.com/ukaapple/cubeTest-OpenTK/blob/master/CubeInsWindow.cs
立方体を100x100x100で、合計100万描画します。
TriangleStripで、かつ Instancing使っているので高効率です。メモリ12MB程度しか使わずに済んでいます。
TriangleStripに関しては、過去の日記で記述しています。こんな感じでテクスチャを貼るやり方のことです。
InstancingとはOpenGLの用語で、同じ形状を、位置情報だけいっぱい与えていろんな場所に描画することです。描画速度向上や使用メモリ量削減が期待できます。
百万個は実際にソースコードを動かして確認して下さい。UbuntuやMacではライブラリのインストールが必要です。README.mdを参照して下さい。
目が痛くなることを保証します。
ちなみにInstancingを使わないとメモリ使用量が340MBに跳ね上がります。以下が使わない場合のソースです。
https://github.com/ukaapple/cubeTest-OpenTK/blob/master/CubeWindow.cs
以下のコードで CubeInsWindow を CubeWindow に変更すると、Instancingを使わない描画に切り替えることが出来ます。
https://github.com/ukaapple/cubeTest-OpenTK/blob/master/Program.cs
また、コンストラクタ引数の100の部分を変更することで描画する立方体の数を変更することが出来ます。あまりに描画数を多くしすぎてマシンのメモリを使い果たさないように気を付けて下さい。
タイトルバーにfpsを表示するようにしてるので、OpenGLのベンチマーク目的でいろんな環境で実行するのも良いかもしれません。