読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

C# + OpenGL

まぁちょくちょく追い詰められつつ、ということで。


ウィンドウ生成やレンダリング部分で、Win32APIなんて叩いてられるかー!ということになり、C#を使わせていただくことになりました。(ぉ

実は、C++でWin32API叩いたり、C++/CLIのウィンドウズフォーム使ったり、それこそWinBilderとか使ったりしたけど*1(ココは笑うところですよ)、なかなかコレ!ってものが見つからなくて迷ってました。
というのも、正直ウィンドウ生成とか、研究の本筋から外れる部分のコストはできる限り削減したいと思っていたからで。まぁそういうことで、C++/CLIのウィンドウズフォームアプリで作ってみたけど、コードが変態的すぎてなじめず(^ってなんだばーか!)、2年くらい前に一度手を出して挫折してて敬遠してたC#を使ってみたら、これが驚くほどしっくりきてしまいまして。コード全体が見渡せるというか、コードがものすごく読みやすい。
Java風って聞いてたけど、うーん、どちらかというと確かにC++から派生ってカンジじゃないよね。まぁ言語仕様自体はまだそれほどわかってないから、これから書いていきながらお勉強デス。。

で、描写部分は、OpenGLにまかせる形で。2Dで十分だから無駄があるかもしれないけど。でも後々のことも考えてとりあえずOpenGLを採用しました。

C#におけるOpenGLのラッパークラスは、

を使わせてもらいます。かなり使いやすいからビックリでした。


そんなカンジで一日中いじってて、どうにか一応動く物体の描写は作れた。いろんなところ参考にさせてもらいながら。

あとは、クラスとプログラム自体の設計と、それこそエージェントの動作どうするかを煮詰めないとなあ。
これからやること(プログラム的な)のメモ。

  • マップの仕様考える
    • 道路描写のための設定ファイルを作成し、そこから道路の描写のためのパラメータを取得して道路を設計
    • 開始位置・終了位置・太さを与えておいて、道路描写用のクラスかませてうにゃうにゃやるかなあ
    • 道路自体にレイヤー風に動作できるようなクラスつくるべしだなあ。でレイヤー順に背景や車線境界などを描写。その上に自動車を描写だね。こんなものはz軸でうにゃってやればいいんだけど、一つ一つTranslatefとかやってたらきりがないから、切り出し。
    • マップ自体は将来的にはファイルで外部から読み込みできるように…だとするとマップル地図データの仕様とかにあわせようかなあ。そうしたら後々ウマーなことになったり。。。とか妄想
  • 車うごかすための仕様考える
    • 基本的な要素はもうできてるんだけど、マップや交通規制などをどう判断するか
    • てかこれはもはやエージェントの部分にかんできちゃうなあ
  • マウスイベントかキーイベントでズームと移動
    • MouseEventArgsかKeyEventArgs
    • 描画されている部分以外の処理どうすればいいんだろ。正直巨大なマップの一部しかみていないときは、その他の部分については描写せず、環境の変化だけをどんどん変化させてどこかにもたせておきたいというカンジ。最初からそんなうまくいかんか。。

*1:http://winbinder.org/