C++

Expression Template 其の一

C++

早速、Expression Template(ET)を試してみることにした。 ずいぶん前に、買って置いたC++テンプレートテクニックを参考に実装してみる。 そのままでは詰まらないので、ベクトルの次元数を型情報としてテンプレート引数にとるようにしてみた。Traitsってやつ…

Vector演算の高速化

レンダラが重いので、SIMDを使ってVectorの演算部分を書き直したのだが・・・。テストしてみると、超遅い。外積を求める演算を100000回させたら、SIMD使って無い方が1ms。でSIMDで書いた奴は15ms・・・。 シャッフルを多用したり、水平演算を噛ましてるのが…

フォトンマッピング 其の五

幾つか細かいバクを潰したのと、屈折の実装をした。 一番の基本の拡散反射の式が間違っていたらしく、直したらかなり綺麗になった。 一応、集光模様っぽいのが出ている。しかし、まだ、完全にレンダリング方程式を再現していない。 完全再現のために次は直接…

フォトンマッピング 其の四

反射を実装した。が、何かノイズがでてる・・・。 特に左の奴はまともに描画すらされていない。何も考えずに書いていたせいで、クラス間の依存関係が酷くなってきた。書き直したいけど、もう少し頑張ろう。。

フォトンマッピング 其の三

放射輝度推定が出来るようになったので、サクッとレンダリングしてみた。 と言いたいが、超時間掛かった。効率無視のゴリ押しコード書いてたから仕方ないか。 放出フォトン数500000個、放射輝度推定に1000個。 なんか、それっぽくはなったけど全然リアルじゃ…

フォトンマッピング 其の二

フォトンの反射を実装した。と言っても一番簡単な鏡面反射だけだが。 次は光線追跡部分。この辺りは一般的なレイトレと同じようにレイを追跡して計算する。ただフォトンマッピングではレイが衝突したときに、その周りのフォトンを探して輝度の計算を行う。交…

フォトンマッピング 其の一

最近忙しくて趣味のプログラムを書く時間が余りない。 以前からフォトンマッピングのレンダラを作成しているのだが、ようやくフォトンをばら撒いてKDTreeを構成するところまで来た。 といっても、ベクトルの交差判定くらいしかしてないので、まだ先は長い・…

深度バッファ

何か忘れていると思ったら、深度バッファを書いていなかった。 後は深度値を比較して塗りつぶし判定をする。出力してみたが、切れ目が入ってるようだ。。

ラスタライズ

ワイヤーフレームが出来たので、次はラスタライズに挑戦。 ブレゼンハムという有名な手法を使ってピクセルを塗りつぶした。まだシェーディングを行っていないので、ベタ塗り状態。

ワイヤーフレーム

授業が暇だったので、ワイヤーフレームでボックスを表示するプログラムを書いてみた。頂点を行列でスクリーン座標に変換しているだけだし、よく考えたらいつもやってることだ。 面白くなってきたので、ポリゴンを塗りつぶすプログラムも書いてみた。 次は変…

線形代数とか

C++

いままでD3DXのやつを使っていたけど、そろそろ自分で書こうと思い、ベクトルとマトリクスを書いてる最中。 その中でも、逆行列を求める関数の高速化が悩みどころだ。3次正方行列までなら行列式とかを使って地道に計算してもいいが、4次だと計算量が馬鹿に…

.NetのBitmapをポインタで操作する

C++

自前でピクセルデータとかいじらないし、使い道があるか分からんけど。 Bitmap ^buffer = gcnew Bitmap(256, 256); // ロック対象矩形 Rectangle rect(0, 0, 256, 256); // 書き込み専用でbufferをロック Drawing::Imaging::BitmapData ^bmp_data = buffer->…

圧縮ファイルの中身

ネットを徘徊していたら、zipのファイルフォーマットについて解説しているサイトを見つけたので、これを参考に簡単なzipファイルを吐き出すプログラムを書いてみた。 zipの中身は基本的には、圧縮されているファイルの情報が入ったヘッダ、ファイルのデータ…

boostをビルドメモ

VSのコマンドプロンプトからboostのディレクトリに移動してbjamコマンド実行。以下オプション --toolset = msvc-x_0 コンパイラの指定VSならmsvc。バージョンを指定することも可、msvc-8_0、msvc-9_0、等。 link, runtime-link = static, shared 生成するラ…

クラスは自殺しても良いのか?

C++

ネットで拾ったソースを読んでいたら delete this していたので、これについて調べてみた。 結論から書くと、文法上間違ってはいないし、危険性を認識した上でいくつかの事柄を守れば、使用しても問題無さそうだった。 #include <iostream> class Suicide { public: vo</iostream>…

フィードバック・ブラー

試験も終わったのでプログラミング再開。 ゲームの見た目を華やかにするなら、やっぱりエフェクトをかけるのが手っ取り早い。 ということで、手始めにフィードバック・ブラーを実装。 前フレームに描画したものを拡大して、半透明合成するだけの簡単なものだ…

簡単な物理シュミレーション

前回の球を大量に表示していたら、何となくパチンコを連想してしまったので、球同士の衝突を実装してみる。 ついでにボックスも実装しておいた。 ボックスにめり込んだり、球を大量にばら撒くとクソ重くなってしまう等、まだまだ改善の余地があるなあ。

cook-torranceの反射モデルを実装してみる

DirectX9 シェーダプログラミングブックを見ながらcook-torranceを実装してみた。 とはいっても、計算式そのものは全くわからないんだけど、、あと、図書室で Morden C++ Design を見つけたので買わなくてすんだ。暫くは図書室に通うことになりそうだなぁ。

boost::spiritで構文解析

前から気になっていたspiritのページを少し読んでみた。 これを使ってBNF(Backus Naur Form)で文法を定義すれば、構文解析機が出来上がるという代物らしい。 以前、自前で字句解析機や構文解析機を書いていたが、結局面倒になってやめてしまったので、今度は…

enable_shared_from_this

shared_ptrにつっこんだクラスのメンバ関数内で、thisを値にもつshared_ptrを使いたいという場面があった。 weak_ptrをメンバ変数として持たせ、生成時にそれに記憶させるという手法をとっていたのだが、似たような機能を付加させるenable_shared_from_this…

思わぬものが出てきた・・・

Windowは表示できたので、次はDirect3Dのコードを書こうとしていたら、HDDの奥からバックアップを取り忘れて消してしまったと思っていたDirect3Dのソースファイルが出てきた。 なので、これを流用してDirect3D部分を実装。試しに画像を表示してみる。次は入…

Window表示

C++

ゲームでも作ろうかと思って、昔書いたWindowを表示するコードを見たら結構酷かった。 このまま使うのは嫌なので、クラスを使って書きなおし。メンバ関数をCALLBACKにして使えないか調べていたが環境によってやり方が異なるようなので、おとなしくstaticにし…