2012-06-01から1ヶ月間の記事一覧

インスタンス変数へのアクセス

DXRuby1.3devで追加したSpriteクラスは各種パラメータを設定するのにメソッドを一通り定義してある。Spriteを継承したクラスの中からのアクセスはself.x=のように書く。通常、自分でSpriteクラスを作ったらインスタンス変数に保持するので@x=とすることにな…

少し先のことを考える

頂点シェーダが使えるということで色々試したりしているのだが。とりあえずDXRuby1.4の時点では、3D関連の方向をきちんとサポートすることは無さそうだ。3D描画をするには、現時点で足りない機能がある。 ・頂点バッファ ・Zバッファ ・Vector/Matrix だ。 …

頂点シェーダで画像のX軸回転

昨日のVectorクラスをいじりつつ、昔のコードを引っ張り出してMatrixを部分的に実装。これを使って行列を生成して頂点シェーダに食わせれば、使いやすいかどうかはともかく、とりあえず3D描画が可能なはずだ。 やってみた。

3度目のVectorとMatrix

かつてDXRuby1.1devとDXRubyFwで作ってはみたが未だ本体に含まれないVectorとMatrix。なぜかというと、どうにも微妙感が拭いきれないから。 2D用だったり3D用だったりしつつ、数学的な通常の計算に加えてアフィン変換を簡単にできるように工夫はした。が、な…

頂点シェーダを使う

DXRuby1.3devではシェーダをサポートしていて、主にピクセルシェーダを扱うサンプルを作っているが、仕組み的には頂点シェーダを使うこともできる。ただ、DXRubyが2D専用として開発されている都合上、ちょっと使いにくい。頂点シェーダは最低限、頂点の座標…

DXRuby1.3.6devリリース

Sprite衝突判定の全実装、管理サポートメソッド追加、Shader周りの使い勝手向上、SEGVするような不具合修正など。1.4に必要な機能としてリストアップしてあるほぼすべての実装ができた。あとちょっと残っているものはあるけど。 http://dxruby.sourceforge.j…

複数の衝突判定

Spriteオブジェクトは衝突判定範囲を持ち、そこに画像用のパラメータのスケーリング・ローテーションを反映させて衝突判定を行う。ただ、形状は点、矩形、円、三角に限定されていた。これらを組み合わせて複雑な判定を行いたいという場合がある。 そのような…

ゴボウ製

サンプルに使う画像を作ろうと思って、五芒星を描画してみようとしたらえらい苦労した。 線画なら簡単なのだが、パスを作って中を塗るとかそういった機能は無いので、座標を計算して三角形で描かなければならない。 どうにかできたのでメモ。 require 'dxrub…

Spriteの判定が一通りできた

時間かかったけどなんとか全部できた。 細かいところでは点の判定がちょっと微妙な感じになっていて、幾何学的に点として扱うのか、画面上は1ピクセルの矩形なので矩形として扱うのかといったあたりを整理しておく必要がある。適当に作ったので多分いまは混…

Sprite内の定数

このような定義を考えてみた。(追記:これではダメだ) class Sprite Point = Array Box = Array Circle = Array Triangle = Array end これは衝突判定範囲を指定する際に、配列だとちょっとわかりにくいかなーと思ってその対策案のひとつ。 結局全部Arrayな…

地球儀にしてみた

かんたんネットさま(http://kantan-net.main.jp/worldmap/)から世界地図を頂いて、このまえの球体に貼り付けてみた。アルゴリズムは地図の方式にあわせて変更。ついでに地球なので傾けてみた。画像のサイズが違うとおかしくなる問題もあったのでそのへんも修…

球体レンダリング

ずいぶんまえにTwitterで@terushowさんが3D機能の使い道について説明していたことがあって、そのひとつに例えば球体にテクスチャマッピングをして2D画像を生成する、というのがあったと記憶している。 3Dとはポリゴンのことで、球体をポリゴンで作るとすると…

影をつけてみた

昨日のやつにすごく適当にライティング計算を追加してみた。適当すぎるので正しいかどうかはわからないがなんとなくそれっぽく見えてはいるようだ。 require 'dxruby' hlsl = <<EOS float g_start; float g_level; texture tex0; sampler Samp = sampler_state { Texture =<tex0>; AddressU = BORDER; AddressV = BORDER; }; float4 PS(float2 input : TEXCOOR</eos>…

レンズシェーダ

レンズっぽい球面収差つきの拡大シェーダ。毎度のことながら計算は適当にそれっぽく。レンズの屈折の計算は難しくてよくわからん。 画像はきまぐれアフター様 http://gakaiblog.at.webry.info/ require 'dxruby' hlsl = <<EOS texture tex0; texture tex1; float2 scale; float2 point; float r, distance; sampler Samp0 = sampler_state { Texture =<tex0>; }; sampler Samp1 = sampler_state</eos>…

波うちシェーダ

以前、ラスタスクロールのシェーダを作ったが、それの変形。 ラスタスクロールはy座標をsin関数に突っ込んでx座標を変えていて、今回は中心からの距離をsinに突っ込んでy座標を変えている。中心点から同心円状に縦に歪む。 この例だとけっこうキツいので、も…