2012-01-01から1年間の記事一覧

レンズシェーダ

レンズっぽい球面収差つきの拡大シェーダ。毎度のことながら計算は適当にそれっぽく。レンズの屈折の計算は難しくてよくわからん。 画像はきまぐれアフター様 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座標を変えている。中心点から同心円状に縦に歪む。 この例だとけっこうキツいので、も…

まっぷたつシェーダ

マウスでドラッグするとその位置、方向の直線で画像を真っ二つにするシェーダ。マウスで線を描く。 しゃきーん。 どうやっているのかというと、マウスでドラッグした範囲をベクトルとしてシェーダに渡し、ドラッグ開始位置と描画する点のベクトルとの外積を…

スペハリシェーダ

軽く作ってみた。 すごく適当に3Dパース付で描画するシェーダ。実行するとスペースハリアーの地面みたいにスクロールするし、上下の変化もする。 require 'dxruby' hlsl = <<EOS texture tex0; sampler Samp0 = sampler_state { Texture =<tex0>; AddressU = WRAP; AddressV = WRAP; }; float4 PS(float2 input : TEXCOORD0) : C</eos>…

びよ〜ん

1.3系のインストールデモはシェーダを使って少しだけ見栄えをよくしてみたが、1.2系はシンプルなものになっている。1.2の機能で何かできないかと考えていて、こんなものができた。 スクリーンショットを見るだけだと文字が伸びているだけなのだが、動かして…

DXRuby1.3.5devリリース

Wikiに置いといた。 Imageに三角を描いたり、色定数を追加したり円と矩形の判定を追加したり、と言ったところ。 古いsampleはclassic_sampleディレクトリに移して、new_sampleディレクトリを作った。 あと、DOCディレクトリにHLSLチュートリアルをなんとなく…

多関節キャラ2

マウスのほうを向くようにして、オマケで角度に乱数を導入してみたらなんかすごく気持ち悪い動きになったので置いておく。 #!ruby -Ks require 'dxruby' class Parts < Sprite attr_accessor :prev, :joint_xp, :joint_yp, :joint_xn, :joint_yn, :joint_ang…

多関節キャラ

リクエストがあったので簡単な多関節キャラを作ってみた。 理屈としてはオブジェクトに次のオブジェクトとの接続位置を持たせて、自分の姿勢にあわせて接続位置を回転して、次のオブジェクトはその位置をベースに自分を回転させて、という処理を再帰的に行え…

サンプルLaser.rb作り直し中

DXRubyのサンプルにLaser.rbというのがある。この記事で作ったやつだ。 http://d.hatena.ne.jp/mirichi/20100125/p1 判定にDXRubyExを使っているが、それでもレーザーを三角2つで表現するために自前で回転させたりして面倒だった。DXRuby1.3系ではSpriteクラ…

追加機能

とりあえず1.3系に入れるが、別にSpriteやShaderに依存するわけではないので1.2系にも入れる。 Imageに三角形を描画するtriangleとtriangle_fillを追加した。とくに塗りつぶす三角形は自前でやろうとすると大変面倒なのであるとラクだ。 Window/RenderTarget…

Sprite#checkを作った

画面をマスで区切ってマウスで選択する場合、座標をいちいち計算するのは面倒くさい。特に、マップエディタなんかの場合に左側にマップ、右側にチップとかすると面倒くささが増大する。しかもマスのサイズを小さくしてマップを広く見るモードとかを追加しよ…

ブラー

Maverick Projectさまを参考に。 http://maverickproj.web.fc2.com/pg30.html DXRuby1.3devで動作するよう修正してみた。いろいろいじったけど、変数名とか元のままで動くのでそのままコピペすればよかった。 passを自由に指定できるようにしたほうがよいか…

簡易エッジ抽出シェーダー

ふと思いついたのでテキトーに作ってみた。テキトーすぎてあまり品質はよろしくない。 α値が変化している部分を残す方法なので、アンチエイリアスがかかった画像だと綺麗にならない。どんな絵でもうまくできるようにするのも大変だから、どっちかというと絵…

ocraの罠

RubyのプログラムをWindows用に配布するにはocraが便利だ。ウィルススキャンが反応したりすることもあるが、それでも便利なので使う。 今回はそのocraの話。プログラムで使っている拡張ライブラリやrbファイルをまとめて圧縮してexeに含めてくれるのがocraだ…

DXRuby1.2.2リリース

最近は1.3系開発版をずっといじっていたのだが、そっちで見つけたバグの修正や追加したメソッドなどをバックポート。 RenderTargetのα合成変更、Image#saveのPNGサポートあたりが大きな変更と言えるだろう。

Pox Bullet Night

DXRubyと物理演算ライブラリのChipmunkを使って作られたゲームが公開されたのでご紹介。 シンプルな弾幕アクションゲームだ。難易度は高いがテンポよく繰り返しができるので、ひたすらチャレンジしてコツをつかむべし。 ちょっとずつ上手くなっているのが実…

DXRuby1.3.4dev

Wikiに置いた。 今回は大きな修正は特に無いのだが、ここまでの修正を1.2系にバックポートするという区切りの意味でリリース。 基本的に1.3系に入っている修正のうち、Sprite、Shaderにかかわらない部分は全部取り込む予定。 つまり、 ・Imageのテクスチャ多…

衝突判定のやりかた

Spriteクラスの衝突判定はSprite.checkで使うことができるが、もっと手軽に使えないものかと。いちいち継承してクラス定義してhitメソッドを作ってとかするほどでもない場合に、Sprite.checkの戻り値で判断できるが、それすらめんどくさい。 どこまでもめん…

DXRuby1.3.3dev

開発中のDXRuby1.3.3devをWikiに置いた。 今回は細かいメソッド追加と不具合修正および、RenderTargetのブレンドアルゴリズム変更。 あと、微妙にWindow.draw_tileを修正。ちょっと使い勝手がよくなったはずだ。ちょっとだけ。 現在直面している問題は半透明…

RGSS2のマップデータ読み込み

マップデータを読み込んで配列に展開するのはこのようなコードになる。 module RPG class Map def getdata @data end end class Event class Page class Graphic end class Condition end end end class MoveRoute end class MoveCommand end class EventCom…

マップ描画

開発版でWindow.draw_tileを少し書き直した。 いままで描画するマップチップの数だけ描画予約をしていたのを、1つだけ予約して描画時にループして画面を作るようにした。描画予約のキューが大幅に減り、メモリの利用効率が上がったはずだ。ループ処理や演算…

色の配列

DXRubyでは色の指定は3つないし4つの要素を持つ配列で行う。なぜこの形になっているのかというと、そのほうがコードを書くのがラクだったからだ。 例えばStarRubyとかMiyakoとかRGSSを見るとColorクラスというものが用意されている。Color.new(r,g,b,a=255)…

半透明と半透明の合成の結論

RenderTargetの半透明合成は結局DirectX9のせいでできないということであった。そこでシェーダを使ってムリヤリにでもどうにかならないだろうか、とちょっといじってみた。 まずDXRubyの開発中最新版でWindow.draw_exに:blend=>:noneの指定を追加。透明色も…

半透明と半透明の合成

ずいぶん前に半透明の合成式に関してあれこれ考えていたことがある。 http://d.hatena.ne.jp/mirichi/20091207/p2 現在DXRubyのImage#drawはこの式を採用していて、半透明画像に対して半透明画像を描画した場合の結果は見た感じ自然になる。 ところが先日、D…

Spriteオブジェクトの管理方法

アクションゲームなどを作る場合に、キャラのオブジェクトを管理する方法としては、Rubyなので標準で組み込まれている配列クラスを使うのが普通じゃないかと思う。 しかし、配列はループ中に消したりできないから、何らかのフラグなどを用いてArray#delete_i…

決まりきらないポーズでも

異次元だったらOKだろうということで、ウィングマンのアレを作ってみた。 画像はきまぐれアフターさまから。いつもお世話になっております。 http://www5d.biglobe.ne.jp/~gakai/ グレイスケール化にDXRuby1.3.2dev添付のSpriteShaderを更に改造したものを使…

ソースの圧縮をする微妙なBimyoモジュール

手段がバレバレになるので見ようと思えばちょっとした細工ですぐ見れるわけだが。 画像とかもそうで、簡単に見れないようにするためにはソース非公開でバイナリの拡張ライブラリを作るほうがよい。 とりあえず参考までに。 このような微妙なモジュールを作る…

turnトランジション

吉里吉里の拡張トランジションのスクリーンショットだけを見てチャレンジ http://devdoc.kikyou.info/tvp/docs/kr2doc/contents/Transition.html もっと頑張りましょう。Window.draw_morphのアルゴリズムはイマイチなので、違う向きに画像をつぶすと大変なこ…

DXRuby1.3.2dev

DXRuby1.3.2devをWikiのファイル置き場に置いた。 http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi大きな修正点としては、DXRubyFrameworkのものに近い衝突判定の追加。Spriteオブジェクトの描画にあわせてSprite#angle=やSprite#scale_x=/scale_y=などで指…

衝突判定の分割

画面を4分割して判定する場合のアルゴリズムを考えていた。 これはオブジェクトの中心座標をすべて足してオブジェクト数で割って分割座標を作った場合に、どのぐらい衝突判定の負荷が減るかというのを検討したプログラムの画面。 オブジェクトは100個あって…