無限多世界解釈

前から思ってたことを言語化しておこうと。 ゲームとかアニメとか小説とか漫画とかで、パラレルワールドが出てくることがある。過去のある時点で、何かしらの選択や結果が異なる、別の世界だ。歴史のIFルート。何かしらの作品のファンなら誰でも考えてしまう…

RISC-Vを目指す(6)

やってみたいことが無いわけではないのだけども、なかなか具体的なやり方がイメージできないので、とりあえずRV32Iの命令を一気に実装してしまおう。と言ってもCSR系の制御命令は今のところサッパリわからないので保留。なので残りの命令はlui、auipc、条件…

RISC-Vを目指す(5)

ぼっちの引きこもりはお正月ヒマなので。っていうか年末に大阪行く予定だったのが食あたりでダウンしていたのでそのままって感じ。 ともあれ、今回は今までに作ったロード/ストア系命令を揃えることにしてみる。ちなみに前回のlb命令は符号拡張するべきだっ…

RISC-Vを目指す(4)

新年明けましておめでとうございます。 さて、去年に引き続きRISC-Vの命令セットを実装してみる試練。前回でっちあげたRAMは書き込みしかできなかったので、lb命令を実装してRAMからの読み込みを作ってみよう。書き込みができたのだから読み込みも簡単かと思…

1年まとめ

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

RISC-Vを目指す(3)

いまのところ、プログラムは回路埋め込み状態つまりマイクロコードとなっているわけだが、いずれRAMに書き込んでそれを読んで実行できるようにしたい。とは言えそれができるようになるにはまだまだ先が長いので、とりあえずはRAMを外部に作って値を書き込む…

RISC-Vを目指す(2)

RISC-V命令セットにしてみたらハンドアセンブルで命令を並べるのが大変になってしまったので、非常に雑にアセンブラを作ってみた。これもずっと前に作ったx86アセンブラを持ってきて書き直したものである。RISC-Vアセンブラ · GitHub このような感じにシミュ…

RISC-Vを目指す

なんとも久しぶりの更新なわけだが、今度のネタは2年半ほど前にやってたCPU作成の続きとなる。前回はオレオレアーキテクチャの4bitCPUだった。今回はそれの32bitへの拡張と、命令セットをRISC-VのRV32Iとして、まともなCPUを作ってみようという企画となる。 …

WebAssemblyチャレンジ2

とりあえず作ってみた。 WebAssemblyのバイナリフォーマットを見ながらそのまま書いただけなのでさほど難しくない。 LEB128 ちょっと変わっているのはwasm内での値の表現がLEB128というエンコーディングで表現されているところ。これは可変長整数の表現方法…

WebAssemblyチャレンジ

まだ何かができるという状態ではないのだが。 WebAssemblyとは Apple、Microsoft、Google、Mozillaが力を合わせて開発しているブラウザ用のバイナリフォーマットで、フォーマットっていうか、VMの命令セットと挙動の定義みたいな。バイナリフォーマットはwas…

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〜…

1年まとめ

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

ラスタライザを作る

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

NanoGLを試す

この記事はRuby Game Developing Advent Calendar 2016 - Adventar の20日目です。昨日は空いてました。 NanoGL NanoGLをGoogleさんに問い合わせるとWebGLラッパーが出てくるが、ここで言うNanoGLはそれではなく、nanovgを描画のベースにしたマルチプラット…

アクティベーションコンテキストについて

RubyでFiddleを使ってWindowsAPIを叩けばWindowsアプリを作ることが、まあ、できるというのは検索するとたくさん出てくるのでわりとメジャーな話。しかし普通に作るとボタンなどの見た目がクラシックになってしまう。こんな感じ。 Windows7なら7的な見た目に…

Rubyの標準添付ライブラリFiddleでゲームプログラミングする

この記事はRuby Game Developing Advent Calendar 2016 - Adventar の12日目です。11日目は土屋つかささんのrubyゲーム開発にユニットテスト/テスティングフレームワークを導入する(2)【実践編】 - 土屋つかさの技術ブログは今か無しかでした。Ruby...ゲ…