DXRuby

RayMarching

前から気になってたんだけどようやくできた。 レイマーチングはレイトレーシングの一種で、ポリゴンを使わない3D描画である。コードはこちら。CustomRenderTargetは使っておらず、通常のShaderで描画している。

CustomRenderTargetその5

今回はサンプルのmaptest.rbの話。名前がひどい気味なのはいつもの話なので気にしない。でもさすがにそのうち変えるかも。それはそれとして、動かすとこのような画面が出る。 ちなみに壁との衝突判定は面倒なのでやっていない。外側に出てどこまでも行ける。

CustomRenderTargetその4

初歩的な3Dサンプルということで追加したspheretest.rbだが、実行するとこんな画面が出る。マウスの方向にライトの光源があるっぽい感じにライティング処理が入っている。 今回はこれの話。つってもだらだら書くだけなのでこのへんの記事で3Dが理解できるか…

CustomRenderTargetその3

DXRuby1.5.22devをWiki(避難所)に置いておいた。しょぼいバグの修正とset_viewportのデフォルト設定追加のみ。あとサンプルの整理。 本格的な3Dにはあんまり興味がないというか難しすぎて付いていけないのだが、初歩的な3Dぐらいはそれなりにやってみたい。…

CustomRenderTargetその2

ここで3Dの計算の詳細(ビューやプロジェクション変換行列の中身の計算とか)について説明するのは何か違うような気がするのでそういうのは省略するとして。って説明できるほど詳しくもない。数学苦手だし。 そうは言ってもDirect3Dはそのような行列を駆使して…

CustomRenderTarget

では新機能について説明。 CustomRenderTarget リファレンスにも書いてあるけども。RenderTargetを継承して作られている。現在はまだ残っているがdraw系メソッドは呼び出しても何も起こらない。消す予定。ユーザはCustomRenderTargetを継承してcustom_render…

DXRuby1.5.21dev

久しぶりの開発版リリース。DXRuby1.5.21devをWiki(避難所)に置いておいた。なんか20が飛んだような気がしないでもないがまあ数字に意味は無いので気にしない。 今回はCustomRenderTargetクラスとVertexBufferクラスを追加した。これらは今までよりも低レベ…

ベクタグラフィックスその8

大物としては最後になる塗りつぶし機能。NanoVGではベジェ曲線だろうがなんだろうが囲まれた部分を指定の色やグラデーションで塗りつぶすことができる。塗りつぶした三角形なら簡単に描画できるが、形状が不定のものをどうやって塗りつぶすかという問題であ…

ベクタグラフィックスその7

今まで放置していた色をつける機能を追加する。NanoVGではnvgStrokeColorでベタ塗りの色を指定して、nvgStrokePaintでグラデーションを設定できる。どちらも内部的にはNVGstate構造体のstrokeメンバにNVGpaint構造体を格納しているだけである。よってベタ塗…

ベクタグラフィックスその6

今回は3次ベジェ曲線を作る。ベジェ曲線というのは始点終点であるアンカー2つと制御点を使って曲線を描画するアルゴリズムである。具体的にはベジェ曲線 - Wikipediaの下のほうの作図法を見てもらうとわかりやすい。また、3次ベジェ曲線体験ツールを作ったの…

ベクタグラフィックスその5

端の処理はあるが接続点の処理が無いので今回はこれを作る。 各種フラグ まずPointクラスに項目を追加して各種フラグを持てるようにする。 class Point < Struct.new(:v, :dv, :dmv, :len, :left, :inner_bevel, :bevel, :corner);end lenは線の長さでフラグ…

ベクタグラフィックスその4

現状ではパスは1つだけでOreVGクラスで扱っているが、NanoVGはサブパスを複数持つような構造になっている。これはたぶん閉じたり閉じなかったりする複数のパスを一まとめにしてグラデーションしたりするためにそうなっているんじゃないかと思うのだが、今回…

ベクタグラフィックスその3

端の処理がbuttだけなのでroundとsquareを追加しよう。ついでにclose_pathでループを作れるようにもしてみる。 ループ処理 NanoVGではnvgClosePath関数を呼ぶことでそのパスのclosedフラグを立てる。これが立っていると最初の点と最後の点が自動的に接続され…

ベクタグラフィックスその2

DXRubyタグにしているが結果の確認に使っているだけで別にDXRubyである必要性も何も無いんだよな。いずれはNanoVGみたいに本体とバックエンドを分離してみたいところ。まあいずれ。 今回は前回手を抜いた頂点配列の生成のところを作ってみよう。 頂点配列と…

ベクタグラフィックス

新年あけましておめでとうございます。今年もよろしくお願いいたします。 さて、ちょと前に作ったラスタライザを、NanoVGを参考にしながら手を入れていってベクタグラフィックスにチャレンジしよう。 基本的な流れ NanoVGではnvgBeginFrame〜nvgBeginPath〜…

ラスタライザを作る

もう年末なのだが、ちょっと前に作ってみたラスタライザの話。といってもすごいしょぼいもので、とりあえず太さを指定した直線をDXRubyのImageに描画するというもの。 ようするに三角形2個で四角を描いているだけなのだが、それだったらImageのメソッドでで…

DXRuby1.4.5(´・ω(´・ω・`)

SEGVする不具合を修正してリリースした。 踏む人が現れると申し訳ないので修正後は急いでリリースしたほうがよいという知見が得られた(当たり前DXRuby最近なにもしてないのかと言うと、実際のところ他の何かをしているわけでもなくここんとこ全面的に何もし…

DXRuby1.4.4(´・ω・`)

RenderTargetバグの修正漏れによりWindow.resize時にコケることがある不具合が発生していたので修正してリリースした(´・ω・`) まだSEGVする現象が残っているようで、自分の目で見てはいるのだが再現性が低く調べようがないのでとりあえずはこれで様子見。も…

DXRuby1.4.3リリース中

とりあえずDXRuby1.4.3のgemだけリリース。パッケージ作るのいつも面倒だったので今回からはgemだけにしようかと考え中。 Ayameを同梱しようと思ったのだが、gemではどうもbinディレクトリにdllをコピーすることができないようなので挫折。やりかたわかる人…

敗軍の将は兵を語らず

とかいうタイトルを付けつつ、別に将でもないので語りまくる。 dxsdl2r リポジトリはこちら。 描画系をOpenGLに書き換えた。理由はスケーリングや回転のSDL2の座標関連の扱いが気に入らなかったから。あと、3D描画を試したかったから。 ということで3D関連の…

物理エンジンを作る4

四角を回転させることにチャレンジしてみよう。回転した四角同士の衝突判定はDXRubyで普通に可能だが、衝突した反応を計算するためには、衝突点と作用線を求める必要がある。それがあれば先日の計算にそれらをぶち込むことで結果が計算できる、はずである。 …

物理エンジンを作る3

反発するようにしてみよう。前回のコードでは衝突した場合に作用法線方向の速度を0にするだけだったのでピタっと止まっていたが、反発させると弾むような動きを作ることができる。衝突後に回転させたりするのも、円と四角が衝突した場合に自然に反応するのも…

物理エンジンを作る2

前回は中身のほぼ無いコードだった。今回はこれにちょっとだけ追加しよう。いきなり難しい計算などは無理ゲーなので、とりあえずは回転しない四角を動かすところから。 ComplexVector 速度の表現をComplexでやるのはよいのだが、2Dの力学計算は基本的にVecto…

物理エンジンを作る

今年最初の記事はまたオモムキを変えて、DXRuby用2D物理エンジン(モドキ)を作ってみよう。 物理エンジンとは Box2DやChipmunkのような、物体の衝突をなんとなくそれっぽく計算してくれるライブラリである。基本的には剛体(変形しない物体)を扱い、物理エンジン…

ComplexSpriteと相対表現

ACの記事で複素数ネタを書いたが、そこにオマケとして計算を保持するクラスをつけておいた。これを使って階層Spriteを作ってみた。 https://gist.github.com/mirichi/2b25b0a58e93bf780df6 昔作ったEntityクラスの焼き直しで、あっちは行列を使っていたのだ…

パーリンノイズ

ゲームやCGなどでよく使われる技術の一つにパーリンノイズというものがある。 地形などを生成する場合に単純にランダムにすると変になるけども、パーリンノイズは勾配を生成して補間してくれるのでなめらかに変化するランダム地形が作れる。地形だけじゃなく…

複素数を扱う

DXRuby Advent Calendar 2015の20日目の記事です。 19日目はあおいたくさんの[Ruby][DXRuby] ピザ焼けなかったので野良メイドを拾って育てるゲーム作りました - あおたくノートでした。「野メイド」はGUIフレームワークSpriteUIを使ったテキストSLGというこ…

押されたキーの取得

司エンジンを作ってる土屋つかささんのブログで、DXRubyのキー入力に関する話が出ていたので便乗。 http://d.hatena.ne.jp/t_tutiya/20150912/1442022885キー入力に関する話は地味に厄介で、例えばテキスト入力をしたいのならアスキーコードを返すべきだし、…

DXRuby1.4.2リリース

1年半ぐらい経ってしまったが、DXRuby1.4.2をリリースした。今回よりリファレンスマニュアルを新しいのに差し替えて、Webでの参照はこちらになる。 http://mirichi.github.io/dxruby-doc/index.html chmは作り方がいまいちよくわからずうまく作れなかったの…

新機能追加の件

このあいだ、会社の帰りにふと思いついたので実装してみた。 RenderTarget#regenerate_proc= 現状ではRenderTargetはデバイスロスト問題を回避するために毎フレーム強制的にクリアしている。この制限があると、RenderTargetで画面を構成しようとした場合に描…