2008/10/31

今日の一歳

・ここ一周年
・反動ゲーム製作開始
・衝突方程式作成
何時の間にかの一周年。でも今出せるネタがあるわけでもない。困った物だ。移転先は未だ検討中。何のお祝いもない誕生日。

昨晩思いついたアイデアを1.5時間ほどかけて実装した反動ゲーム。でもこの程度ではお祝いに出来ない。
今日は頭がそこそこまともだったので衝突の方程式も書いた。合っているかは知らない。少なくとも効率のいい計算方法ではないはず。

作っていて、ライブラリにベクトル演算機能を標準でつけるのも悪くないと思い始めた。

2008/10/30

今日の0.5

・数学遊び
昨日の式は積分が間違っていたので正確に積分を行ったが、そもそも積分を使うこと自体が誤りであることに気がついた。そこで、積分のロジックを当てはめて長さを計算してみたが、平方根の計算で詰んだ。(1+h^2)^0.5+(1+2h^2)^0.5+・・・+(1+(n-1)h^2)^0.5という感じ足し算を行う公式を知らない。存在するかも分からない。
計算結果の検算に使うために求めていた概算の方法で誤差が出ることを妥協して求めるのが最も現実的な計算と思い始めた。どうせグラフの点を打つ位置は整数にするのだから構わないのではないか。

衝突の公式を求めようとしているが今日は妙に頭が働かない。

2008/10/29

今日のリスト

・ToDoリスト作成
・円描画実装+α
・数学遊び
いろいろやることを思いついたのでToDoリストを作っておいた。日記だと日々の更新で埋もれる可能性があるのでWS本体の方に作成。

円の描画機能の実装。他に比べて格段に処理が多いので多用は禁止ということにしておく。Zバッファを実装しようと試みたが、αブレンドとの併用はやはり上手く行かない様子。作ってもあまり使う機会もないので諦める。

ブロック風の背景に色々グラフとかを書こうと思い、毎フレームごとに同じ長さが伸びた方がきれいだろうと思ったのでy=x^2のグラフの長さを求める計算をしてみた。微分っぽいことと積分を組み合わせてやったが、積分した時点で数字が異様に大きくなった。第一段階で求めた長さは√(4x^2+1)。これは手法が根本的に間違っていない限り合っている。これを積分した結果が16/3*(4x^2+1)^1.5+C。計算を間違えている可能性があり、そもそも積分を使うことが正しいのかわからない。明日にでもy=xやx^2+y^2=1のグラフについて同じ処理をして考え方があっているか調べようと思う。
正直微積を使わずに概算でも構わないようにも思うが折角なので使う。

あと、衝突の計算法を思いついたので休み中に実装する。衝突が扱えれば3本できる。
一般相対性理論も入門の本を借りてきたので頑張ってみたい。
プリンの落下は物理法則無視で適当に縮んでバウンドすればいいと思う。

2008/10/28

今日の空間

・ライブラリ関数整理
・プリミティブ描画実装
思いついたのでライブラリの関数を変な風に整理した。関数のジャンルごとにabstract classに分けてstatic関数としてつくり、namespace的に使う。この利点はジャンルごとに変数を宣言できる点と、staticコンストラクタやデストラクタが使えること。scope文を使っても良かったがこちらは何も意識せずにちゃんと終了処理をやってくれる。

今まで面倒がっていたプリミティブ描画関数もようやく実装。点、直線、多角形の描画を作成。同じ名前の関数なのに4種類作ったりしたので無駄に面倒だった。頂点カラーを指定する機能もつけておいた。
円の描画はOpenGLの機能としてなかったので保留。実装するにしても相当重い処理になる。
折角3次元なのでZバッファ機能も実装してみようかと思っている。

2008/10/27

今日のうずまき

・ブロック崩し風製作中
あまり進歩はない。ブロックの部分をどう作っていくかを考えている。そろそろ物理や数学の資料をあわせていかないと困難な部分に差し掛かってきたので製作が停滞しそう。物理は物体同士の反射、数学は背景模様の作成に使う。
ゲームのメインの部分はモノトーンで作って背景はランダムな色のパーティクルで描こうかと思っている。目が痛そう。

パラボラマスターに使う重力の方程式を考えている。ニュートン力学での重力の公式はただの3次方程式なのでその解を求めさえすれば済むのだが、一般相対性理論でやろうとなると一転して分からなくなる。一番分かりやすいはずのシュヴァルツシルト解でもよく分からない。フォトンではカー解が必要なので全く分からない。主に前提として使われている記号の意味が分からない。あとそれをちゃんと実装できるのか。R言語という数学専用の言語があるらしい。

何だかんだ言って中規模作品系よりもSSの方が作りやすい。
古典物理である剛体の衝突運動が扱えれば卓球とブロック崩し風と反動STGが、ゴムのような物と床との衝突が扱えればランチャが、シュヴァルツシルト解を理解すれば超重力天体にまで拡張できるパラボラマスターが、カー解まで理解すればフォトンが作れる。実際のところフォトンはどれだけ妥協するかが重要なポイントである。

2008/10/26

今日の複素数

・文字列描画作成
・ブロック崩し風本格製作開始
文字列描画がようやく上手くいった。表示や、透過の問題はSDL_ttfにあったサンプルを参考にしてやった。日本語はフォントのせいだったらしい。テストにずっとArialを使っていたのを、VLゴシックに変えたら上手くいった。Arialも日本語表示に対応しているはずなのに不思議。
ソースコード内に日本語を書いても元々D言語のソースはUTF8で保存しているのでDのstringからC形式の文字列に変換するtoStringzを使うだけで使用できるのは強み、だと思う。コンソールやウィンドウのタイトルに日本語を使うにはtoMBSzを使うと行ける。が、Eclipseのデバッグ用コンソールは何故か日本語を表示すると化ける。もっともコンソールに日本語を使う必要はあまり感じないので構わない。
ライブラリはあとは音楽再生機能の実装と各種プリミティブの描画の実装。それから描画関数のバリエーションを増やす。

手始めにブロック崩し風の製作を本格的に開始。パドルを回転させるのだが、その操作方法に少し悩んでいる。単純に2つのキーに時計回り、反時計回りを割り当てる方法と、上下左右キーを使ってその方向にパドルが来るように回転させる方法と、押したキーの方向のベクトルを加算していってスカラーは変化させない方法との3つを考えたが、どれも一長一短。最初のやつは一番シンプルだが直感的な操作かというとあまりそういえない。2つ目は直感的ではあるが、ソースが長くなるのとパドルが一番横や上に行ったときの挙動が問題。3つ目はソースがきれいなのと直感さが両立されているが、回転する角速度が変化するので微調整が不便そう。

2008/10/25

今日の反動

・オブジェクト指向にライブラリ変更
・拡大回転描画実装
・新作ネタ
クラスのコンストラクタでファイルを読んで、クラスに描画関数を持たせ、デストラクタで開放する。GCを活用することでだいぶすっきりした。D言語にはデフォルト引数指定がなさそうなので関数のオーバーロードで代用。
回転拡大描画も実装。回転描画だけ指定する座標が中心座標というのも気持ちが悪かったので全て中心座標を指定して描画するように変更。平行移動、回転、拡大の行列変換を使っている。
SDL_TTFをOpenGLで使おうと試みていて、文字色が青になるのと、文字の背景が透過してくれないのが問題。UTF8なので日本語が使えると思ったがそれも上手く行かないのが予想外だった。ソースコードをUTF8で書いているから問題はないはずなのだが。Phobosの変換機能を使って解決すればいいのだが。

またネタが出来てしまった。中小規模作品で6本目。自機を回転させて、ショットを撃った反動で移動する。慣性が働いて、その上移動手段がそれだけなので相当難しくなりそう。敵の弾に当たっても自機が大きく弾き飛ばされる。それで、壁にぶつかるとダメージ。受けるダメージが速度に比例する形式でも取りたい。