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

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