駄文

1年まとめ

今年は特に何もやってないな〜と思いつつ、1年まとめ(2年連続2回目)。記事自体少なかったし、真ん中9ヶ月ぐらいあいてたしね。今年は仕事で忙しいプロジェクトの応援が5つ(炎上しすぎ)あったのと、なろう小説読み漁ってたりしたのもゲフンゲフン ・ベクタグラフ…

1年まとめ

今年は特に何もやってないな〜と思いつつ、1年まとめ。 ・物理エンジンを作ってみて壮絶に討ち死にした ・コンポーネント指向を考えてみた ・DXRuby1.4.3〜1.4.5リリース ・連鎖性言語というのを作ってみた ・FiddleとffiでDirectXを叩いてみた ・NanoVGのソ…

1年まとめ

はてなダイアリーの記事一覧は1ページに50日分。そこから数えると今年は53個の記事を書いたらしい。俺は1日に多くても1個しか記事を上げないから、平均すると1週間に1個のペースで記事を書いたということだ。ムラはあるけど。 ということで今年のまとめ。 ・…

C言語の変数とメモリとアドレスの話

Cの入門などでは変数の説明で箱をイメージさせることがたびたびあるが、ポインタのところまで来ると箱の名前だとか場所だとか住所だとか言われていまいちピンとこない。ポインタが理解できない一因はこの「箱のイメージ」なのではないかと思う。 変数とは言…

RubyとGCについて

思ったことをつらつらと支離滅裂な個人的メモ。1.シンプルマルチスレッドGCこのあいだからいじってるやつだが、とりあえず世代別GCがあるのとないので3倍も違うというのはおかしいのでまだどこかバグっているんじゃないかと思う。効率面での話なのでヒープ…

ソフトウェアデザインのトリレンマ

国際金融のトリレンマというものがある。 これは(1)為替レートの安定、(2)独立した金融政策、(3)自由な資本移動の3つのすべてを同時に達成することはできず、2つを達成した時点で残りの1つは捨てなければならない、という話だ。 金融政策を独立させて自由な…

衝突判定の外側

Spriteの衝突判定では、まず全オブジェクトのAABBボリュームを計算して保存し、それを判定する。AABBの算出はそれなりに負荷がかかるから、これを保存するのは効率的に必要な処理だ。Spriteは複数の衝突判定範囲を持つことができるから、SpriteのAABBを算出…

Spriteと衝突判定

DXRuby1.4で導入されたSpriteクラスはほぼデータ保持用という作りになっている。かろうじて描画機能があるが、結局のところ通常の描画機能と比べて描画用のパラメータを引数で渡すか、オブジェクトが保持している値を使うかの違いでしかない。この部分に関し…

文字描画関連その4

Win32でフォントを扱う場合、APIのCreateFontIndirectにフォント情報構造体を渡してフォントハンドルを受け取り、それをつかってGDIで描画する。このフォント情報構造体というのが微妙にあいまいで、指定のフォントが無い場合に最も近いフォントをOSが選択し…

文字描画関連その3

DXRubyでわりと最近追加したメソッドがRenderTarget/Imageのdraw_font_exだ。これはImage#draw_fontのようにGetGlyphOutlineWで受け取ったビットマップ情報を使って、影や縁取りを行う機能が追加されている。Imageのほうは地味だが厄介な編集処理が入ってい…

文字描画関連その2

フォントと文字描画の扱いで問題になるのはエンコードとレンダリング処理である。Ruby1.8用の場合はエンコードは決め打ち、1.9ならRubyの機能で変換すればいい感じにはなる。残る問題はレンダリングだ。 WindowsのAPIとかDirectXのD3DXFontとかを使うと文字…

文字描画関連その1

CPUとGPUは半導体なので、すごい勢いで技術が進歩している。主に製造プロセスの進歩と、それに伴い増えたトランジスタをどう使うかという部分での性能強化だ。ただし、CPUに対してGPUのほうが性能の伸びがずいぶん大きい。この違いは載せている回路の使い方…

RenderTargetの生成と解放

DXRubyの描画予約順ソートはマージソートを採用している。初期の頃はシンプルなバブルソートだったのだが、さすがにアレなのでマージソートに変更したのだ。なぜマージソートを選択したのかというと、描画優先順が同一だった場合、メソッドを発行した順に描…

描画予約用メモリ管理

RenderTargetがCPUから編集できないタイプのデータであることは何度か書いたのだが、その原因のあたりの話を少々。 DirectX9時代のGPUはCPUとのアドレス共有機能が無くて(いまでも無いけど)、ビデオメモリにしかアクセスができない。GPUからテクスチャを書き…

RenderTargetのDirectX的描画処理

DXRubyはいろいろな機能を詰め込んではあるが、基本は描画まわりである。音に関しては別のライブラリを使うという選択肢があるし、入力はWin32APIを使ってどーにかすればなんとかなるんじゃないの、と言ったところで、でもDirectXによる描画だけはどうにもな…

RenderTargetの構造と描画予約

DXRubyは1.2からRenderTargetを導入したおかげで、内部的にはWindowモジュールが一つのRenderTargetオブジェクトを持つようにして、そいつをスクリーンバッファに関連付けて使うように変更した。こうすることでWindowモジュールのdraw系メソッドは内部Render…

Imageオブジェクトの生成と解放

RubyのGCはマーク&スウィープで、Ruby1.8時代からするとずいぶん改善されていてはいるが、それでもやっぱりGCが動くとプログラムは停止するし、逆にGCが動くまではオブジェクトは回収されない。 DXRubyを使うほうとしては初期のころはGCでずいぶん苦労したも…

Imageとテクスチャ

最近のGPUはビデオメモリが数GBとかになっていて、普通にテクスチャを置く程度ならいくらでも置けるようになってきている。とはいえ安いものでは少ないのもあるし、APUとかチップセット内蔵とかになるとメインメモリ共有になってたりもするし、ビデオメモリ…

DXRubyの創り方

何かしらアウトプットしていかねば、ということで、連載記事「DXRubyの創り方」である。まあ、連載といっても順番に読めば理解が進むというわけでもなく、ターゲットを絞っているわけでもなく、思いついたときに思いついたことを書くからどうせ毎回レベルは…

Rubyとゲーム

このところ、Rubyにはメジャーなゲームが無い、とか、ライブラリは多いけど、とかいう意見をぼちぼち目にする。 原因はこれかな。 Rubyゲーム会議2010 http://ruby-game-dev.org/wiki/index.php?Ruby%E3%82%B2%E3%83%BC%E3%83%A0%E4%BC%9A%E8%AD%B02010 ああ…

オブジェクト指向ってなにかしら

もう随分前になるが、Smalltalk Odysseiaが消えてしまった。面白い文章だったのに残念だ。 Webは情報を公開する側が資金を負担する必要があるし、アクセスが集中すると簡単にコケるし、下手すりゃ単一障害点に一撃で情報が消えてなくなる。 有用な情報は金か…

2000だうんろー

全部あわせてダウンロード数が2000になった! http://sourceforge.jp/projects/dxruby/devel/ ダウンロードは全バージョン・サンプルの合計だから、当たり前だがユーザーが2000人いるというわけではない。 ASRに入ってることを考えると、とりあえずインスト…

「もうロリコンでいいや」タグと思ったこと

なんとも自然なモーション。 ソフトの進化もすごいがそれを操る職人の技術もすごい。 人間の体はたくさんの関節があるが、それぞれ機械的に向きを変えたり回転したりしているわけではない。基本的には等速ではないし、直線でもない。加速・減速しながら複雑…

公開から1年とか

DXRuby0.0.2の公開が2009/04/06。 気が付いたら1年過ぎてた。 公開からどれだけと言っても、こんなもんはぼけーっとしてても過ぎていくものであるから、実際にはたいした意味は無い。 1年間毎日更新しました、とかならそりゃスゴイと思うが、間を置きながら…

Rubyとゲームとその方向性など

とりあえず、DXRubyのダウンロード数は地味に地味に増えている。一日平均すると5つぐらい? http://sourceforge.jp/projects/dxruby/devel/ ActiveScriptRubyに同梱されいて、最新のものならDXRubyも最新の1.0.7となっているから、古いのを使ってる人か、別…

新年

あけましておめでとうございます。 このブログは始まってまだ1年も経ってないけど、今年もよろしくお願いします。 俺にとって去年はDXRubyの年だったが、今年もそうなるだろう。他にやることないし。 今年の目標はDXRuby1.1系を仕上げて、安定版1.2として公…

年末

今年一年を振り返って。といっても何かあったわけでもないけど。 ・前の姫路の仕事の契約が1ヶ月伸びて、1月末で終わった。 ・次の仕事が決まらなかった。 ・事務所で暇なので色々勉強した。 ・3月、ブログかきはじめる。 ・黄泉の国からDXRuby0.0.1を呼び戻…

本を買った

著者のcyross氏によると今日がMiyako本の発売日ということでお昼に本屋さんに行った。Rubyゲームプログラミング ~超強力ゲーム用フリーライブラリ“Miyako”で実現!~作者: サイロス誠出版社/メーカー: 毎日コミュニケーションズ発売日: 2009/12/19メディア: 単…

FreeRGSSについていろいろ

似たよーなライブラリ2つも作ってどーするねん。 という声が聞こえてきそうであり、俺自身もよく思う。 それだからこそFreeRGSSは互換性を確保することを目指し、同じ動作をするところまで行けたら完了となるプロジェクトとしている。 自分で機能を拡張すれ…

3D座標変換

自分用メモ。3Dの座標変換はワールド変換→ビュー変換→射影変換→ビューポート変換の順でおこなう。 ワールド変換:オブジェクトデータの頂点群を、ワールド内の姿勢にあわせて回転し、ワールド内の位置に移動させる。 ビュー変換:カメラから見た風景になるよ…