OpenTKでつくる3DカーレースゲームをTypeScript/JavaScriptでも作ってみることにします。デスクトップアプリではWeb上で遊んでもらうことができません。そこでブラウザゲームでも作ってみることにしました。そのためにはOpenTKでつくる3Dカーレースゲームで使用したデータを使う方法を考えなければなりません。今回はXMLで書かれたデータをTypeScriptでも使えるようにします。

頂点座標からGeometryを作成する

頂点座標からGeometryを作成しシーンに追加するためのスクリプトを作成します。

頂点座標を追加の部分をうまく書けばよいのですが、どうすればよいのでしょうか?

XMLファイルはこのような構造になっています。

そこで頂点座標を3つ取得してマテリアルを生成し、そのあとシーンオブジェクトに追加すればよいということになります。

引数として3点のXYZ座標と色を指定して以下のようにすればシーンに車を構成する色つきの三角形を追加することができます。

ただ移動するときは車自体をまとめて移動させたいので以下のほうがいいかもしれません。

これをこんな感じで使います。

たしかにこれで実行すると車が描画されます。実行結果の確認の確認はこちらからお願いします。ダウンロードはこちらから。

XMLファイルから頂点座標と色を取得する

次にCreateCarGroup関数を呼び出すためのコードを生成する方法を考えます。

こんなのはどうでしょうか? WindowsFormsアプリでXMLファイルを読み込ませて(読み込ませるXMLファイルとPNGファイルはこちらにあります)コードを生成させます。

以下はファイルから読み込んだデータを格納するクラスです。

以下はXMLファイルから読み込んだデータを加工したものを格納するクラスです。

上記のようなクラスとメソッドを作成して以下のコードを実行すればTypeScriptのfunction CreateCarGroup内に書くべきCreateCarGroup関数を取得することができます。

ただ困った問題があります。車をいくつも表示させようとした場合、動作が遅くなってしまいます。1台の場合と比較すると3台のほうが動作が遅いです。次回はこれを改善する方法を考えます。

車1台の場合 ダウンロード
車3台の場合 ダウンロード