2008-12-01から1ヶ月間の記事一覧

ポイントライトとシャドウとマテリアルまで

あと大きさのある光源を実装したらGI的なフェーズに進める。

次のテーマはThe Cornell Box

http://www.graphics.cornell.edu/online/box/ とりあえずマテリアルとエリアライトとシャドウを実装する。

traitsとtag dispatchがわかった

c++

やっとわかった。 これは、ライブラリを使うだけでなくて書いてみないとなかなかわからないな。 以下 p[0]とp.xというインタフェースの違うものを一緒くたに扱うための努力。 #include <iostream> namespace di { // 関数分岐用のタグ struct unknown_tag {}; struct u</iostream>…

効果が出ない

レイの発射部分をtbb経由に置き換えたのだが どうしても速度が出ない。 tbbでマルチスレッドにした方がだいたい2倍から2.5倍遅い。 その間CPU負荷は2つともほぼ100%になるので待ち合わせが 原因ではないように見える。 そこでgoogle performance toolsでプロ…

blocked_range2dで画像を作ってみた

blocked_range2dという2Dのサンプリングにうってつけのものがあるので使い方を調べてみた。 Tutorialによるとシングルコアでもリニアに走査するよりメモリのキャッシュヒット率が上がるのでよいものだというニュアンスのことが書いてあったがそうなのか。 #i…

レイのサンプリング部をtbbのblocked_range2dで換装してみた。

まずは変更が少なくて済むparallel_forでやってみる。 画素毎のループをファンクタに抽出して必要な変数を持たせてやるだけだったのでさくっと作業は完了。 さっそく実行してみる。モデルはスタンフォードのドラゴン。 // 通常バージョン store: dragon_vrip…

Intel tbbを試してみる

今作っているraytraceに以前から注目していたIntelTBBを組み込んでみることにした。 まずは情報収集から。本家からTBBのdevlop版の最新版のソースを入手。解凍してみたところ特にconfigureとかそういうのはなかった。 READEMEの指示にしたがって $ gmake で…

tbb練習

サンプルを見ながら練習開始。 公式のGetting Startedのサンプルはいまいちだなぁ。 正直、何やってるか理解できんw むしろ2つめくらいのサンプルとしてはよいか。 環境作り(gentoo)。 インストーラはあるのかもしれないが見つからなかったのでとりあえず …

UniformedGrid実装

ようやくUniformedGridの実装に成功。 曖昧な理解では書けないことはないのだが デバッグできないのであった。 UniformedGrid実装に考慮されるべき点で気づいたことをメモ。 まず、グリッドのサイズをどうやって決めるか。 今回は長辺を基準に何分割するかを…

std::maxのbindの仕方

手間取ったのでメモ。 普通に書いた方が早いし見やすいのだがこうなったら無理してでも使う。 手段が目的になる典型的なw namespace lmd=boost::lambda; lmd::bind( static_cast<const int&(*)(const int&, const int&)>(&std::max), 1, lmd::_1 );</const>

微速前進

UniformedGridはおいといて球を実装してみた。 さすがに簡単だったが、 TinyJSONのany_castで値コピーとリファレンスを間違えてはまったり のちの拡張用に球の入れ物をboost::variantにしたりとかしたので 少し時間がかかった。 作っているうちに設定ファイ…

Genericは難儀だ

c++

何やらraytraceの下回りのライブラリをGeneric にできそうな気がしたので試行錯誤していたのだが 途中まで作って値が全部コピーで非常に効率悪いのに気付く。 ここで、 pointerの時はコピーで他の型が来たらreference(場合によってはconst reference) にテン…

boostのユニットテストはstaticリンクする

gentooにboost-1.37.0をソースからインストールしたのだがunit testがリンクできない事態に遭遇。 /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/../../../crt1.o: In function `_start': (.text+0x18): undefined reference to `main' collect2: ld returned 1 exi…

Uniformed Grid頓挫中

すぐできるかと思ったが意外と厄介。 まだ、2分割以上するとまともに動かないw

directional lightとlambertシェーディングを実装

カメラ位置を変えるのにも再コンパイルという 状況を鑑みて設定ファイルを導入。 ファイルフォーマットは、先日仕込んでおいたboost::spirit のTinyJSONを活用してJSON形式とした。 こんな感じで。 { "view":{ "eye":[0.0, 0.1, 0.8], "angle":30.0 }, "scen…

ぼちぼちレンダラ作成開始

ここのところ少しずつ準備していたレイトレーサが ようやく動作するところまで来た。 Erlangのレイトレースベンチの時に作ったやっつけのものじゃなくて わりとちゃんとしたものを作ろうとしている。 球のみのシーンから始めても良かったのだが むしろ世間の…

TAB書き出しとTAB読み込みを作ってみた

w3m

開いているタブの書き出し(DUMP_TABS)と それを読み込んで新規タブで開く(RESTORE_TABS)コマンドを作った。 たいした長さでもないがパッチにしておきました。 http://gunload.web.fc2.com/w3m/patch.html 今回のような場合は追記するだけなので、 わざわざパ…

gcc4.3にしてみる

gtk+を~x86で2.14にアップグレードしていたら SSE2 instructions require GCC 4.2 or higher. とか出てpixmanのところでemergeが止まってしまった。 ついでに glibcとgccに~x86をつけてemergeする。 そろそろ、/etc/make.confに~x86を書いた方がいいかもなぁ…

screenの最新版を入れてみた

cui

いつも通りscreenにパッチを当てようとおもってうろうろ していたら本家でambigouswidthパッチを取り込んだみたいであることを発見。https://savannah.gnu.org/bugs/?16666gitで最新版を取得できるみたいなのでやってみた。 $ git clone git://git.savannah.…

urimethodmapを動かすのに一苦労

w3m

メインマシンのWindowsXPが変調を来したのを機に メインをLinuxにしてサブマシンを逆にLinuxからWindowsXPに入れ替えた。 ついでにw3mをメインブラウザにすべく画策する。 1, 2年に一度のWindowsからの脱出作戦であります。 だいたいいつの間にかWindows生活…