Kotlin JavaScript で WebGL

Kotlin 1.2 が現れ始めた時期で今更ながら、 Kotlin 1.1 で JavaScript から WebGL を書いてみました。 型があるのはいい一方、やはり OpenGL 系は C 言語系の手続き系言語的な関数でもって動作させるので、ライブラリを使うのがいいのかもしれません。

プロジェクト全体のソースコードはこちらから。今回は JavaScript モジュール定義に対しては AMD を使ってみました。

まず、 canvas を対象に描画するので HTML のロードを待たねばなりませんので、 web/main.js ではそのような処理を行っています。

3 次元ベクトルと 4 次元正方行列は、それぞれ data class として src/main/kotlin/Vector3.ktsrc/main/kotlin/Matrix4x4.kt に切り出しています。

残りの、本体となるコードは src/main/kotlin/main.kt にあります。 単純に wgld.org を Kotlin に移植したような見た目になっていますが、気を付けるべき箇所がいくつかありました。

  • 型を生かすようにキャストや Null の扱いを丁寧に行う
  • (単精度の場合) Float32Array なるクラスを、 WebGL の関数に対して与える
  • GLSL 等の識別子は型チェックが利かない(当然だが)
  • 生 WebGL ではオブジェクト指向的には書けない
もっと手っ取り早くモデルを表示させたい場合は THREE.js などがあります。